本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 AWS IoT 规则
您可以创建 AWS IoT 规则来路由来自互联事物的数据,以便与其他 AWS 服务进行交互。 AWS IoT 规则由以下部分组成:
组件 | 描述 | 必需/可选 |
---|---|---|
Rule name(规则名称) |
规则的名称。注意,我们建议不要在您的规则名称中使用个人身份信息。 |
必需。 |
规则描述 |
规则的文字描述。注意,我们建议不要在您的规则描述中使用个人身份信息。 |
可选。 |
SQL statement |
一种简化的SQL语法,用于筛选在某个MQTT主题上收到的消息并将数据推送到其他地方。有关更多信息,请参阅 AWS IoT SQL 参考。 |
必需。 |
SQL 版本 |
评估SQL规则时使用的规则引擎版本。尽管此属性是可选的,但我们强烈建议您指定SQL版本。默认情况下, AWS IoT Core 控制台将此属性设置 |
必需。 |
一个或多个操作 | 这些操作是在制定规则时 AWS IoT 执行的。例如,您可以将数据插入到 DynamoDB 表、将数据写入 Amazon S3 存储桶、发布到SNS亚马逊主题或调用 Lambda 函数。 | 必需。 |
错误操作 | 该操作 AWS IoT 在无法执行规则的操作时执行。 | 可选。 |
在创建 AWS IoT 规则之前,必须使用允许访问所需 AWS 资源的策略创建一个IAM角色。 AWS IoT 在实施规则时扮演这个角色。有关更多信息,请参阅授予 AWS IoT 规则所需的访问权限和传递角色权限。
当您创建规则时,请注意在主题上发布的数据量。如果您创建的规则包含通配符主题模式,则这些规则可能会与您的大部分消息匹配。在这种情况下,您可能需要增加目标操作使用的 AWS 资源的容量。另外,如果您创建包含通配符主题模式的重新发布规则,最终可能获得一个造成无限循环的循环规则。
注意
创建和更新规则是管理员级操作。有权创建或更新规则的所有用户都能够访问规则处理的数据。
创建规则(控制台)
创建规则 (AWS Management Console)
使用 AWS Management Console
-
打开 AWS IoT 管理控制台
。 -
在左侧导航栏中,从管理部分选择消息路由。然后选择规则。
-
在 规则 页面,选择 创建规则。
-
在指定规则属性页面上,输入规则的名称。规则描述和标签为可选。选择下一步。
-
在配置SQL语句页面上,选择一个SQL版本并输入对SQL账单。示例SQL语句可以是
SELECT temperature FROM 'iot/topic' WHERE temperature > 50
。有关更多信息,请参阅SQL版本和AWS IoT SQL参考资料。 -
在附加规则操作页面上,添加规则操作以将数据路由到其他 AWS 服务。
-
在规则操作中,从下拉列表中选择规则操作。例如,您可以选择 Kinesis Stream。有关规则操作的更多信息,请参阅 AWS IoT 规则操作。
-
根据您选择的规则操作,输入相关的配置详细信息。例如,如果您选择 Kinesis Stream,则需要选择或创建数据流资源,并选择性输入配置详细信息,例如用于在数据流中按分片对数据进行分组的分区键。
-
在IAM角色中,选择或创建角色以授予对终端节点的 AWS IoT 访问权限。请注意,这 AWS IoT 将在您选择的IAM角色
aws-iot-rule
下自动创建一个前缀为的策略。您可以选择 Vie w 从IAM控制台查看您的IAM角色和策略。错误操作是可选的。您可以在错误处理(错误操作)中找到更多信息。有关为规则创建IAM角色的更多信息,请参阅授予规则所需的访问权限。选择下一步。
-
-
在查看并创建页面上,查看所有配置并根据需要进行编辑。选择创建。
成功创建规则后,您将在规则页面上看到列出该规则。您可以选择一个规则来打开详细信息页面,在该页面中可以查看规则、编辑规则、停用规则以及删除规则。
创建规则 (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" } } ] }