本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立規則
您可以建立 AWS IoT 規則來路由連線物件中的資料,以便與其他 AWS 服務互動。 AWS IoT 規則由下列元件組成:
規則的元件 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
元件 | 描述 | 必要或選擇性 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
規則名稱 |
規則的名稱。請注意,我們不建議您在規則名稱中使用可識別個人身份的資訊。 |
必要。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
規則說明 |
該項規則的文字說明。請注意,我們不建議您在規則說明中使用個人身份信息。 |
選用。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL 陳述式 |
簡化的 SQL 語法,用於篩選 MQTT 主題所收到的訊息,並將資料推送到他處。如需詳細資訊,請參閱 AWS IoT SQL 參考資料。 |
必要。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL 版本 |
評估規則時所用的 SQL 規則引擎版本。雖然此項屬性為選用,但強烈建議您指定 SQL 的版本。 AWS IoT Core 控制台默認情況下將此屬性 |
必要。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一個或多個動作 | 執行規則時 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
-
開啟 AWS IoT 主控台
。 -
在左側導航中,選擇消息路由低至管理部分。然後選擇「規則」。
-
在 [規則] 頁面上,選擇 [建立規則]。
-
在 [指定規則屬性] 頁面上,輸入規則的名稱。規則描述和標籤是可選的。選擇下一步。
-
在「設定 SQL 敘述句」頁面上,選擇 SQL 版本並輸入 SQL 敘述句。一個例子 SQL 語句可以是
SELECT temperature FROM 'iot/topic' WHERE temperature > 50
。如需詳細資訊,請參閱 SQL 版本和 AWS IoT SQL 參考資料。 -
在 [附加規則動作] 頁面上,新增規則動作以將資料路由至其他 AWS 服務。
-
在規則動作中,從下拉式清單中選取規則動作。例如,您可以選擇「Kinesis 串流」。如需有關規則動作的詳細資訊,請參閱AWS IoT 規則動作。
-
根據您選擇的規則動作,輸入相關的組態詳細資訊。例如,如果您選擇 Kinesis Stream,則需要選擇或建立資料串流資源,並選擇性地輸入設定詳細資料 (例如分割金鑰),該資料用於在蒸汽中依碎片分組資料。
-
在 IAM 角色中,選擇或建立角色以授與端點的 AWS IoT 存取權。請注意,系統 AWS IoT 會自動建立政策,其前置碼為選取的 IAM 角色
aws-iot-rule
下方。您可以選擇「檢視」,從 IAM 主控台檢視您的 IAM 角色和政策。錯誤動作是選擇性的。您可以在錯誤處理 (錯誤動作) 中找到更多資訊。如需為規則建立 IAM 角色的詳細資訊,請參閱授予規則所需的存取權。選擇下一步。
-
-
在 [檢閱並建立] 頁面上,檢閱所有組態,並視需要進行編輯。選擇建立。
成功建立規則後,您會看到「規則」頁面上列出的規則。您可以選取規則來開啟「詳細資訊」頁面,您可以在其中檢視規則、編輯規則、停用規則以及刪除規則。
建立規則 (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" } } ] }