本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 AWS IoT 規則
您可以建立 AWS IoT 規則,以從連線物件路由資料,以與其他 AWS 服務互動。 AWS IoT 規則包含下列元件:
元件 | 描述 | 必要或選用 |
---|---|---|
規則名稱 |
規則的名稱。請注意,我們不建議您在規則名稱中使用個人識別資訊。 |
必要。 |
規則說明 |
該項規則的文字說明。請注意,我們不建議您在規則描述中使用個人身分資訊。 |
選用。 |
SQL 陳述式 |
簡化SQL語法,用於篩選MQTT主題上接收的訊息,並將資料推送到別處。如需詳細資訊,請參閱AWS IoT SQL 參考資料。 |
必要。 |
SQL 版本 |
評估SQL規則時要使用的規則引擎版本。雖然此屬性是選用的,但我們強烈建議您指定SQL版本。根據 |
必要。 |
一個或多個動作 | 執行規則時,動作會 AWS IoT 執行。例如,您可以將資料插入 DynamoDB 資料表、將資料寫入 Amazon S3 儲存貯體、發佈至 Amazon SNS主題,或叫用 Lambda 函數。 | 必要。 |
錯誤動作 | 動作 AWS IoT 會在無法執行規則動作時執行。 | 選用。 |
建立 AWS IoT 規則之前,您必須使用允許存取所需 AWS resources 的政策來建立IAM角色。在實作規則時 AWS IoT , 會擔任此角色。如需詳細資訊,請參閱授予 AWS IoT 規則所需的存取權和傳遞角色許可。
建立規則時,請注意在主題上發佈的資料量。如果您建立了包含萬用字元主題模式的規則,這些規則可能會比對大部分的訊息。若是這種情況,您可能需要增加目標動作使用的 AWS 資源容量。此外,如果您建立了重新發佈規則,而其中包含萬用字元主題模式,最後可能會造成循環規則,導致無限迴圈。
注意
規則的建立和更新是屬於管理員層級的動作。任何擁有許可而能建立或更新規則的使用者,均能夠存取規則所處理的資料。
建立規則 (主控台)
建立規則 (AWS Management Console)
使用 AWS Management Console
-
開啟 AWS IoT 主控台
。 -
在左側導覽中,從管理區段中選擇訊息路由。然後選擇規則 。
-
在規則頁面上,選擇建立規則 。
-
在指定規則屬性頁面上,輸入規則的名稱。規則描述和標籤為選用。選擇 Next (下一步)。
-
在設定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
下加上 的字首。您可以選擇檢視,從IAM主控台檢視您的IAM角色和政策。錯誤動作為選用。您可以在錯誤處理 (錯誤動作) 中找到詳細資訊。如需為規則建立IAM角色的詳細資訊,請參閱授予其所需的存取規則。選擇 Next (下一步)。
-
-
在檢閱和建立頁面上,檢閱所有組態並視需要進行編輯。選擇 Create (建立)。
成功建立規則後,您會在規則頁面上看到列出的規則。您可以選擇規則以開啟詳細資訊頁面,您可以在其中檢視規則、編輯規則、停用規則,以及刪除規則。
建立規則 (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 OpenSearch Service 的規則:
{ "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" } } ] }
以下是範例承載檔案,其中包含使用 Amazon SageMaker 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 雲端輸入串流:
{ "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" } } ] }