AWS 网关-物联网 - AWS 解决方案构造

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 网关-物联网

Two labels: "STABILITY" in gray and "EXPERIMENTAL" in orange.

所有类都处于积极开发之中,并且在任何未来版本中都会受到非向后兼容的更改或删除。这些不受语义版本控制模型。这意味着,虽然您可以使用它们,但在升级到此软件包的较新版本时,您可能需要更新源代码。

注意: 为确保正确的功能,您项目中的 AWS 解决方案构造软件包和 AWS CDK 包必须是相同的版本。

语言 程序包
Python
aws_solutions_constructs.aws_apigateway_iot
TypeScript
@aws-solutions-constructs/aws-apigateway-iot
Java
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);

参数

模式构建道具

名称 类型 描述
物联网点 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将消息发布到的方法ThingShadowNamedShadows

  • 为 API Gateway 启用 CloudWatch 日志

  • 为 API Gateway 配置 IAM 角色,可访问所有主题和内容

  • 将所有 API 方法的默认授权类型设置为 IAM

  • 启用 X-Ray 跟踪

  • 创建 UsagePlan 并将prodstage

以下是 API Gateway 在部署构造后公开的不同资源和方法的说明。请参阅示例部分,获取有关如何使用轻松测试这些终端的更多信息curl

方法 资源 查询参数 返回代码 描述
POST /message/<topics> qos 200/403/500 通过调用此终端节点,您需要传递要发布的主题(例如/message/device/foo`)。
POST /shadow/<thingName> 200/403/500 这条路由允许更新一个事物的影子文档,因为它thingName使用未命名的(经典)影子类型。身体必须符合标准的影子结构,包括state节点和关联desiredreported节点。请参阅更新设备影子节中的示例。
POST /shadow/<thingName>/<shadowName> 200/403/500 这条路由允许更新某个事物的命名影子文档,因为它thingNameshadowName使用命名阴影类型。身体必须符合标准的影子结构,包括state节点和关联desiredreported节点。请参阅更新命名的影子节中的示例。

Architecture

IoT architecture diagram showing device, API Gateway, IoT Core, and related components.

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-idregion, 和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

要查看此模式的代码、创建/查看问题和拉取请求等,请执行以下操作:
Circular icon with a graduation cap symbol representing education or learning.
@aws-解决方案结构/AWS-网关-物联网