本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS 网关-物联网
所有类都处于积极开发之中,并且在任何未来版本中都会受到非向后兼容的更改或删除。这些不受语义版本控制
注意: 为确保正确的功能,您项目中的 AWS 解决方案构造软件包和 AWS CDK 包必须是相同的版本。
语言 | 程序包 |
---|---|
|
aws_solutions_constructs.aws_apigateway_iot
|
|
@aws-solutions-constructs/aws-apigateway-iot
|
|
software.amazon.awsconstructs.services.apigatewayiot
|
Overview
此 AWS 解决方案构造实现了连接到 AWS IoT 模式的 Amazon API Gateway REST API。
此构造可在 API Gateway 和 AWS IoT 之间创建可扩展的 HTTPS 代理。当希望允许不支持 MQTT 或 MQT/WebSocket 协议的旧式设备与 AWS IoT 平台进行交互时,这会很方便。
此实现允许在给定的 MQTT 主题上发布只写消息,并且还支持 HTTPS 设备的卷影更新以允许设备注册表中的内容。它不涉及用于代理消息的 Lambda 函数,而是依赖于直接 API Gateway 到 AWS IoT 集成,该网关支持 JSON 消息和二进制消息。
以下是 TypeScript 中的最小可部署模式定义:
import { ApiGatewayToIot } from '@aws-solutions-constructs/aws-apigateway-iot'; new ApiGatewayToIot(this, 'ApiGatewayToIotPattern', { iotEndpoint: 'a1234567890123-ats' });
Initializer
new ApiGatewayToIot(scope: Construct, id: string, props: ApiGatewayToIotProps);
参数
-
scope
Construct
-
id
string
-
propsApiGatewayToIotProps
模式构建道具
名称 | 类型 | 描述 |
---|---|---|
物联网点 |
string
|
用于集成 API Gateway 的 AWS IoT 终端节点子域(例如, |
养蜂网关创建密钥? |
boolean
|
如果设置为true 时,将创建 API 密钥并与 UsagePlan 相关联。用户在访问 RestApi 时应该指定 “X-api 键” 标头。默认值设置为false 。 |
网关执行角色? |
iam.Role
|
API Gateway 用于访问 AWS IoT 的 IAM 角色。如果未指定,则会创建一个默认角色,并使用通配符 ('*') 访问所有主题和内容。 |
养蜂网关道具? |
api.restApiProps
|
用户提供的可选道具,用于覆盖 API Gateway REST API 的默认道具。 |
日志组道具? |
logs.LogGroupProps
|
可选的用户提供的道具,用于覆盖 CloudWatch Logs 日志组的默认道具。 |
模式属性
名称 | 类型 | 描述 |
---|---|---|
APIGateway |
api.RestApi
|
返回由模式创建的 API Gateway REST API 的实例。 |
网关云监视角色 |
iam.Role
|
返回由模式创建的 IAM 角色的实例,该模式允许从 API Gateway REST API 访问日志记录到 CloudWatch。 |
网关日志组 |
logs.LogGroup
|
返回由 API Gateway REST API 访问日志发送到的模式创建的日志组的实例。 |
养蜂网关角色 |
iam.Role
|
返回由 API Gateway REST API 模式创建的 IAM 角色的实例。 |
默认设置
没有任何覆盖的此模式的开箱即用实现将设置以下默认值:
Amazon API Gateway
-
部署边缘优化的 API 终端
-
创建 API 资源
POST
将消息发布到 IoT 主题的方法 -
创建 API 资源
POST
将消息发布到的方法ThingShadow
和NamedShadows
-
为 API Gateway 启用 CloudWatch 日志
-
为 API Gateway 配置 IAM 角色,可访问所有主题和内容
-
将所有 API 方法的默认授权类型设置为 IAM
-
启用 X-Ray 跟踪
-
创建 UsagePlan 并将
prod
stage
以下是 API Gateway 在部署构造后公开的不同资源和方法的说明。请参阅示例部分,获取有关如何使用轻松测试这些终端的更多信息curl
。
方法 | 资源 | 查询参数 | 返回代码 | 描述 |
---|---|---|---|---|
POST
|
/message/<topics>
|
qos
|
200/403/500
|
通过调用此终端节点,您需要传递要发布的主题(例如/message/device/foo `)。 |
POST
|
/shadow/<thingName>
|
无 |
200/403/500
|
这条路由允许更新一个事物的影子文档,因为它thingName 使用未命名的(经典)影子类型。身体必须符合标准的影子结构,包括state 节点和关联desired 和reported 节点。请参阅更新设备影子节中的示例。 |
POST
|
/shadow/<thingName>/<shadowName>
|
无 |
200/403/500
|
这条路由允许更新某个事物的命名影子文档,因为它thingName 和shadowName 使用命名阴影类型。身体必须符合标准的影子结构,包括state 节点和关联desired 和reported 节点。请参阅更新命名的影子节中的示例。 |
Architecture
Examples
以下示例仅适用于API_KEY
身份验证类型,因为 IAM 授权也需要指定一个 sigv4 令牌,所以请确保apiGatewayCreateApiKey
属性设置为true
,否则下面的示例将无法正常工作。
发布消息
您可以使用curl
使用 HTTPS API 发布有关不同 MQTT 主题的消息。下面的示例将在device/foo
主题。
curl -XPOST https://<stage-id>.execute-api.<region>.amazonaws.com/prod/message/device/foo -H "x-api-key: <api-key>" -H "Content-Type: application/json" -d '{"Hello": "World"}'
注意:将替换为stage-id
、region
, 和api-key
参数与您的部署值一起使用。
您可以在 URL 中链接主题名称,API 接受最多 7 个可以发布的子主题。例如,以下示例将在主题上发布消息device/foo/bar/abc/xyz
。
curl -XPOST https://<stage-id>.execute-api.<region>.amazonaws.com/prod/message/device/foo/bar/abc/xyz -H "x-api-key: <api-key>" -H "Content-Type: application/json" -d '{"Hello": "World"}'
更新设备影子
要更新与给定事物关联的影子文档,您可以使用事物名称发出影子状态请求。有关如何更新事物影子的以下示例。
curl -XPOST https://<stage-id>.execute-api.<region>.amazonaws.com/prod/shadow/device1 -H "x-api-key: <api-key>" -H "Content-Type: application/json" -d '{"state": {"desired": { "Hello": "World" }}}'
更新命名的影子
要更新与给定事物的命名影子关联的影子文档,您可以使用事物名称和影子名称发出影子状态请求。请参阅以下示例,了解如何更新命名阴影。
curl -XPOST https://<stage-id>.execute-api.<region>.amazonaws.com/prod/shadow/device1/shadow1 -H "x-api-key: <api-key>" -H "Content-Type: application/json" -d '{"state": {"desired": { "Hello": "World" }}}'
发送二进制负载
可以将二进制负载发送到代理 API,直至 AWS IoT 服务。在以下示例中,我们将向发送README.md
文件(被视为二进制数据)到device/foo
主题使用application/octet-stream
内容类型。
curl -XPOST https://<stage-id>.execute-api.<region>.amazonaws.com/prod/message/device/foo/bar/baz/qux -H "x-api-key: <api-key>" -H "Content-Type: application/octet-stream" --data-binary @README.md
注意:在此项目的目录中执行此命令。然后,您可以测试从文件系统发送其他类型的二进制文件。
GitHub
要查看此模式的代码、创建/查看问题和拉取请求等,请执行以下操作: | |
---|---|
|
@aws-解决方案结构/AWS-网关-物联网 |