用于 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 执行以下步骤。
- 将 IAM 角色附加到数据源,以授予调用 IoT Device Shadow 操作的适当权限。我认为这个例子是
iot:GetThingShadow
。
- 将 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 服务。试试这个。
我正在尝试(徒劳地)通过 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 执行以下步骤。
- 将 IAM 角色附加到数据源,以授予调用 IoT Device Shadow 操作的适当权限。我认为这个例子是
iot:GetThingShadow
。 - 将 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 服务。试试这个。