【问题标题】:AWS Appsync Http resolver for IOT device shadow用于 IOT 设备影子的 AWS Appsync Http 解析器
【发布时间】:2019-08-11 04:25:12
【问题描述】:

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

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

我设法得到的所有回应都是“凭据的范围应适用于正确的服务” 我可以看到调用的 Authorization 标头包含 “凭据 = ---/---/eu-west-1/appsync/aws4_request”

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

所以看起来 appsync 被设置为服务,这会扰乱通话? 任何提示如何使它工作?

【问题讨论】:

  • 你的数据源配置是什么?
  • 类型是 HTTP 并且资源是物联网设备的基本 url。我认为这一切都是正确的,因为我使用相同的 url 成功 REST 调用 get 和 post on the shadow。

标签: amazon-web-services graphql aws-iot aws-appsync


【解决方案1】:

我认为您需要将角色和 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 服务。试试这个。

【讨论】:

猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2019-02-04
  • 2018-11-15
  • 2021-05-02
相关资源
最近更新 更多