簡體   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