AWS IoT と接続する (ユーザーコンソール版)
AWS IoT とは
AWS IoT とは、デバイス (Thing) から安全にデータをクラウドに送信し、また送信されたデータに対してルールベースで各種 AWS サービスを連携させることができるプラットフォームです。
(AWS IoT ドキュメント : How AWS IoT Works より)
デバイス (Thing) からクラウドへのデータ送信の方法には 2 種類用意されています。
- MQTTS : X.509 証明書を使用した TLS (Transport Layer Security) のクライアント認証
- HTTPS : IAM ユーザーやロール・Cognito を利用した認証
本記事では、MQTTS を使用してデータを投入してみたいと思います。送信されたデータは SNS を使用してメール通知してみましょう。
AWS IoT Core と接続する方法としては SORACOM Beam の他、SORACOM Funnel をご利用いただくことで、より簡単に実装できます。併せてご検討ください。
ステップ 1: AWS IoT を設定する
AWS IoT コンソール を開き AWS IoT の設定を開始します。
まず 管理 > モノ > 作成 から、使用するデバイスをモノ (Thing) として作成します。
「単一のモノを作成する」をクリックします。
ここでは、「raspi」という名前にしています。入力後、「次へ」をクリックします。
モノに証明書を追加します。ここでは「証明書を作成」をクリックし 1-Click 証明書を作成します。
下記の 3 つの証明書をダウンロードのリンクよりダウンロードします (後ほど使用します)。 また、「有効化」をクリックして証明書を有効化します。 その後、「ポリシーをアタッチ」をクリックします。
- このモノの証明書
- プライベートキー
- AWS IoT のルート CA (有効化ボタンの上に表示されているリンクから Amazon ルート CA 1 等の CA 証明書をダウンロードします)
通常はここで [ポリシーのアタッチ] をクリックしモノにポリシーを割り当てますが、まだポリシーは未作成のため、ここではそのまま [完了] をクリックします。
次に 安全性 > ポリシー > ポリシーの作成からデバイスに割り当てるポリシーを作成します。
今回はどの MQTT topic にも Publish, Subscribe 可能なポリシーを作成します。 下記のように入力して [作成] をクリックします。
- 名前 :
PubSubToAnyTopic
- アクション :
iot:*
- リソース ARN :
*
- 効果 : 許可をチェック
次に作成したポリシーを作成したモノの証明書へ紐付けます。
安全性 > 証明書 を選択し、先ほど作成した証明書の右上の […] から [ポリシーのアタッチ] をクリックします。
先ほど作成した PubSubToAnyTopic
を選択し、[アタッチ] をクリックします。
以上で AWS IoT Core へのモノの登録が完了しました。
続いて SNS を使用してメール通知するルールの作成を行っていきます。
まずは事前に SNS で通知するトピックを設定しておきます。 AWS の SNS ダッシュボード を開き、[トピック] > [新しいトピックを作成]をクリックします。
トピック名 (ここでは my-sns-topic
とします) を入力し、[トピックの作成]をクリックします。
作成したトピックを選択し、[アクション] > [トピックへのサブスクリプション]をクリックします。
プロトコルで Email を選択し、エンドポイント (Email の場合、通知先のメールアドレス) を入力します。入力後、[サブスクリプションの作成]をクリックします。
しばらくすると、設定したメールアドレスへサブスクリプションの確認メールが届きます。 届いたメールに従い「Confirm subscription」をクリックし、サブスクリプションの確認を行います。
ここまでで SNS のトピック設定ができました。
続いて AWS IoT Core に戻り、設定した SNS のトピックを使用してメール通知するようルールの設定を行います。 [ACT] > [ルールの作成]をクリックし、ルールを作成します。
ルールの名前と説明を入力します。(ここでは SNS という名前にします)
ルールクエリステートメントを設定します。 今回は 'beamdemo' という MQTT topic に publish されたメッセージをすべて SNS へ通知するよう、ルールクエリステートメントに下記のように入力します。
SELECT * FROM 'beamdemo'
次に「1 つ以上のアクションを設定する」の下の[アクションの追加]をクリックします。
[SNS プッシュ通知としてメッセージを送信する] を選択し[アクションの設定]をクリックします。
SNS ターゲットは先ほど作成した SNS トピック (my-sns-topic
) を設定します。
メッセージ形式は[RAW]を設定します。
IAM ロールは[新しいロールを作成]をクリックし、ロール名を設定して作成します。
上記設定ができたら、[アクションの追加]をクリックします。
[ルールの作成]をクリックします。
最後に、AWS IoT Core へデータを送信するためのカスタムエンドポイントを確認します。 AWS IoT Core の [設定] > カスタムエンドポイントに記載されているエンドポイントをコピーします。(後ほど使用します)
以上で AWS IoT Core の設定は完了です。
ステップ 2: SORACOM Beam を有効にして MQTT エントリポイントを設定する
証明書ファイルの用意
AWS IoT Core の Thing 設定の際に得られた以下の証明書ファイルを準備します。
- プライベートキー : {ランダム文字列}-private.pem.key
- このモノの証明書 : {ランダム文字列}-certificate.pem.crt
- AWS IoT のルート CA : Amazon ルート CA 1 など
SORACOM Beam を有効にする
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
以下のように転送先の設定を行います。
- プロトコル: MQTTS
- ホスト名: 先ほどコピーした AWS IoT Core のカスタムエンドポイントをペーストします (
(ランダムな値)-ats.iot.ap-northeast-1.amazonaws.com
のような文字列) - ポート番号: 8883
証明書を入力します。
既に登録されていれば候補が表示されますが、未登録の場合は「+」ボタンから追加します。
認証情報 ID は任意の文字列を、半角英数字とハイフン、アンダースコアを使って入力します。 先ほどダウンロードしたファイルの内容をコピー & ペーストします。それぞれ以下のファイルとなります。 (いずれのファイルもテキストファイルですので、テキストエディタなどで内容を表示させ、コピーしてください)
- 秘密鍵のテキストボックス:{ランダム文字列}-private.pem.key の内容
- 証明書のテキストボックス:{ランダム文字列}-certificate.pem.crt の内容
- CA 証明局のテキストボックス:Amazon ルート CA の内容
をクリックします。
IoT SIM の Beam の設定が完了しました。
ステップ 3: デバイスからデータを送信する
では、実際にデータを送信してみましょう。
上記グループに所属する IoT SIM で通信を行っているデバイスから以下のようにコマンドを実行します。
pi@raspberrypi ~ $ mosquitto_pub -d -h beam.soracom.io -t beamdemo -m "Hello, World"
Received CONNACK
Sending PUBLISH (d0, q0, r0, m1, 'beamdemo', ... (12 bytes))
データを送信すると、SNS 経由でメールを確認できます。
上記のコマンドの実行のとおり、Beam の設定を行ったグループに属する IoT SIM で接続されているデバイスからは、証明書を指定することなく、AWS IoT へデータ送信を行うことができています。
Beam を使用しない場合は、AWS IoT ドキュメントの Verify MQTT Subscribe and Publish ページにもあるとおり、以下のように証明書ファイル等を指定して送信する必要があります。
$ mosquitto_pub --cafile rootCA.pem \
--cert cert.pem \
--key thing-private-key.pem \
-h (ランダムな値)-ats.iot.ap-northeast-1.amazonaws.com -p 8883 \
-q 1 -d -t topic/test -i clientid2 -m "Hello, World"
デバイスでなく、Beam で証明書を付与していることがわかります。 Beam により、デバイスで証明書を保つ必要がありません。証明書の変更があった際も、Beam の設定を変更するのみで対応できます。
当ガイドでは、SNS への通知を行いました。 これ以外にも、S3 や DynamoDB へのデータ保存、Lambda Function の実行等、様々な AWS サービスと連携できますので、是非お試しください。