用于 IOT 设备影子的 AWS Appsync Http 解析器

AWS Appsync Http resolver for IOT device shadow

我正在尝试(徒劳地)通过 appsync Http 解析器获取设备影子。

  {
   "version": "2018-05-29",
   "method": "GET",
   "resourcePath": "/things/${ctx.args.id}/shadow",
    "params":{
        "headers": 
          $utils.toJson($utils.http.copyHeaders($ctx.request.headers))
    }
  }

我设法得到的回复是 "Credential should be scoped to correct service" 我可以看到调用的授权 header 包含 "Credential = ---/---/eu-west-1/appsync/aws4_request"

当我今天在我的应用程序中将 GET "deviceShadow" 作为 REST 调用时(有效),相同的值是 "Credential = ---/---/eu-west-1/iotdata/aws4_request"

所以它看起来像 appsync 被设置为服务,这会弄乱调用吗? 任何提示如何让这个工作?

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

  1. 将 IAM 角色附加到数据源,以授予调用 IoT Device Shadow 操作的适当权限。我认为这个例子是 iot:GetThingShadow
  2. 将 IAM 配置部分添加到 AWS AppSync 数据源。这不是解析器模板。
{
    "endpoint": "https://<iot-endpoint>",
    "authorizationConfig": {
       "authorizationType": "AWS_IAM",
       "awsIamConfig": {
         "signingRegion": "eu-west-1",
         "signingServiceName": "iot"
       }
    }
}

当 AWS AppSync 调用您的解析器时,它将使用附加角色生成 SigV4 签名并调用 AWS IoT Device Shadow 服务。试试这个。