繁体   English   中英

将 CloudFormation 参数传递给 AppSync 解析器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM