本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 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 授予 Amazon IoT 写入 DynamoDB 表的权限。
{ "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 IoT 写入 Amazon S3 存储桶的权限。
{ "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 Serv OpenSearch ice 的规则:
{ "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 stream 流的规则:
{ "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 SageMakermachinelearning_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" } }] }
下面是一个负载文件示例,其中包含一个可以开始执行 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" } }] }