AWS AppSync 订阅以对象为输入的 Mutation 困难

AWS AppSync Subscription to Mutation with object as input struggle

提问人:Tristan Müller 提问时间:11/16/2023 最后编辑:Tristan Müller 更新时间:11/16/2023 访问量:27

问:

我想创建一个 EventBridge 规则,该规则应通过 Appsync 触发 GraphQL 订阅。一切正常,直到我从对象变为字符串。Service

我的 GraphQL 模式如下所示:

input nestedObjectInput {
    A: String
    B: String
}

type simpleReturn {
    Name: String
    Service: nestedObject
}

type Mutation {
    simpleMut(Name: String, Service: nestedObjectInput!): simpleReturn 
}
    
type Subscription {
    onSimpleMut: simpleReturn
        @aws_subscribe(mutations: ["simpleMut"])
}

在 Appsync 服务中,我的订阅可以使用以下 Mutation 语法:

    mutation MyMutation {
      simpleMut(Service: {A: "aaa", B: "bbb"}, Name: "123") {
        IMSI
        Service {
          A
          B
        }
      }
    }

现在有趣的部分开始了......我希望通过 EventBridge 规则触发此突变。所以我需要配置一个输入变压器。

我的目标输入转换器如下所示:

    {
      "A": "$.detail.Service.A",
      "B": "$.detail.Service.B",
      "Name": "$.detail.Name",
      "Service": "$.detail.Service"
    }

我的任何输入模板都如下所示:

        {
      "query": "mutation SimpleMut($Name: String, $Service: {$A: String, $B: String}) { simpleMut(Name:$Name, Service: {A: $A, B: $B}) { Name Service{A B}}}",
      "operationName": "SimpleMut",
      "variables": {
        "Name": "<Name>",
        "Service": "<Service>",
        "A": "<A>",
        "B": "<B>"
      }
    }

如果我运行此示例事件:

    {
      "metaData": "secretStuff", 
      "detail": {
        "Name": "123",
        "Service": {
          "A": "aaa",
          "B": "bbb"
        }
      }
    }

并获得这个看起来很有前途的输出:

    {
      "query": "mutation SimpleMut($Name: String, $Service: {$A: String, $B: String}) { simpleMut(Name: $Name, Service: {A: $A, B: $B}) { Name Service{A B}}}",
      "operationName": "SimpleMut",
      "variables": {
        "Name": "123",
        "Service": "[object Object]",
        "A": "aaa",
        "B": "bbb"
      }
    }

但是我的 GraphlQL 订阅没有收到任何信息。我已将 lambda 与我以预期格式接收事件的终端节点并行放置。API 目标不会成为问题,因为如果是一个简单的字符串,它就会正常工作。Service

有什么建议吗??

或者我该如何调试它,因为我没有收到任何错误消息来了解出了什么问题

编辑 1:格式,附加 Q

JSON 亚马逊网络服务 graphql aws-appsync aws-event-bridge

评论


答:

1赞 YourFriend 11/29/2023 #1

由于 “nestedObjectInput” 在 mutation 中是必需的,而 “Service” 是 “nestedObjectInput” 类型的变量,因此下面可以是您的“输入模板”。

{
   "query":"mutation SimpleMut($Name: String, $Service: nestedObjectInput! ) { simpleMut(Name:$Name, Service: $Service) { Name Service {A B}}}",
   "operationName":"SimpleMut",
   "variables":{
      "Name":"<Name>",
      "Service":{
         "A":"<A>",
         "B":"<B>"
      }
   }
}

此输入模板会将传入负载转换为 AppSync API 中所需的格式。我尝试使用此输入模板重现解决方案,并在下面提供事件 -

    {
      "metaData": "secretStuff", 
      "detail": {
        "Name": "123",
        "Service": {
          "A": "aaa",
          "B": "bbb"
        }
      }
    }

我在 GraphQL 订阅中得到了以下结果 -

{
  "data": {
    "onSimpleMut": {
      "IMSI": "123",
      "Service": {
        "A": "aaa",
        "B": "bbb"
      }
    }
  }
}

我希望这就是你要找的。祝您编码愉快。