

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

# 建立 AWS IoT 規則
<a name="iot-create-rule"></a>

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


**規則的元件**  

| 元件 | Description | 必要或選用 | 
| --- | --- | --- | 
| 規則名稱 |   規則的名稱。請注意，我們不建議您在規則名稱中使用個人身分識別資訊。  | 必要. | 
| 規則說明 |  規則的文字描述。請注意，我們不建議您在規則描述中使用個人身分識別資訊。  | 選用。 | 
| SQL 陳述式 |  簡化的 SQL 語法，用於篩選 MQTT 主題所收到的訊息，並將資料推送到他處。如需詳細資訊，請參閱[AWS IoT SQL 參考](iot-sql-reference.md)。  | 必要. | 
| SQL 版本 |  評估規則時所用的 SQL 規則引擎版本。雖然此屬性是選用的，但強烈建議您指定 SQL 版本。根據`2016-03-23`預設， AWS IoT Core 主控台會將此屬性設定為 。如果未設定此屬性，例如在 AWS CLI 命令或 CloudFormation 範本中，`2015-10-08`則會使用 。如需詳細資訊，請參閱[SQL 版本](iot-rule-sql-version.md)。  | 必要. | 
| 一或多個動作 | 動作會在制定規則時 AWS IoT 執行。例如，您可將資料插入 DynamoDB 表格，將資料寫入 Amazon S3 儲存貯體，發佈至 Amazon SNS 主題，或呼叫 Lambda 函式。 | 必要. | 
| 錯誤動作 | 動作 AWS IoT 會在無法執行規則的動作時執行。 | 選用。 | 

建立 AWS IoT 規則之前，您必須使用允許存取所需 AWS 資源的政策來建立 IAM 角色。在實作規則時 AWS IoT ， 會擔任此角色。如需詳細資訊，請參閱[授予 AWS IoT 規則所需的存取權](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html)和[傳遞角色許可](https://docs.aws.amazon.com//iot/latest/developerguide/pass-role.html)。

建立規則時，請注意在主題上發佈的資料量。如果您建立了包含萬用字元主題模式的規則，這些規則可能會比對大部分的訊息。若是這種情況，您可能需要增加目標動作使用的 AWS 資源容量。我們建議在重新發佈規則中避免萬用字元主題模式，以防止重複處理並降低成本。

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

## 建立規則 （主控台）
<a name="iot-create-rule-console"></a>

**建立規則 (AWS 管理主控台)**

使用 [AWS 管理主控台](https://console.aws.amazon.com//iot/home#/home)命令來建立規則：

1. 開啟 [AWS IoT 主控台](https://console.aws.amazon.com//iot/home#/home)。

1. 在左側導覽上，從**管理**區段中選擇**訊息路由**。然後選擇**規則**。

1. 在**規則**頁面上，選擇**建立規則**。

1. 在**指定規則屬性**頁面上，輸入規則的名稱。**規則描述**和**標籤**是選用的。選擇**下一步**。

1. 在**設定 SQL 陳述**式頁面上，選擇 SQL 版本並輸入 SQL 陳述式。SQL 陳述式的範例可以是 `SELECT temperature FROM 'iot/topic' WHERE temperature > 50`。如需詳細資訊，請參閱 [SQL 版本](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-sql-version.html)和 [AWS IoT SQL 參考](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-reference.html)。

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

   1. 在**規則動作**中，從下拉式清單中選取規則動作。例如，您可以選擇 **Kinesis Stream**。如需規則動作的詳細資訊，請參閱[AWS IoT 規則動作](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-actions.html)。

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

   1. 在 **IAM 角色**中，選擇或建立角色以授予對端點的 AWS IoT 存取權。請注意， AWS IoT 會自動在您的 IAM 角色`aws-iot-rule`下建立字首為 的政策。您可以選擇**檢視**，從 IAM 主控台檢視您的 IAM 角色和政策。**錯誤動作**是選用的。您可以在[錯誤處理 （錯誤動作）](https://docs.aws.amazon.com//iot/latest/developerguide/rule-error-handling.html) 中找到更多資訊。如需為規則建立 IAM 角色的詳細資訊，請參閱[授予規則所需的存取權](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html)。選擇**下一步**。

1. 在**檢閱和建立**頁面上，檢閱所有組態並視需要進行編輯。選擇**建立**。

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

## 建立規則 (CLI)
<a name="iot-create-rule-cli"></a>

**建立規則 (AWS CLI)**  
請使用 [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html) 命令來建立規則：

```
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 AI `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"
			}
		}
	]
}
```