建立規則 - AWS IoT Core

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

建立規則

您可以建立 AWS IoT 規則來路由連線物件中的資料,以便與其他 AWS 服務互動。 AWS IoT 規則由下列元件組成:

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

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

必要。
規則說明

該項規則的文字說明。請注意,我們不建議您在規則說明中使用個人身份信息。

選用。
SQL 陳述式

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

必要。
SQL 版本

評估規則時所用的 SQL 規則引擎版本。雖然此項屬性為選用,但強烈建議您指定 SQL 的版本。 AWS IoT Core 控制台默認情況下將此屬性2016-03-23設置為。如果未設定此性質 (例如在 AWS CLI 指令或樣 AWS CloudFormation 板中),則會使用2015-10-08此性質。如需詳細資訊,請參閱 SQL 版本

必要。
一個或多個動作 執行規則時 AWS IoT 會執行動作。例如,您可將資料插入 DynamoDB 表格,將資料寫入 Amazon S3 儲存貯體,發佈至 Amazon SNS 主題,或呼叫 Lambda 函數。 必要。
錯誤動作 當動作無法 AWS IoT 執行規則的動作時執行。 選用。

在建立 AWS IoT 規則之前,您必須建立具有允許存取所需 AWS 資源的政策的 IAM 角色。 AWS IoT 在實作規則時會擔任此角色。如需詳細資訊,請參閱授與 AWS IoT 規則所需的存取權和傳遞角色權限

建立規則時,請注意在主題上發佈的資料量。如果您建立了包含萬用字元主題模式的規則,這些規則可能會比對大部分的訊息。若是這種情況,您可能需要增加目標動作使用的 AWS 資源容量。此外,如果您建立了重新發佈規則,而其中包含萬用字元主題模式,最後可能會造成循環規則,導致無限迴圈。

注意

規則的建立和更新是屬於管理員層級的動作。任何擁有許可而能建立或更新規則的使用者,均能夠存取規則所處理的資料。

建立規則 (主控台)

建立規則 (AWS Management Console)

使用AWS Management Console指令建立規則:

  1. 開啟 AWS IoT 主控台

  2. 在左側導航中,選擇消息路由低至管理部分。然後選擇「規則」。

  3. 在 [規則] 頁面上,選擇 [建立規則]。

  4. 在 [指定規則屬性] 頁面上,輸入規則的名稱。規則描述標籤是可選的。選擇下一步

  5. 在「設定 SQL 敘述句」頁面上,選擇 SQL 版本並輸入 SQL 敘述句。一個例子 SQL 語句可以是SELECT temperature FROM 'iot/topic' WHERE temperature > 50。如需詳細資訊,請參閱 SQL 版本AWS IoT SQL 參考資料。

  6. 在 [附加規則動作] 頁面上,新增規則動作以將資料路由至其他 AWS 服務。

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

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

    3. IAM 角色中,選擇或建立角色以授與端點的 AWS IoT 存取權。請注意,系統 AWS IoT 會自動建立政策,其前置碼為選取的 IAM 角色aws-iot-rule下方。您可以選擇「視」,從 IAM 主控台檢視您的 IAM 角色和政策。錯誤動作是選擇性的。您可以在錯誤處理 (錯誤動作) 中找到更多資訊。如需為規則建立 IAM 角色的詳細資訊,請參閱授予規則所需的存取權。選擇下一步

  7. 在 [檢閱並建立] 頁面上,檢閱所有組態,並視需要進行編輯。選擇建立

成功建立規則後,您會看到「規則」頁面上列出的規則。您可以選取規則來開啟「詳細資訊」頁面,您可以在其中檢視規則、編輯規則、停用規則以及刪除規則。

建立規則 (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": "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 資料 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 雲端輸入串流:

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