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

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

创建规则

您可以创建 Amazon IoT 规则来路由来自互联事物的数据,以便与其他 Amazon 服务进行交互。 Amazon IoT 规则由以下部分组成:

规则的组成部分
组件 描述 必需/可选
Rule name(规则名称)

规则的名称。请注意,我们不建议在您的规则名称中使用个人身份信息。

必需。
规则描述

规则的文字描述。请注意,我们不建议在您的规则描述中使用个人身份信息。

可选。
SQL 语句

一种简化的 SQL 语法,用于筛选接收的 MQTT 主题相关消息并向其它推送数据。有关更多信息,请参阅 Amazon IoT SQL 参考

必需。
SQL 版本

评估规则时使用的 SQL 规则引擎的版本。尽管该属性是可选的,但我们强烈建议您指定 SQL 版本。默认情况下, Amazon IoT Core 控制台将此属性设置2016-03-23为。如果未设置此属性,例如在 Amazon CLI 命令或 Amazon CloudFormation 模板中,2015-10-08则使用。有关更多信息,请参阅 SQL 版本

必需。
一个或多个操作 这些操作是在制定规则时 Amazon IoT 执行的。例如,您可以将数据插入 DynamoDB 表、将数据写入 Amazon S3 存储桶、发布至 Amazon SNS 主题或调用 Lambda 函数。 必需。
错误操作 该操作 Amazon IoT 在无法执行规则的操作时执行。 可选。

在创建 Amazon IoT 规则之前,您必须使用允许访问所需 Amazon 资源的策略创建 IAM 角色。 Amazon IoT 在实施规则时扮演这个角色。有关更多信息,请参阅授予 Amazon IoT 规则所需的访问权限和传递角色权限

当您创建规则时,请注意在主题上发布的数据量。如果您创建的规则包含通配符主题模式,则这些规则可能会与您的大部分消息匹配。在这种情况下,您可能需要增加目标操作使用的 Amazon 资源的容量。另外,如果您创建包含通配符主题模式的重新发布规则,最终可能获得一个造成无限循环的循环规则。

注意

创建和更新规则是管理员级操作。有权创建或更新规则的所有用户都能够访问规则处理的数据。

创建规则(控制台)

创建规则 (Amazon Web Services Management Console)

使用Amazon Web Services Management Console命令创建规则:

  1. 打开Amazon IoT 控制台

  2. 在左侧导航栏中,从 “管理” 部分选择 “消息路由”。然后选择 “规则”。

  3. 规则 页面,选择 创建规则

  4. 在 “指定规则属性” 页面上,输入规则的名称。规则描述标签是可选的。选择下一步

  5. 在 “配置 SQL 语句” 页上,选择 SQL 版本并输入 SQL 语句。SQL 语句的示例可以是SELECT temperature FROM 'iot/topic' WHERE temperature > 50。有关更多信息,请参阅 SQL 版本Amazon IoT SQL 参考

  6. 附加规则操作页面上,添加规则操作以将数据路由到其他 Amazon 服务。

    1. 规则操作中,从下拉列表中选择一个规则操作。例如,你可以选择 Kinesis Stre am。有关规则操作的更多信息,请参阅Amazon IoT 规则操作

    2. 根据您选择的规则操作,输入相关的配置详细信息。例如,如果您选择 Kinesis Stream,则需要选择或创建数据流资源,并可以选择输入配置详细信息,例如分区密钥,用于在 Steam 中按分片对数据进行分组。

    3. IAM 角色中,选择或创建角色以授予对终端节点的 Amazon IoT 访问权限。请注意,这 Amazon IoT 将在您选择的 IAM 角色aws-iot-rule下自动创建一个前缀为的策略。您可以选择 “查看”,从 IAM 控制台中查看您的 IAM 角色和策略。错误操作是可选的。您可以在错误处理(错误操作)中找到更多信息。有关为您的规则创建 IAM 角色的更多信息,请参阅授予规则所需的访问权限。选择下一步

  7. 在 “查看并创建” 页面上,查看所有配置并在需要时进行编辑。选择创建

成功创建规则后,您将在规则页面上看到该规则列出。您可以选择规则以打开 “详细信息” 页面,在该页面中可以查看规则、编辑规则、停用规则和删除规则。

创建规则 (CLI)

创建规则 (Amazon CLI)

使用 create-topic-rule 命令创建规则:

aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json

下面是一个负载文件示例,其中包含将发送至 iot/test 主题的所有消息插入指定 DynamoDB 表的规则。SQL 语句筛选消息,ARN 角色授予写入 DynamoDB 表的 Amazon IoT 权限。

{ "sql": "SELECT * FROM 'iot/test'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "dynamoDB": { "tableName": "my-dynamodb-table", "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "hashKeyField": "topic", "hashKeyValue": "${topic(2)}", "rangeKeyField": "timestamp", "rangeKeyValue": "${timestamp()}" } } ] }

下面是一个负载文件示例,其中包含将发送至 iot/test 主题的所有消息插入指定 S3 存储桶的规则。SQL 语句会筛选消息,而角色 ARN 则授予写入 Amazon S3 存储桶的 Amazon IoT 权限。

{ "awsIotSqlVersion": "2016-03-23", "sql": "SELECT * FROM 'iot/test'", "ruleDisabled": false, "actions": [ { "s3": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3", "bucketName": "my-bucket", "key": "myS3Key" } } ] }

以下是载荷文件示例,其中包含将数据推送到 Amazon S OpenSearch ervice 的规则:

{ "sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "OpenSearch": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_es", "endpoint": "https://my-endpoint", "index": "my-index", "type": "my-type", "id": "${newuuid()}" } } ] }

下面的负载文件示例包含调用 Lambda 函数的规则:

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "lambda": { "functionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function" } } ] }

下面的负载文件示例包含发布至 Amazon SNS 主题的规则:

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "sns": { "targetArn": "arn:aws:sns:us-west-2:123456789012:my-sns-topic", "roleArn": "arn:aws:iam::123456789012:role/my-iot-role" } } ] }

下面的负载文件示例包含在不同 MQTT 主题上重新发布的规则:

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "republish": { "topic": "my-mqtt-topic", "roleArn": "arn:aws:iam::123456789012:role/my-iot-role" } } ] }

以下是负载文件示例,其中包含将数据推送到 Amazon Data Firehose 流的规则:

{ "sql": "SELECT * FROM 'my-topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "firehose": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "deliveryStreamName": "my-stream-name" } } ] }

以下是负载文件示例,其中包含一条规则,如果 MQTT 负载中的数据被归类为 1,则使用 Amazon SageMaker machinelearning_predict 函数重新发布到主题。

{ "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "republish": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "topic": "my-mqtt-topic" } } ] }

下面是一个示例负载文件,该文件包含将消息发布到 Salesforce IoT Cloud 输入流的规则。

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "salesforce": { "token": "ABCDEFGHI123456789abcdefghi123456789", "url": "https://ingestion-cluster-id.my-env.sfdcnow.com/streams/stream-id/connection-id/my-event" } } ] }

下面是一个负载文件示例,其中包含一个可以开始执行 Step Functions 状态机的规则。

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "stepFunctions": { "stateMachineName": "myCoolStateMachine", "executionNamePrefix": "coolRunning", "roleArn": "arn:aws:iam::123456789012:role/my-iot-role" } } ] }