

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS IoT ルールの作成
<a name="iot-create-rule"></a>

接続されたモノからデータをルーティングして他の AWS サービスとやり取りする AWS IoT ルールを作成できます。 AWS IoT ルールは以下のコンポーネントで構成されます。


**ルールのコンポーネント**  

| コンポーネント | 説明 | 必須またはオプション | 
| --- | --- | --- | 
| ルール名 |   ルールの名前。ルールの名前に個人を特定できる名前や情報を使用することはお勧めしません。  | 必須。 | 
| ルールの説明 |  ルールのテキスト説明。ルールの説明に個人を特定できる名前や情報を使用することはお勧めしません。  | オプション。 | 
| SQL ステートメント |  MQTT トピックで受け取ったメッセージをフィルター処理し、別の場所にデータを送るための単純な SQL 構文。詳細については、「[AWS IoT SQL リファレンス](iot-sql-reference.md)」を参照してください。  | 必須。 | 
| SQL バージョン |  ルールを評価する際に使用する SQL ルールエンジンのバージョン。このプロパティはオプションですが、SQL バージョンを指定することを強くお勧めします。 AWS IoT Core コンソールは、このプロパティを`2016-03-23`デフォルトで に設定します。 AWS CLI コマンドや CloudFormation テンプレートなど、このプロパティが設定されていない場合`2015-10-08`は、 が使用されます。詳細については、「[SQL バージョン](iot-rule-sql-version.md)」を参照してください。  | 必須。 | 
| 1 つ以上のアクション | アクションは、ルールを作成するときに 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. **[Rules]** (ルール) ページで、**[Create rule]** (ルールの作成) を選択します。

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

以下のペイロードファイル例では、MQTT ペイロード内のデータが 1 として分類されている場合、Amazon SageMaker AI の `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"
			}
		}
	]
}
```