AWS IoT
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

创建 AWS IoT 规则

您可以配置规则以从连接的设备路由数据。规则包括以下部分:

规则名称

规则的名称。

可选说明

规则的文字说明。

SQL 语句

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

SQL 版本

评估规则时使用的 SQL 规则引擎的版本。尽管该属性是可选的,但我们强烈建议您指定 SQL 版本。如果未设置该属性,将使用默认值 2015-10-08

一个或多个操作

执行规则时 AWS IoT 执行的操作。例如,您可以将数据插入 DynamoDB 表、将数据写入 Amazon S3 存储桶、发布至 Amazon SNS 主题或调用 Lambda 函数。

错误操作

AWS IoT 在无法执行规则的操作时执行的操作。

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

注意

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

创建规则 (AWS CLI)

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

aws iot create-topic-rule --rule-name my-rule --topic-rule-payload file://my-rule.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 ES 的规则:

{ "sql":"SELECT *, timestamp() as timestamp FROM 'iot/test'", "ruleDisabled":false, "awsIotSqlVersion": "2016-03-23", "actions":[ { "elasticsearch":{ "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 Kinesis 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" } }] }

在下面的负载文件示例中,具有采用 Amazon Machine Learning machinelearning_predict 函数重新发布至某个主题 (如果 MQTT 负载中的数据分类为 1) 的规则。

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