こんにちは、Michaelです。
今回から、「AWS IoTルールの基本」と題して、AWS IoTから他のサービスに連携するためのルールについて紹介していきます。
第1回は、AWS IoTルールの基本的な設定方法を紹介します。
AWS IoTルールについて
AWS IoTルールは、トピックやメッセージ内容の条件を基に、Publishされたメッセージを他のAWSのサービスに連携させるための機能です。AWS IoTに入ってきたメッセージをS3に保存したり、トリガーとしてLambdaを起動したりといった場合に設定をします。
SQLベースのクエリを用いて簡易的なメッセージの加工を行うことができるため、連携先に合わせた形式でメッセージを連携させることもできます。
IAMロールの設定
ルールを設定するにあたり、以下の2つのポリシーをアタッチしたIAMロールを作成しておきます。以下のポリシーは、AWSコンソールの「ロールの作成」ウィザードを使用すると自動的にアタッチされます。
ポリシー名 | 内容 |
AWSIoTLogging | CloudWatch Logsへのログ出力 |
AWSIoTRuleActions | AWS IoTルールのアクションで使用する最低限の実行権限 |
ルールの設定手順
AWS IoTのルールの設定項目は以下の3点になります。
① ルールの名称と説明
② メッセージソース (AWS IoT SQLの設定)
③ ルールアクション (他のサービスとの連携の設定)
AWS IoTルールの設定をするには、AWS IoTコンソールの左の「ルール」をクリックし、画面右上の「作成」をクリックします。
ルールの名称と説明
ルールの「名前」は、ルールの一覧に表示される名称となるため、一意に識別できる名称を付けます。使用できる文字は、半角英数とアンダーバー(_)のみです。「説明」はルールに関する詳細を入力します。
メッセージソースの設定
メッセージソースは、AWS IoTからアクション先に出力するメッセージの内容、条件を設定できます。出力内容は、AWS IoT SQLというトピックをDBのテーブル、メッセージのJSONをレコードに見立てたクエリで設定します。
組み込み関数を使用することもでき、「clientid()」でメッセージ発信元のClientIdを取得したり、「timestamp()」で受信した時刻を取得したりといったことができます。
例えば、ClientIdと受信時刻をそれぞれ「client_id」、「timestamp」としてメッセージに付加する場合には、以下のようなクエリを設定します。
1 |
SELECT clientid() AS client_id, timestamp() AS timestamp, * FROM 'test/pub' |
ルールアクションの設定
ルールアクションは、設定条件に一致した場合に連携するサービスとその実行内容を設定します。設定できるアクションは以下のようになります。
※詳細なアクションの設定は「その2」以降で紹介します。
アクション内容 |
DynamoDB テーブルにメッセージを挿入する |
データベーステーブル (DynamoDBv2) の複数列にメッセージを分割する |
メッセージデータを渡す Lambda 関数を呼び出す |
SNS プッシュ通知としてメッセージを送信する |
SQS キューにメッセージを送信する |
Amazon Kinesis ストリームにメッセージを送信する |
AWS IoT のトピックにメッセージを再パブリッシュする |
Amazon S3 バケットにメッセージを格納する |
CloudWatch にメッセージデータを送信する |
CloudWatch アラームの状態を変更する |
Amazon Elasticsearch Service にメッセージを送信する |
Salesforce の IoT クラウド入力ストリームへのメッセージの送信 |
アクションは複数設定でき、S3にメッセージを保存すると同時に、Lambdaを起動するといった設定も可能です。
まとめ
AWS IoTルールは、IoTデバイスとAWSのサービスを連携させる基本の設定となります。
次回からは、ルールアクションを掘り下げて、実際のサービス連携について紹介していきます。
第2回は、AWS IoTの他のトピックにRepublishする設定を紹介します。
お楽しみに!