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

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

创建 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 资源的容量。另外,如果您创建包含通配符主题模式的重新发布规则,最终可能获得一个造成无限循环的循环规则。

注意

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

创建规则 (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 OpenSearch 服务的规则:

{ "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" } }] }