本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建规则
您可以创建 AWS IoT 规则来路由来自互联事物的数据,以便与其他 AWS 服务进行交互。 AWS IoT 规则由以下部分组成:
规则的组成部分 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
组件 | 描述 | 必需/可选 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Rule name(规则名称) |
规则的名称。请注意,我们不建议在您的规则名称中使用个人身份信息。 |
必需。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
规则描述 |
规则的文字描述。请注意,我们不建议在您的规则描述中使用个人身份信息。 |
可选。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL 语句 |
一种简化的 SQL 语法,用于筛选接收的 MQTT 主题相关消息并向其它推送数据。有关更多信息,请参阅 AWS IoT SQL 参考。 |
必需。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL 版本 |
评估规则时使用的 SQL 规则引擎的版本。尽管该属性是可选的,但我们强烈建议您指定 SQL 版本。默认情况下, AWS IoT Core 控制台将此属性设置 |
必需。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一个或多个操作 | 这些操作是在制定规则时 AWS IoT 执行的。例如,您可以将数据插入 DynamoDB 表、将数据写入 Amazon S3 存储桶、发布至 Amazon 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 Stre am。有关规则操作的更多信息,请参阅AWS IoT 规则操作。
-
根据您选择的规则操作,输入相关的配置详细信息。例如,如果您选择 Kinesis Stream,则需要选择或创建数据流资源,并可以选择输入配置详细信息,例如分区密钥,用于在 Steam 中按分片对数据进行分组。
-
在 IAM 角色中,选择或创建角色以授予对终端节点的 AWS IoT 访问权限。请注意,这 AWS IoT 将在您选择的 IAM 角色
aws-iot-rule
下自动创建一个前缀为的策略。您可以选择 View 从 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": "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" } } ] }