AWS IoT 規則動作 - AWS IoT

AWS IoT 規則動作

AWS IoT 規則動作用於指定在觸發規則時要採取的動作。您可以定義動作,將資料寫入 DynamoDB 資料庫或 Kinesis 串流,或叫用 Lambda 函數等等。AWS 支援服務可用之區域中的動作。支援以下動作:

  • cloudwatchAlarm 變更 CloudWatch 警示。

  • cloudwatchLogs 傳送資料到 CloudWatch Logs

  • cloudwatchMetric 擷取 CloudWatch 指標。

  • dynamoDB 將資料寫入 DynamoDB 資料庫。

  • dynamoDBv2 將資料寫入 DynamoDB 資料庫。

  • elasticsearch 將資料寫入 Amazon Elasticsearch Service 網域。

  • firehose 將資料寫入 Amazon Kinesis Data Firehose 串流。

  • http 將資料發佈至 HTTPS 端點。

  • iotAnalytics 以傳送資料至 AWS IoT 分析管道。

  • iotEvents 以傳送資料至 AWS IoT Events 輸入。

  • iotSiteWise 以傳送資料至 AWS IoT SiteWise 中的資產屬性。

  • kinesis 將資料寫入 Kinesis 串流。

  • lambda 叫用 Lambda 函式。

  • republish可在另一個 MQTT 主題上重新發佈訊息。

  • s3 將資料寫入 Amazon S3 儲存貯體。

  • salesforce可將訊息寫入至 Salesforce IoT 輸入流。

  • sns可將資料寫入為推送通知。

  • sqs可將資料寫入 SQS 佇列。

  • stepFunctions 開始執行 Step Functions 狀態機器。

注意

為防止間歇性錯誤發生,AWS IoT 規則引擎可能會多次試圖執行動作。如果所有嘗試都失敗了,則該訊息將被忽略,而錯誤將顯示在您的 CloudWatch 記錄中。您可以為失敗發生之後叫用的每一個規則指定一個錯誤動作。如需詳細資訊,請參閱 錯誤處理 (錯誤動作)

某些規則動作會觸發與 AWS Key Management Service (AWS KMS) 整合的服務中的動作,以支援靜態資料加密。如果您使用客戶管理的 AWS KMS 客戶主金鑰 (CMK) 來加密靜態資料,則服務必須具有代表發起人使用 CMK 的許可。請參閱適當的服務指南中的資料加密主題,以了解如何管理客戶管理 CMK 的許可。如需 CMK 和客戶管理 CMK 的詳細資訊,請參閱 AWS Key Management Service Developer Guide中的 AWS Key Management Service 概念

每一個動作都有詳細說明。

CloudWatch 警示動作

CloudWatch alarm action

CloudWatch 警示動作允許您變更 CloudWatch 警示狀態。您可以指定此呼叫狀態變更的原因和值。

More information (1)

在建立含有 AWS IoT 警示動作的 CloudWatch 規則時,請務必指定下列資訊:

roleArn

IAM 角色,允許存取 CloudWatch 警示。

alarmName

CloudWatch 警示名稱。

stateReason

警示變更的原因。

stateValue

警示狀態的值。可接受的值為 OKALARMINSUFFICIENT_DATA

注意

請務必確認與該規則相連的角色擁有授與 cloudwatch:SetAlarmState許可的政策。

下列 JSON 範例顯示如何定義 CloudWatch 規則內的 AWS IoT 警示動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "cloudwatchAlarm": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw", "alarmName": "IotAlarm", "stateReason": "Temperature stabilized.", "stateValue": "OK" } }] } }

如需詳細資訊,請參閱 CloudWatch 警示

CloudWatch Logs 動作

CloudWatch Logs action

CloudWatch 日誌動作可讓您將資料傳送至 CloudWatch Logs。您可以指定動作傳送資料的 CloudWatch 日誌群組。

More information (2)

當您建立含有 AWS IoT 日誌動作的 CloudWatch 規則時,請務必指定下列資訊:

roleArn

IAM 角色,允許存取 CloudWatch 日誌。

logGroupName

動作傳送資料的 CloudWatch 日誌群組。

