メニュー
AWS IoT
開発者ガイド

AWS IoT ルールの作成

接続されているモノからのデータをルーティングするためのルールを設定できます。ルールには、次の内容が含まれます。

ルール名

ルールの名前。

説明 (オプション)

ルールに関してテキストで示された説明。

SQL ステートメント

MQTT トピックで受け取ったメッセージをフィルタ処理し、別の場所にデータを送るための単純な SQL 構文。詳細については、「AWS IoT SQL リファレンス」を参照してください。

SQL のバージョン

ルールを評価する際に使用する SQL ルールエンジンのバージョン。このプロパティはオプションですが、SQL バージョンを指定することを強くお勧めします。このプロパティが設定されていない場合、デフォルトでは、2015-10-08 が使用されます。

1 つ以上のアクション

ルールの実行時に AWS IoT によって行われるアクション。たとえば、データを DynamoDB テーブルに挿入する、データを Amazon S3 バケットに書き込む、Amazon SNS トピックに発行する、Lambda 関数を呼び出すなどのアクションを指定できます。

エラーアクション

アクション AWS IoT は、ルールのアクションを実行できないときに実行されます。

ルールを作成する際には、トピックに対して公開されるデータの量に注意してください。ワイルドカードのトピックパターンが含まれるルールを作成すると、一致するメッセージの割合が大きくなる可能性があるため、場合によってはターゲットアクションに使用する AWS リソースの容量を増やす必要があります。また、ワイルドカードのトピックパターンが含まれる再発行ルールを作成すると、循環ルールが作成され、無限ループが発生する可能性があります。

注記

ルールの作成と更新は、管理者レベルの操作です。ルールを作成または更新するアクセス権限のあるユーザーは、そのルールで処理されたデータにもアクセスできます。

ルールを作成するには (AWS CLI)

ルールを作成するには、create-topic-rule コマンドを使用します。

aws iot create-topic-rule --rule-name my-rule --topic-rule-payload file://my-rule.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 ES にプッシュするルールが指定されています。

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

以下のペイロードファイル例では、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 Kinesis 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 Machine Learning の 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" } }] }