Решатель AWS Appsync Http для тени IOT-устройств - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь (напрасно) получить тень устройства через 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 =--- / --- / eu-west-1 / appsync / aws4_request "

Когда я вызываю GET" deviceShadow ", это как REST в моем приложении сегодня (которое работает) одинаковыми значениями являются "Credential = --- / --- / eu-west-1 / iotdata / aws4_request"

Таким образом, он выглядит как appsyncбыть установленным в качестве службы, и это портит вызов?Любые советы, как заставить это работать?

1 Ответ

2 голосов
/ 22 марта 2019

Я думаю, что вам нужно добавить роль и конфигурацию подписи IAM в источник данных. Выполните следующие шаги с помощью интерфейса командной строки AWS.

  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. Попробуйте это.

...