Cloudformation yaml 中的 RequestMappingTemplate

问题描述

我正在尝试使用 stackery 将应用程序部署到 Amazon。我需要为 RequestMappingTemplate 指定字符串值。但我不能正确地写它。这里是 yaml 的一部分功能配置

  CreateArticleConfiguration:
    Type: AWS::AppSync::FunctionConfiguration
    Properties:
      ApiId: !Sub ${ApiId}
      Name: !Sub kp_${EnvironmentTagName}_createArticle
      DataSourceName: !GetAtt CourseGraphQLToFnCreateArticleDataSource.Name
      FunctionVersion: 2018-05-29
      RequestMappingTemplate: |-
        {
          "version" : "2018-05-29","operation": "Invoke","payload": $util.toJson($context.args.input)
        }

当我尝试使用 stackery 部署它时,它会引发错误

错误:解析模板失败:解析块映射时 "",第 1658 行,第 7 列: API: ^ 预期,但在“”中发现 '',第 1667 行,第 39 列: ... RequestMappingTemplate: "{/n /"version/" : /"2018-05-29/",/n / ...

这里是 RequestMappingTemplate 被处理到 aws-sam\build\template.yaml 的方式

RequestMappingTemplate: "{/n /"version/" : /"2018-05-29/",/n /"操作/"/ : /"调用/",/n /"payload/": $util.toJson($context.args.input)/n}"

如果我将双引号改为单引号,则模板部署成功,但在 AWS Mapping 中模板不正确

{/n '版本' : '2018-05-29',/n '操作': '调用',/n// 'payload': $util.toJson($context.args.input)/n}

我试图用 / 转义双引号,但没有帮助。有人能告诉我应该如何正确描述这些模板吗?

解决方法

模板文本应该存储在单独的文件中,然后你需要像这样使用它

CreateArticleConfiguration:
    Type: AWS::AppSync::FunctionConfiguration
    Properties:
      ApiId: !Sub ${ApiId}
      Name: !Sub kp_${EnvironmentTagName}_createArticle
      DataSourceName: !GetAtt CourseGraphQLToFnCreateArticleDataSource.Name
      FunctionVersion: 2018-05-29
      RequestMappingTemplateS3Location: **path-to-file**