在 AppSync 中链接多个突变

问题描述

我正在 AppSync 中做一个应用程序,我正在尝试使用 Cloud Formation 创建一个架构,其中一个突变链接一个解析器,第二个突变链接到第二个解析器。但它总是给我一个错误,说我不能在一个请求中附加两个突变。

如果我尝试在控制台中执行,我可以在两个解析器中附加两个突变。

有人知道我如何在 Cloud Formation 中配置所有内容吗?

[编辑] 我将此解析器添加到模板中

AppSyncMutationResolverOne:
   Type: "AWS::AppSync::Resolver"
   DependsOn: AppSyncSchema
   Properties:
     ApiId: !Ref GraphApiId
     TypeName: Mutation
     FieldName: exampleOne
     DataSourceName: !GetAtt DataSourceOne.example
     RequestMappingTemplate: !Ref RequestMappingTemplate
     ResponseMappingTemplate: !Ref ResponseRequestMappingTemplate

但是当我尝试添加第二个 Mutation Resolver 时,与第一个非常相似

 AppSyncMutationResolverTwo:
    Type: "AWS::AppSync::Resolver"
    DependsOn: AppSyncSchema
    Properties:
      ApiId: !Ref GraphApiId
      TypeName: Mutation
      FieldName: exampleTwo
      DataSourceName: !GetAtt DataSourceTwo.example
      RequestMappingTemplate: !Ref RequestMappingTemplate
      ResponseMappingTemplate: !Ref ResponseRequestMappingTemplate

它返回一个错误,说我不能向同一个 API 添加两个突变解析器

这是我的 RequestMappingTemplate,用于两个突变:

    {
       "version": "2017-02-28","operation": "Invoke","payload": { 
             "arguments": $utils.toJson($context.arguments)
          }
    }

解决方法

您的 Cloudformation 模板对我来说似乎不错,但是,根据您使用的 DataSource 类型,您也可以按照说明定义 RequestMappingTemplate 上的字段名称(即 Lambda 数据源) here,像这样:

{
    "version": "2018-05-29","operation": "Invoke","payload": {
        "field": "getPost","postId": "1",}
}

因此,基于此,您似乎对两个突变解析器使用了相同的 RequestMappingTemplate。检查两个请求映射是否对应于 Cloudformation 模板上为每个解析器定义的相同 FieldName。这可能是它在控制台上运行而不是通过 Cloudformation 运行的原因。