下列 JSON 範例顯示了如何定義 CloudWatch 規則內的 AWS IoT 日誌動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "cloudwatchLogs": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw", "logGroupName": "IotLogs" } }] } }

如需詳細資訊,請參閱 CloudWatch Logs 入門。如果您使用客戶管理的 AWS KMS CMK 來加密 CloudWatch Logs 中的日誌資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon CloudWatch Logs 使用者指南中的使用 AWS KMS 在 CloudWatch Logs 中加密日誌資料

CloudWatch 指標動作

CloudWatch metric action

CloudWatch 指標動作可擷取 CloudWatch 指標。您可以指定指標命名空間、名稱、值、單位、時間戳記。

More information (3)

在建立含有 AWS IoT 指標動作的 CloudWatch 規則時,請務必指定下列資訊:

roleArn

IAM 角色,允許存取 CloudWatch 指標。

metricNamespace

CloudWatch 指標命名空間名稱。

metricName

CloudWatch 指標名稱。

metricValue

CloudWatch 指標值。

metricUnit

CloudWatch 支援的指標單位。

metricTimestamp

Unix 時間戳記 (選用)。

注意

請務必確認關聯至規則的角色擁有授予 cloudwatch:PutMetricData 權限的政策。

下列 JSON 範例顯示如何定義 CloudWatch 規則內的 AWS IoT 指標動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "cloudwatchMetric": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw", "metricNamespace": "IotNamespace", "metricName": "IotMetric", "metricValue": "1", "metricUnit": "Count", "metricTimestamp": "1456821314" } }] } }

如需詳細資訊,請參閱 CloudWatch 指標

DynamoDB 動作

DynamoDB action

dynamoDB 動作可將全部或部分的 MQTT 訊息寫入至 DynamoDB 表格。

More information (4)

建立 DynamoDB 規則時,請務必指定以下資訊:

hashKeyType

選用。雜湊索引鍵 (也稱為分割區索引鍵) 的資料類型。有效值為:"STRING""NUMBER"

hashKeyField

雜湊索引鍵 (也稱為分割區索引鍵) 的名稱。

hashKeyValue

雜湊索引鍵的值。

rangeKeyType

選用。範圍索引鍵 (也稱為排序索引鍵) 的資料類型。有效值為:"STRING""NUMBER"

rangeKeyField

選用。範圍索引鍵 (也稱為排序索引鍵) 的名稱。

rangeKeyValue

選用。範圍索引鍵的值。

operation

選用。欲執行的操作類型。其遵循的是替代範本,因此能為 ${operation},但替代對象需產生下列其中之一:INSERTUPDATEDELETE

payloadField

選用。承載寫入的欄位名稱。如果省略該值,承載會寫入至 payload欄位。

表格

DynamoDB 表格的名稱。

roleARN

IAM 角色,允許存取 DynamoDB 表格。該角色至少必須允許 dynamoDB:PutItemIAM 動作。

寫入 DynamoDB 表格的資料產自於規則的 SQL 陳述式。hashKeyValuerangeKeyValue 欄位通常是由表達式 (如「${topic()}」或「${timestamp()}」) 組成。

注意

非 JSON 資料會以二進位資料的形式寫入 DynamoDB。DynamoDB 主控台會以 Base64 編碼文字來顯示資料。

請務必確認關聯至規則的角色擁有授予 dynamodb:PutItem 權限的政策。

下列 JSON 範例顯示了如何定義 dynamoDB 規則內的 AWS IoT 動作:

