创建 AWS IoT 规则 - AWS IoT Core

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

创建 AWS IoT 规则

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

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

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

必需。
规则描述

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

可选。
SQL statement

一种简化的SQL语法,用于筛选在某个MQTT主题上收到的消息并将数据推送到其他地方。有关更多信息,请参阅 AWS IoT SQL 参考

必需。
SQL 版本

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

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

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

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

注意

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

创建规则(控制台)

创建规则 (AWS Management Console)

使用 AWS Management Console 命令创建规则:

  1. 打开 AWS IoT 管理控制台

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

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

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

  5. 配置SQL语句页面上,选择一个SQL版本并输入对SQL账单。示例SQL语句可以是SELECT temperature FROM 'iot/topic' WHERE temperature > 50。有关更多信息,请参阅SQL版本AWS IoT SQL参考资料。

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

    1. 规则操作中,从下拉列表中选择规则操作。例如,您可以选择 Kinesis Stream。有关规则操作的更多信息,请参阅 AWS IoT 规则操作

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

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

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

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

创建规则 (CLI)

创建规则 (AWS CLI)

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

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

下面是一个负载文件示例,其中包含将发送至 iot/test 主题的所有消息插入指定 DynamoDB 表的规则。该SQL语句筛选消息,角色ARN授予写入 DynamoDB 表的 AWS 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 存储桶的 AWS IoT 权限。

{ "awsIotSqlVersion": "2016-03-23", "sql": "SELECT * FROM 'iot/test'", "ruleDisabled": false, "actions": [ { "s3": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3", "bucketName": "amzn-s3-demo-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,则使用 SageMaker Amazon AI 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" } } ] }