建立 AWS IoT 規則 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 AWS IoT 規則

您可以建立 AWS IoT 規則,以從連線物件路由資料,以與其他 AWS 服務互動。 AWS IoT 規則包含下列元件:

規則的元件
元件 描述 必要或選用
規則名稱

規則的名稱。請注意,我們不建議您在規則名稱中使用個人識別資訊。

必要。
規則說明

該項規則的文字說明。請注意,我們不建議您在規則描述中使用個人身分資訊。

選用。
SQL 陳述式

簡化SQL語法,用於篩選MQTT主題上接收的訊息,並將資料推送到別處。如需詳細資訊,請參閱AWS IoT SQL 參考資料

必要。
SQL 版本

評估SQL規則時要使用的規則引擎版本。雖然此屬性是選用的,但我們強烈建議您指定SQL版本。根據2016-03-23預設, AWS IoT Core 主控台會將此屬性設定為 。如果未設定此屬性,例如在 AWS CLI 命令或 AWS CloudFormation 範本中。 2015-10-08如需詳細資訊,請參閱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命令來建立規則:

  1. 開啟 AWS IoT 主控台

  2. 在左側導覽中,從管理區段中選擇訊息路由。然後選擇規則

  3. 規則頁面上,選擇建立規則

  4. 指定規則屬性頁面上,輸入規則的名稱。規則描述標籤為選用。選擇 Next (下一步)

  5. 設定SQL陳述式頁面上,選擇SQL版本並輸入SQL陳述式。範例SQL陳述式可以是 SELECT temperature FROM 'iot/topic' WHERE temperature > 50。如需詳細資訊,請參閱SQL版本AWS IoT SQL參考

  6. 連接規則動作頁面上,新增規則動作以將資料路由至其他 AWS 服務。

    1. 規則動作 中,從下拉式清單中選取規則動作。例如,您可以選擇 Kinesis Stream 。如需規則動作的詳細資訊,請參閱AWS IoT 規則動作

    2. 根據您選擇的規則動作,輸入相關的組態詳細資訊。例如,如果您選擇 Kinesis Stream ,您將需要選擇或建立資料串流資源,並選擇性地輸入組態詳細資訊,例如分割區金鑰 ,用於在蒸汽中依碎片對資料進行分組。

    3. IAM角色 中,選擇或建立角色以授予對端點的 AWS IoT 存取權。請注意, AWS IoT 會自動建立政策,並在您選取的IAM角色aws-iot-rule下加上 的字首。您可以選擇檢視,從IAM主控台檢視您的IAM角色和政策。錯誤動作為選用。您可以在錯誤處理 (錯誤動作) 中找到詳細資訊。如需為規則建立IAM角色的詳細資訊,請參閱授予其所需的存取規則。選擇 Next (下一步)

  7. 檢閱和建立頁面上,檢閱所有組態並視需要進行編輯。選擇 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" } } ] }