![](/img/trans.png)
[英]AWS::AppSync::Resolver using javascript in CloudFormation .yml fails to build
[英]Passing CloudFormation parameters to AppSync Resolver
所以我将我的 CloudFormation 模板定义为包含一个带有多个参数的参数部分,包括
Parameters:
DefaultLimit:
Type: Number
我还定义了一个 GraphQL API,我在其中使用 AppSync PIPELINE 解析器按顺序运行多个操作。
QueryResolver:
Type: AWS::AppSync::Resolver
DependsOn: AppSyncSchema
Properties:
ApiId: !GetAtt [AppSyncAPI, ApiId]
TypeName: Query
FieldName: getData
Kind: PIPELINE
PipelineConfig:
Functions:
- !GetAtt AuthFunction.FunctionId
- !GetAtt ScanDataFunction.FunctionId
RequestMappingTemplate: |
{
# Inject value of DefaultLimit in $context object
}
ResponseMappingTemplate: "$util.toJson($context.result)"
这一切都按预期工作,除了在映射模板中注入 CFN 参数值。
我遇到的问题是——我想将DefaultLimit
的值传递给before
的 RequestMappingTemplate,以便该值可用于ScanDataFunction
。 目标是在第二个 function 执行时将该值用作默认limit
值,比如 DynamoDB 扫描操作,并返回分页结果。
我当前的方法是在ScanDataFunction
的请求映射模板中硬编码limit
的默认值 20。 我为此操作使用 DynamoDB 解析器。 相反,我想注入参数值,因为它可以让我灵活地为不同的部署环境设置不同的默认值。
对此有任何帮助,我们将不胜感激。
|
YAML 中的字符开始一个块,之后您输入的缩进内容都被视为文本。 CloudFormation 不会处理任何这些。 我通常看到的解决方案是使用Join intrinsic function 。 它最终看起来很糟糕并且难以维护,所以我建议谨慎使用它。 下面是一个粗略的可能示例:
Parameters:
DefaultLimit:
Type: Number
Resourece:
QueryResolver:
Type: AWS::AppSync::Resolver
DependsOn: AppSyncSchema
Properties:
ApiId: !GetAtt [AppSyncAPI, ApiId]
TypeName: Query
FieldName: getData
Kind: PIPELINE
PipelineConfig:
Functions:
- !GetAtt AuthFunction.FunctionId
- !GetAtt ScanDataFunction.FunctionId
RequestMappingTemplate:
Fn::Join:
- ""
- - "Line 1 of the template\n"
- "Line 2 of the template, DefaultList="
- Ref: DefaultLimit
- "\nLine 3 of the template"
ResponseMappingTemplate: "$util.toJson($context.result)"
未经测试的代码警告
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.