{ "topicRulePayload": { "ruleDisabled": false, "sql": "SELECT * AS message FROM 'some/topic'", "description": "A test Dynamo DB rule", "awsIotSqlVersion": "2016-03-23", "actions": [{ "dynamoDB": { "hashKeyField": "key", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB", "tableName": "my_ddb_table", "hashKeyValue": "${topic()}", "rangeKeyValue": "${timestamp()}", "rangeKeyField": "timestamp" } }] } }

如需詳細資訊,請參閱 Amazon DynamoDB Getting Started Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 DynamoDB 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon DynamoDB入門指南中的 客戶管理 CMK

DynamoDBv2 動作

DynamoDBv2 action

dynamoDBv2 動作可將全部或部分的 MQTT 訊息寫入至 DynamoDB 表格。承載的每個屬性都會寫入 DynamoDB 資料庫不同的欄中。

More information (5)

建立 DynamoDB 規則時,請務必指定以下資訊:

roleARN

IAM 角色,允許存取 DynamoDB 表格。該角色至少必須允許 dynamoDB:PutItemIAM 動作。

tableName

DynamoDB 表格的名稱。

注意

MQTT 訊息承載一定要包含一個與該表格主要分割區索引鍵相符的根層級索引鍵,以及一個與該表格的主要排序索引鍵相符的根層級索引鍵 (若有定義)。

寫入 DynamoDB 表格的資料產自於規則的 SQL 陳述式。

注意

請務必確認關聯至規則的角色擁有授予 dynamodb:PutItem 權限的政策。

下列 JSON 範例顯示了如何定義 dynamoDB 規則內的 AWS IoT 動作:

{ "topicRulePayload": { "sql": "SELECT * AS message FROM 'some/topic'", "ruleDisabled": false, "description": "A test DynamoDBv2 rule", "awsIotSqlVersion": "2016-03-23", "actions": [{ "dynamoDBv2": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2", "putItem": { "tableName": "my_ddb_table" } } }] } }

如需詳細資訊,請參閱 Amazon DynamoDB Getting Started Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 DynamoDB 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon DynamoDB入門指南中的 客戶管理 CMK

Elasticsearch 動作

Elasticsearch action

elasticsearch 動作可從 MQTT 訊息將資料寫入 Amazon Elasticsearch Service 網域。接下來,Elasticsearch 中的資料可使用例如 Kibana 的工具來進行查詢和視覺化。

More information (6)

當您建立含有 AWS IoT 動作的 elasticsearch 規則時,請務必指定下列資訊:

endpoint

您的 Amazon Elasticsearch Service 網域端點。

index

您想儲存資料的 Elasticsearch 索引。

type

欲存放文件的類型。

id

各文件的專屬識別符。

注意

請務必確認關聯至規則的角色擁有授予 es:ESHttpPut 權限的政策。

下列 JSON 範例顯示了如何定義 elasticsearch 規則內的 AWS IoT 動作:

{ "topicRulePayload":{ "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()}" } }] } }

如需詳細資訊,請參閱 Amazon Elasticsearch Service Developer Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 Elasticsearch 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Elasticsearch Service開發人員指南中的 Amazon Elasticsearch Service 的靜態資料加密

Firehose 動作

Firehose action

firehose 動作會從觸發規則的 MQTT 訊息發送資料至 Kinesis Data Firehose 串流。

More information (7)

當您建立含有 firehose 動作的規則時,請務必指定下列資訊:

deliveryStreamName

要寫入訊息資料的 Kinesis Data Firehose 串流。

roleArn

允許存取 IAM 的 Kinesis Data Firehose 角色。

separator

用於區隔寫入至 Kinesis Data Firehose 串流記錄的字元分隔符號。有效值為:'\n' (換行)、'\t' (Tab 鍵)、'\r\n' (Windows 換行)、',' (逗號)。

注意

請務必確保關聯至規則的角色擁有授予 firehose:PutRecord 權限的政策。

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 firehose 規則:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "firehose": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_firehose", "deliveryStreamName": "my_firehose_stream" } }] } }

如需詳細資訊,請參閱 Amazon Kinesis Data Firehose Developer Guide.如果您使用 Kinesis Data Firehose 將資料傳送到 Amazon S3 儲存貯體,並且使用客戶管理的 AWS KMS CMK 來加密 Amazon S3 中的靜態資料,則 Kinesis Data Firehose 必須具有存取儲存貯體的權限,以及代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Kinesis Data Firehose 開發人員指南中的授予 Kinesis Data Firehose 存取 Amazon S3 目的地的權限

HTTP 動作

HTTP action

http 動作會從觸發規則的 MQTT 訊息傳送資料至您的 Web 應用程式或服務,以便進一步處理,而不需撰寫任何程式碼。必須先驗證您傳送資料至其中的端點,然後規則引擎才能使用它。

More information (8)

當您建立含有 http 動作的規則時,請務必指定下列資訊:

url

透過 HTTP POST 傳送訊息的 HTTPS URL。您可以在 URL 中使用替代範本。

confirmationUrl

選用。若已指定,則 AWS IoT 會使用確認 URL 來建立相符的主題規則目的地。您必須先啟用主題規則目的地,才能在 http 動作中使用它。如需詳細資訊,請參閱 使用主題規則目的地。如果您使用替代範本,則必須手動建立主題規則目的地,然後才能使用 http 動作。confirmationUrl 必須是 url 的字首。

urlconfirmationUrl 之間的關係如下所述:

  • 若對 url 進行硬式編碼且未提供 confirmationUrl,則我們會隱含地將 url 欄位視為 confirmationUrl。 AWS IoT 會建立 url 的主題規則目的地。

  • 若對 urlconfirmationUrl 進行硬式編碼,則 url 必須以 confirmationUrl 開頭。AWS IoT 會建立 confirmationUrl 的主題規則目的地。

  • 如果 url 包含替代範本,則您必須指定 confirmationUrlurl 必須以 confirmationUrl 開頭。如果 confirmationUrl 包含替代範本,則您必須手動建立主題規則目的地,然後才能使用 http 動作。如果 confirmationUrl 未包含替代範本,則 AWS IoT 會建立 confirmationUrl 的主題規則目的地。

標頭

選用。您想要包含在 HTTP 請求中的任何標頭。

金鑰

標題的金鑰。不支援替代範本。

標頭的值。支援替代範本。

auth

選用。規則引擎用來連線至 url 引數中指定之端點 URL 的身分驗證。目前,簽章版本 4 是唯一支援的身分驗證類型。如需詳細資訊,請參閱 HTTP 授權

下列 JSON 範例顯示了如何建立含有 http 動作的 AWS IoT 規則:

{ "topicRulePayload": { "sql": "select * from 'a/b'", "awsIotSqlVersion": "2016-03-23", "ruleDisabled": false, "actions": [{ "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [{ "key": "static_header_key", "value": "static_header_value" }, { "key": "substitutable_header_key", "value": "${value_from_payload}" }] } }] } }

當承載採用 JSON 格式時,預設內容類型為 application/json。否則,它是 application/octet-stream。您可以在標頭中使用重要的 content-type 指定確切的內容類型 (不區分大小寫) 來覆寫它。

HTTP action retry logic

AWS IoT 規則引擎會根據下列規則重試 http 動作:

  • 規則引擎會嘗試傳送訊息至少一次。

  • 規則引擎最多重試兩次。嘗試次數上限為三次。

  • 在下列情況下,規則引擎不會嘗試重試:

    • 上一次嘗試提供了大於 16384 個位元組的回應。

    • 下游 Web 服務或應用程式在嘗試之後關閉 TCP 連線。

    • 完成結束請求的總時間超過請求逾時限制。

    • 請求傳回了 429、500-599 以外的 HTTP 狀態碼。

注意

標準資料傳輸成本適用於重試。

IoT 分析動作

IoT Analytics action

iotAnalytics 動作會從觸發規則的 MQTT 訊息發送資料至 AWS IoT Analytics 頻道。

More information (9)

當您建立含有 iotAnalytics 動作的規則時,請務必指定下列資訊:

channelName

要寫入訊息資料的 AWS IoT Analytics 頻道名稱。

roleArn

允許存取 IAM 頻道的 AWS IoT Analytics 角色。

您指定連接到該角色的政策應該如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotanalytics:BatchPutMessage", "Resource": [ "arn:aws:iotanalytics:us-west-2:account-id:channel/mychannel" ] } ] }

而且具有如下所示的信任關係:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole", } ] }

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 iotAnalytics 規則:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "iotAnalytics": { "channelName": "mychannel", "roleArn": "arn:aws:iam::123456789012:role/analyticsRole", } }] } }

如需詳細資訊,請參閱 AWS IoT Analytics 使用者指南

AWS IoT Analytics 主控台也有 Quick start (快速入門) 功能,讓您按一下即可建立通道、資料存放區和管道。當您開啟 AWS IoT Analytics 主控台時,請查找此頁面:

IoT 事件動作

IoT Events action

iotEvents 動作會從觸發規則至 AWS IoT Events 輸入的 MQTT 訊息傳送資料。

More information (10)

當您建立含有 iotEvents 動作的規則時,請務必指定下列資訊:

inputName

AWS IoT Events 輸入的名稱。

messageId

選用。使用此項目以確保 AWS IoT Events 偵測器僅處理一個帶有 messageId 的輸入 (訊息)。

roleArn

授予 AWS IoT 權限以傳送輸入至 AWS IoT Events 偵測器的角色 ARN。("Action":"iotevents:BatchPutMessage")。

以下是應該連接到角色的範例信任政策:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iotevents:BatchPutMessage", "Resource": [ * ] } }

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 iotEvents 規則:

{ "topicRulePayload": { "sql": "expression", "ruleDisabled": false, "description": "An AWS IoT Events test rule", "awsIotSqlVersion": "2016-03-23", "actions": [{ "iotEvents": { "inputName": "MyIoTEventsInput", "messageId": "1234567890", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_events" }, }] } }

如需詳細資訊,請參閱 AWS IoT Events 開發人員指南

IoT SiteWise 動作

IoT SiteWise action

iotSiteWise 動作會從觸發規則的 MQTT 訊息傳送資料至 AWS IoT SiteWise 中的資產屬性。

注意

當您使用此動作將資料傳送到 AWS IoT SiteWise 時,資料必須符合 BatchPutAssetPropertyValue 動作的需求。如需詳細資訊,請參閱 AWS IoT SiteWise API 參考中的 BatchPutAssetPropertyValue

你可以按照教學課程,告訴你如何從 AWS IoT 物件擷取資料。如需詳細資訊,請參閱AWS IoT SiteWise使用者指南中的從AWS IoT將資料擷取至AWS IoT SiteWise

如需對此規則進行故障診斷的相關資訊,請參閱 AWS IoT SiteWise 使用者指南中的規則動作診斷錯誤AWS IoT SiteWise

More information (11)

在建立含有 iotSiteWise動作的規則時,請務必指定下列資訊:

putAssetPropertyValueEntries

資產屬性值項目的清單,其中每個項目都包含下列資訊:

entryId

選用。此項目的唯一識別符。您可以定義 entryId,以更好地追蹤在發生失敗時哪則訊息造成錯誤。接受替代範本。預設為新的 UUID。

propertyAlias

與資產屬性相關聯的屬性別名。您必須指定 propertyAlias,或同時指定 assetIdpropertyId。接受替代範本。如需屬性別名的相關資訊,請參閱 AWS IoT SiteWise 使用者指南中的將工業資料串流對應到資產屬性

assetId

AWS IoT SiteWise 資產的 ID。您必須指定 propertyAlias,或同時指定 assetIdpropertyId。接受替代範本。

propertyId

資產屬性的 ID。您必須指定 propertyAlias,或同時指定 assetIdpropertyId。接受替代範本。

propertyValues

要插入的屬性值清單,其中每個屬性值包含以下格式的時間戳記、品質和值 (TQV):

timestamp

包含下列資訊的時間戳記結構:

timeInSeconds

包含 Unix epoch 時間中時間 (以秒為單位) 的字串。接受替代範本。如果您的消息承載沒有時間戳記,可以使用 Timestamp(),返回目前時間 (以毫秒為單位)。若要將該時間轉換為以秒為單位,您可以使用下列替代範本:${floor(timestamp() / 1E3)}

offsetInNanos

選用。包含從該時間 (以秒為單位) 開始的奈秒時間位移的字串。接受替代範本。如果您的消息承載沒有時間戳記,可以使用 Timestamp(),返回目前時間 (以毫秒為單位)。若要計算從該時間開始的奈秒位移,可以使用下列替代範本:${(timestamp() % 1E3) * 1E6}

相對於 Unix epoch 時間,AWS IoT SiteWise 僅接受過去時間戳記最多 15 分鐘,未來最多 5 分鐘的項目。

quality

選用。描述值品質的字串。接受替代範本。必須是 GOODBADUNCERTAIN

包含下列其中一個值欄位的值結構,視資產屬性的資料類型而定:

booleanValue

選用。包含值項目之布林值的字串。接受替代範本。

doubleValue

選用。包含值項目之雙精確度值的字串。接受替代範本。

integerValue

選用。包含值項目之整數值的字串。接受替代範本。

stringValue

選用。值項目的字串值。接受替代範本。

roleArn

許可 AWS IoT 將資產屬性值傳送至 AWS IoT SiteWise 之角色的 ARN ("Action": "iotsitewise:BatchPutAssetPropertyValue")。

以下是應該連接到角色的範例信任政策:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*" } ] }

若要改善安全性,您可以在 Condition 屬性中指定 AWS IoT SiteWise 資產階層路徑。下列範例是指定資產階層路徑的信任政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*", "Condition": { "StringLike": { "iotsitewise:assetHierarchyPath": [ "/root node asset ID", "/root node asset ID/*" ] } } } ] }

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的基本 iotSiteWise 規則。

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "iotSiteWise": { "putAssetPropertyValueEntries": [ { "propertyAlias": "/some/property/alias", "propertyValues": [ { "timestamp": { "timeInSeconds": "${my.payload.timeInSeconds}" }, "value": { "integerValue": "${my.payload.value}" } } ] } ], "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sitewise" }, }] } }

下列 JSON 範例顯示了如何建立含有 iotSiteWise 動作的 AWS IoT 規則。此範例使用此主題做為屬性別名和 timestamp() 函數。例如,如果您將資料發佈至 /company/windfarm/3/turbine/7/rpm,此動作會將資料傳送至屬性別名與您指定主題相同的資產屬性。

{ "topicRulePayload": { "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "iotSiteWise": { "putAssetPropertyValueEntries": [ { "propertyAlias": "${topic()}", "propertyValues": [ { "timestamp": { "timeInSeconds": "${floor(timestamp() / 1E3)}", "offsetInNanos": "${(timestamp() % 1E3) * 1E6}" }, "value": { "doubleValue": "${my.payload.value}" } } ] } ], "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sitewise" }, }] } }

如需詳細資訊,請參閱 AWS IoT SiteWise 使用者指南

Kinesis 動作

Kinesis action

kinesis 動作可從 MQTT 訊息將資料寫入 Kinesis 串流。

More information (12)

在建立含有 AWS IoT 動作的 kinesis 規則時,請務必指定下列資訊:

stream

要寫入資料的 Kinesis 串流。

partitionKey

分割區索引鍵用來決定資料要寫入哪個碎片。分割區索引鍵通常是由表達式 (如「${topic()}」或「${timestamp()}」) 組成。

注意

請務必確認與該規則相連的政策擁有 kinesis:PutRecord許可。

下列 JSON 範例顯示了如何定義 kinesis 規則內的 AWS IoT 動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "kinesis": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_kinesis", "streamName": "my_kinesis_stream", "partitionKey": "${topic()}" } }], } }

如需詳細資訊,請參閱 Amazon Kinesis Data Streams Developer Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 Kinesis Data Streams 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Kinesis Data Streams 開發人員指南中的使用由使用者產生的 KMS 主金鑰的許可

Lambda 動作

Lambda action

lambda 動作會呼叫 Lambda 函式,傳送觸發規則的 MQTT 訊息。Lambda 函式是以非同步方式執行。

More information (13)

Lambda 函式是以非同步方式執行。

若要讓 AWS IoT 呼叫 Lambda 函數,必須設定一個將 lambda:InvokeFunction 許可授與 AWS IoT 的政策。您只能呼叫與您 Lambda 政策存在之相同區域中定義的 Lambda 函數。Lambda 函數會使用資源型政策,因此您必須將政策連接到 Lambda 函數本身。請使用下列 CLI 命令來連接用於授與 lambda:InvokeFunction權限的政策:

aws lambda add-permission --function-name "function_name" --region "region" --principal iot.amazonaws.com --source-arn arn:aws:iot:us-east-2:account-id:rule/rule_name --source-account "account-id" --statement-id "unique_id" --action "lambda:InvokeFunction"

以下為 add-permission命令的引數:

--function-name

正要新增許可來更新資源政策的 Lambda 函式名稱。

--region

您帳戶的 AWS 區域。

--principal

取得許可的委託人。此應由 iot.amazonaws.com 允許 AWS IoT 許可來呼叫 Lambda 函式。

--source-arn

該項規則的 ARN。您可以使用 get-topic-ruleCLI 命令來取得規則的 ARN。

--source-account

定義規則的 AWS 帳戶。

--statement-id

專屬的陳述式識別符。

--action

想在此陳述式中允許的 Lambda 動作。如要允許 AWS IoT 叫用 Lambda 函數,請指定 lambda:InvokeFunction

注意

若您在未提供來源 ARN 的情況下為 AWS IoT 主體新增權限,則任何搭配您 Lambda 動作建立規則的 AWS 帳戶都可以觸發規則,以從 AWS IoT 叫用您的 Lambda 函數。

如需詳細資訊,請參閱 Lambda 許可模型

建立含有 lambda 動作的規則時,您必須指定觸發規則時要叫用的 Lambda 函式。

下列 JSON 範本所示範的是呼叫 Lambda 函式的規則:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "lambda": { "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction" } }] } }

若您不指定您 Lambda 函數的版本或別名,則會執行最新的函數版本。如果您想要執行特定版本的 Lambda 函數,您可以指定版本或別名。若要指定版本或別名,請將版本或別名附加到 Lambda 函數的 ARN。例如:

"arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias"

如需版本控制與別名的詳細資訊,請參閱 AWS Lambda 函數版本控制與別名。如需 AWS Lambda 的詳細資訊,請參閱 AWS Lambda Developer Guide

如果您使用客戶管理的 AWS KMS CMK 來加密 AWS Lambda 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 AWS Lambda 開發人員指南中的靜態加密

Republish 動作

Republish action

republish 動作可將觸發角色的訊息重新發佈至另一個 MQTT 主題。

More information (14)

當您建立含有 republish 動作的規則時,請務必指定下列資訊:

topic

要將訊息重新發佈至該 MQTT 主題。如果您要重新發佈到預留主題 (開頭為 $),請改用 $$。例如,若您正在重新發佈裝置陰影主題 (例如 $$aws/things/MyThing/shadow/update),請將主題指定為 $$aws/things/MyThing/shadow/update

roleArn

允許發佈至 MQTT 主題的 IAM 角色。

qos

選用。重新發佈訊息時使用服務品質 (QoS) 層級。有效值為 01。預設值為 0

注意

請務必確認關聯至規則的角色擁有授予 iot:Publish 權限的政策。

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "republish": { "topic": "another/topic", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish", "qos": 1 } }] } }

S3 動作

S3 action

s3 動作會將觸發規則的 MQTT 訊息的資料寫入至 Amazon S3 儲存貯體。

More information (15)

在搭配 s3 動作建立 AWS IoT 規則時,除可選的 cannedacl 之外,您必須指定以下資訊:

bucket

要寫入資料的 Amazon S3 儲存貯體。

cannedacl

選用。Amazon S3 固定的 ACL,負責控制物件金鑰所辨識之物件的存取權限。如需更多資訊 (包含允許的值),請參閱 S3 Canned ACL

金鑰

寫入資料的檔案路徑。例如,如果此引數的值為「${topic()}/${timestamp()}」,則訊息傳送的主題就會是「this/is/my/topic,」。若目前的時間戳記為 1460685389,則該資料會寫入至 Amazon S3 上的「this/is/my/topic」資料夾中一個名為「1460685389」的檔案。

注意

使用靜態金鑰會導致每次呼叫規則時便會覆寫 Amazon S3 內的一個檔案。更為常用的案例是使用訊息時間戳記,或另一個獨一無二的訊息識別符,以便每一個接收到的訊息都會將新檔案儲存在 Amazon S3 中。

roleArn

允許存取 IAM 儲存貯體的 Amazon S3 角色。

注意

請務必確認關聯至規則的角色擁有授予 s3:PutObject 權限的政策。

下列 JSON 範例顯示了如何定義 s3 規則內的 AWS IoT 動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "s3": { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3", "bucketName": "my-bucket", "key": "${topic()}/${timestamp()}" "cannedacl": "public-read" } }] } }

如需詳細資訊,請參閱 Amazon Simple Storage Service Developer Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 Amazon S3 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Simple Storage Service 開發人員指南中的AWS 受管的 CMK 和客戶管理的 CMK

Salesforce 動作

Salesforce action

salesforce 動作會從觸發規則至 Salesforce IoT 輸入串流的 MQTT 訊息傳送資料。

More information (16)

當您建立含有 salesforce 動作的規則時,請務必指定下列資訊:

url

該 URL 會透過 Salesforce IoT 輸入串流公開。在您建立輸入串流時,便可從 Salesforce IoT 平台使用 URL。若需更多資訊,請參閱 Salesforce IoT 文件。

token

用於驗證特定 Salesforce IoT 輸入串流存取的權杖。在您建立輸入串流時,您便可在 Salesforce IoT 平台使用權杖。若需更多資訊,請參閱 Salesforce IoT 文件。

注意

這些參數不支援替換。

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 salesforce 規則:

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

若需更多資訊,請參閱 Salesforce IoT 文件。

SNS 動作

SNS action

sns動作會從觸發規則的 MQTT 訊息以 SNS 推送通知的形式傳送資料。

More information (17)

當您建立含有 sns 動作的規則時,請務必指定下列資訊:

messageFormat

訊息的格式。可接受的值為「JSON」和「RAW」。 該屬性的預設值為「RAW」。 SNS 會使用此設定來判斷是否應剖析承載,以及是否應擷取承載與特定平台相關的部分。

roleArn

允許存取 SNS 的 IAM 角色。

targetArn

推送通知傳送到的 SNS 主題或個別裝置。

注意

請務必確保與規則關聯的政策擁有 sns:Publish 權限。

下列 JSON 範例顯示了如何定義 sns 規則內的 AWS IoT 動作:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "sns": { "targetArn": "arn:aws:sns:us-east-2:123456789012:my_sns_topic", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sns" } }] } }

如需詳細資訊,請參閱 Amazon Simple Notification Service Developer Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 Amazon SNS 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Simple Notification Service 開發人員指南金鑰管理

SQS 動作

SQS action

sqs 動作會從觸發規則至 SQS 佇列的 MQTT 訊息傳送資料。

More information (18)

當您建立含有 sqs 動作的規則時,請務必指定下列資訊:

queueUrl

要寫入訊息資料的 SQS 佇列 URL。

useBase64

如果希望 MQTT 訊息資料在寫入 SQS 佇列前為 Base64 編碼,請設定為 true。否則,請設定為 false

roleArn

允許存取 SQS 佇列的 IAM 角色。

注意

請務必確認關聯至規則的角色擁有授予 sqs:SendMessage 權限的政策。

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 sqs 規則:

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "sqs": { "queueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/my_sqs_queue", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs", "useBase64": false } }] } }

SQS 動作不支援 SQS FIFO 佇列。因為規則引擎是一項完全分散式的服務,因此在 SQS 動作觸發時無法保證訊息順序。

如需詳細資訊,請參閱 Amazon Simple Queue Service Developer Guide.如果您使用客戶管理的 AWS KMS CMK 來加密 Amazon SQS 中靜態的資料,則服務必須具有代表發起人使用 CMK 的許可。如需詳細資訊,請參閱 Amazon Simple Queue Service 開發人員指南金鑰管理

Step Functions 動作

Step Functions action

stepFunctions 動作會開始 Step Functions 狀態機器的執行。

More information (19)

當您建立含有 stepFunctions 動作的規則時,請務必指定下列資訊:

executionNamePrefix

選用。指定給狀態機器執行的名稱包含此字首,後為 UUID。若狀態機器執行的名稱並未提供,則 Step Functions 會建立一個唯一的名稱。

stateMachineName

將啟動執行的 Step Functions 狀態機器的名稱。

roleArn

授與物聯網 (AWS IoT) 許可以開始執行狀態機器角色的 ARN ("Action":"states:StartExecution")。

以下是應該連接到角色的範例信任政策:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "states:StartExecution", "Resource": [ * ] } }

下列 JSON 範例顯示了如何建立含有 AWS IoT 動作的 stepFunctions 規則:

{ "topicRulePayload": { "sql": "expression", "ruleDisabled": false, "description": "A step functions test rule", "awsIotSqlVersion": "2016-03-23", "actions": [{ "stepFunctions": { "executionNamePrefix": "myExecution", "stateMachineName": "myStateMachine", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_step_functions" } }] } }

如需詳細資訊,請參閱 AWS Step Functions Developer Guide.