Amazon web services 用于IOT设备阴影的AWS Appsync Http解析器

Amazon web services 用于IOT设备阴影的AWS Appsync Http解析器,amazon-web-services,graphql,aws-iot,aws-appsync,Amazon Web Services,Graphql,Aws Iot,Aws Appsync,我试图(徒劳地)通过appsync Http解析程序获取设备阴影 { "version": "2018-05-29", "method": "GET", "resourcePath": "/things/${ctx.args.id}/shadow", "params":{ "headers": $utils.toJson($utils.http.copyHeaders($ctx.request.headers)) }

我试图(徒劳地)通过appsync Http解析程序获取设备阴影

  {
   "version": "2018-05-29",
   "method": "GET",
   "resourcePath": "/things/${ctx.args.id}/shadow",
    "params":{
        "headers": 
          $utils.toJson($utils.http.copyHeaders($ctx.request.headers))
    }
  }
所有im作为响应都是“凭证的作用域应为正确的服务” 我可以看到呼叫的授权标头包含 “凭证=-/-/eu-west-1/appsync/aws4\u请求”

当我在今天的应用程序中调用GET“deviceShadow”作为REST时(它可以工作),相同的值是 “凭证=-/-/eu-west-1/物联网数据/aws4\U请求”

因此,它似乎是appsync被设置为服务,这是混乱的通话?
有什么建议可以让它工作吗

我认为您需要向数据源添加角色和IAM签名配置。使用AWS CLI执行以下步骤

  • 将IAM角色附加到数据源,该数据源授予调用IoT设备阴影操作的适当权限。我认为这个例子是
    iot:GetThingShadow
  • 将IAM配置节添加到AWS AppSync数据源。这不是解析程序模板
  • {
    “端点”:“https://”,
    “授权配置”:{
    “授权类型”:“AWS_IAM”,
    “awsIamConfig”:{
    “签约地区”:“eu-west-1”,
    “signingServiceName”:“物联网”
    }
    }
    }
    

    当AWS AppSync调用您的解析器时,它将使用附加的角色生成SigV4签名,并调用AWS IoT设备影子服务。试试看。

    您的数据源配置是什么?类型是HTTP,资源是物联网设备的基本url。我认为这一切都是正确的,因为我使用同一个url成功地对影子上的get和post进行REST调用。看起来非常有希望。我目前正在控制台中执行所有设置(因为我只执行POC)。不知道如何添加到那里。但我会想办法的。我们发布了关于这一能力的官方文件:@Rohandeshande Hi Rohan,你能在这里帮忙吗?:
    {
        "endpoint": "https://<iot-endpoint>",
        "authorizationConfig": {
           "authorizationType": "AWS_IAM",
           "awsIamConfig": {
             "signingRegion": "eu-west-1",
             "signingServiceName": "iot"
           }
        }
    }