使用主题规则目标 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用主题规则目标

目标是定义规则引擎路由数据的位置的资源。Amazon IoT 规则引擎支持两种目标:HTTP 目标和 VPC 目标。目标使规则引擎能够将数据发送到未与 Amazon IoT 本地集成的其他服务。目标可以跨规则重复使用。

HTTP 目标可能需要进行确认或配置,然后才能使用。以下段落介绍了 HTTP 目标的确认流程工作原理。

主题规则目标用于验证您拥有或有权访问要将数据路由到的终端节点。当您创建带有端点的规则操作(例如,http 操作)或更新现有规则操作的端点时,Amazon IoT 发送确认消息到包含唯一令牌的端点。要验证终端节点,您必须使用令牌调用 ConfirmTopicRuleDestination,验证您拥有或有权访问该终端节点。令牌有效期为三天,之后您需要创建新的 http 操作或调用 UpdateTopicRuleDestination API 以重新启动确认过程。您还可以通过浏览 enableUrl 或从 Destination(目标)页面中的 Amazon IoT 控制台提供令牌以确认主题规则目标。

当 Amazon IoT 收到发送到您端点的令牌时,将确认 HTTP 目标。您必须先启用目标,然后规则引擎才能使用它。目标可以处于以下状态之一:

ENABLED

目标已启用。目标必须处于 ENABLED 状态才能在规则中使用。您只能启用处于 DISABLED 状态的目标。

DISABLED

目标已确认,但已禁用。如果您希望暂时阻止流入终端节点的流量而无需再次完成确认流程,则此功能非常有用。您只能禁用处于 ENABLED 状态的目标。

IN_PROGRESS

正在确认目标。

ERROR (错误)

目标确认超时。

确认并启用目标之后,您账户中的任意规则可以使用目标。

创建 HTTP 主题规则目标

在您使用 Amazon IoT 通过 http 操作创建规则时将创建目标。您还可以使用 CreateTopicRuleDestination API 或 Amazon IoT 控制台创建目标。

在您创建目标时,Amazon IoT 验证终端节点 URL 是否有效。如果 URL 有效,则会向该 URL 发送一条确认消息。确认请求的格式如下:

HTTP POST {confirmationUrl}/?confirmationToken={confirmationToken} Headers: x-amz-rules-engine-message-type: DestinationConfirmation x-amz-rules-engine-destination-arn:"arn:aws:iot:us-east-1:123456789012:ruledestination/http/7a280e37-b9c6-47a2-a751-0703693f46e4" Content-Type: application/json Body: { "arn":"arn:aws:iot:us-east-1:123456789012:ruledestination/http/7a280e37-b9c6-47a2-a751-0703693f46e4", "confirmationToken": "AYADeMXLrPrNY2wqJAKsFNn-…NBJndA", "enableUrl": "https://iot.us-east-1.amazonaws.com/confirmdestination/AYADeMXLrPrNY2wqJAKsFNn-…NBJndA", "messageType": "DestinationConfirmation" }

此消息的字段定义如下:

arn

要确认的主题规则目标的 Amazon Resource Name (ARN)。

confirmationToken

确认令牌。示例中是已截断的令牌。您的令牌会更长。

enableUrl

您需要浏览以确认主题规则目标的 URL。

messageType

消息类型。

创建 VPC 主题规则目标

使用 CreateTopicRuleDestination API 或 Amazon IoT Core 控制台,创建 Virtual Private Cloud (VPC) 目标。

注意

连续 30 天内未接收任何流量的 VPC 主题规则目标将被禁用。

当您创建 VPC 目标时,必须指定以下信息。

vpcId

VPC 目标的唯一 ID。

subnetIds

规则引擎在其中创建弹性网络接口的子网列表。规则引擎为列表中的每个子网分配一个网络接口。

securityGroups(可选)

要应用到网络接口的安全组列表。

roleArn

有权代表您创建网络接口的角色的 ARN。

此 ARN 应附加一个类似于以下示例的策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcAttribute" ], "Resource": "*" } ] }

使用 Amazon CLI 创建 VPC 目标

以下示例显示如何使用 Amazon CLI 创建 VPC 目标。

aws --region regions iot create-topic-rule-destination --destination-configuration 'vpcConfiguration={subnetIds=["subnet-123456789101230456"],securityGroups=[],vpcId="vpc-123456789101230456",roleArn="arn:aws:iam::123456789012:role/role-name"}'

运行此命令后,VPC 目标状态将为 IN PROGRESS。几分钟后,其状态将更改为 ERROR(如果命令不成功)或 ENABLED。当目标状态为 ENABLED 时,目标即可使用。

您可以使用以下命令获取 VPC 目标的状态。

aws --region region iot get-topic-rule-destination --arn "VPCDestinationARN"

使用 Amazon IoT Core 创建 VPC 目标控制台

以下步骤介绍如何使用 Amazon IoT Core 控制台创建 VPC 目标。

  1. 导航到 Amazon IoT Core 控制台。在左侧的窗格中,Act(操作)下,选择 Destination(目标)。

  2. 输入以下字段的值。

    • VPC ID

    • 子网 ID

    • 安全组

  3. 选择具有创建 ENI 所需权限的角色。前面的示例角色包含这些权限。

当 VPC 目标状态为 ENABLED(已启用)时,目标即可使用。

确认 HTTP 主题规则目标

您可以通过向确认消息中包含的 enableUrl 发出 HTTP GET 请求来确认目标。您可以使用确认消息中的令牌调用 ConfirmTopicRuleDestination,也可以使用 Amazon IoT 控制台。

要将目标置于 ENABLED 状态,令牌必须有效。如果令牌已过期,则您必须调用 UpdateTopicRuleDestination 以重新启动确认过程。

注意

如果您通过调用 ConfirmTopicRuleDestination 确认主题规则目标,则目标状态将为 DISABLED,您需要在使用之前通过调用 UpdateTopicRuleDestination 来明确启用目标。

禁用主题规则目标

要禁用目标,请调用 UpdateTopicRuleDestination 并将主题规则目标的状态设置为 DISABLED

启用主题规则目标

要启用目标,请调用 UpdateTopicRuleDestination 并将主题规则的状态设置为 ENABLED。您无需重新验证 URL。

发送新确认消息

要为目标触发新确认消息,请调用 UpdateTopicRuleDestination 并将主题规则目标的状态设置为 IN_PROGRESS

删除主题规则目标

要删除主题规则目标,请调用 DeleteTopicRuleDestination