我希望避免vtl模板中某些声明的重复,并在vtl解析器之间共享它们。
假设我在mapping_templates/shared.vtl中有一个样本
#set($sample_mappings = {
"KEY1": "VALUE1",
"KEY2": "KEY2"
})例如,我想在mapping_templates/sample_request_mapping_template.vtl,中使用:
$sample_mappings.get("KEY1")我尝试了以下几项,但没有成功:
#parse("shared.vtl")
OR
#include("shared.vtl")
$sample_mappings.get("KEY1")看起来确实是一个非常基本的特性,但我没有在aws解析器指南中看到它的文档,而且我认为这可能不被支持,因为AppSync vtl甚至不支持所有的vtl标准特性。
发布于 2019-11-20 17:13:07
不幸的是,目前不支持此功能。
我会代表你向团队提出这个请求。
发布于 2020-03-31 09:50:35
我们使用嵌套堆栈从VTL代码中获得一些重用。
嵌套栈模板../cfn/shared/vtl/template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Vtl Functions
Parameters:
VtlSomeCheckFunction:
Type: String
Default: |
#***#
#if($util.isNullOrBlank($ctx.args.input.someArg))
$util.error("Some error occurred")
#end
#***#
...
Outputs:
VtlSomeCheckFunction:
Description: VtlSomeCheckFunction
Value: !Ref VtlSomeCheckFunction使用嵌套的VTL堆栈的堆栈:
Resources:
VtlStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ../cfn/shared/vtl/template.yml
...
MutationUpdateResolver:
Type: AWS::AppSync::Resolver
Properties:
...
RequestMappingTemplate: !Join
- ''
- - !GetAtt VtlStack.Outputs.VtlSomeCheckFunction
- |
#***#
#set($items = ...
...发布于 2021-10-11 20:48:02
还可以使用AWS系统管理器从参数存储区检索模板。将字符串保存在系统管理器中,并在模板中引用它。
借用@ggriffin的解并替换SSM值
Resolver:
Type: AWS::AppSync::Resolver
Properties:
...
RequestMappingTemplate: !Join
- ''
- - '{{resolve:ssm:/path/to/param}}'
- |
#***#
#set($items = ...
...https://stackoverflow.com/questions/58950535
复制相似问题