AWS IoT とは
AWS IoT とは、デバイス (Thing) から安全にデータをクラウドに送信し、また送信されたデータに対してルールベースで各種 AWS サービスを連携させることができるプラットフォームです。
(AWS IoT ドキュメント : How AWS IoT works より)
デバイス (Thing) からクラウドへのデータ送信の方法には 2 種類用意されています。
- MQTTS : X.509 証明書を使用した TLS (Transport Layer Security) のクライアント認証
- HTTPS : IAM ユーザーやロール・Cognito を利用した認証
SORACOM Beam の MQTT エントリポイントを利用して、AWS IoT Core へデバイスからデータを送信したり、デバイスに AWS IoT Core からのデータを受信したりできます。本記事では、MQTTS を使用してデータを投入し SNS を使用してメール通知します。また AWS IoT Core から送信したデータをデバイスにて受信します。
AWS IoT Core と接続する方法としては SORACOM Beam の他、SORACOM Funnel をご利用いただくことで、より簡単に実装できます。併せてご検討ください。
ステップ 1: AWS IoT を設定する
AWS IoT モノを作成
使用するデバイスをモノ (Thing) として、AWS IoT に作成します。
AWS IoT コンソール にアクセスします。
→ → の順にクリックします。
をクリックします。
を選択し、 をクリックします。
に名前を入力し、 をクリックします。
ここでは、「raspi」という名前にしています。
モノに証明書を追加します。
を選択し、 をクリックします。
「証明書にポリシーをアタッチ - オプション」画面が表示されます。通常はここでポリシーを選択し、証明書にポリシーを割り当てます。
ここではポリシーは未作成のため、ポリシーをアタッチせずに
をクリックします。以下の 4 つのファイルをダウンロードするために、対応する
をクリックし、 をクリックします。これらの証明書は、後ほど使用します。
- デバイス証明書
- パブリックキーファイル
- プライベートキーファイル
- Amazon ルート CA 1
モノが作成されます。次に、デバイス (モノ) に割り当てるポリシーを作成します。
→ → → の順にクリックします。
今回はどの MQTT topic にも Publish 可能なポリシーを作成します。
各項目を設定します。
PubSubToAnyTopic
) : 任意の名前 (例: - : 「許可」
iot:Connect
: *
:
をクリックし、追加で以下の項目を設定します。
「許可」 iot:Publish
*
「許可」 iot:Receive
*
「許可」 iot:Subscribe
*
をクリックします。
ポリシーが作成されます。
次に、手順 9~12 で作成したポリシーを、手順 1~8 で作成したモノの証明書へ紐づけます。
→ → の順にクリックし、手順 8 でダウンロードしたデバイス証明書ファイル (xxxxxxxxxx-certificate..pem.crt
) のファイル名の先頭 (xxxxxxxxxx
の部分) をコピーして、 に貼り付けます。作成した証明書が表示されます。
作成した証明書にチェックを入れて、
→ の順にクリックします。
をクリックし、手順 9 ~ 12 で作成したポリシー (例:PubSubToAnyTopic
) にチェックを入れて、 をクリックします。
以上で AWS IoT Core へのモノの登録が完了しました。
Amazon SNS を設定
続いて Amazon SNS を使用してメール通知するルールの作成を行っていきます。
まずは事前に Amazon SNS で通知するトピックを設定しておきます。
AWS の SNS ダッシュボード にアクセスして、 → の順にクリックします。
で「スタンダード」を選択し、 に任意の名前 (例:my-sns-topic
) を入力して、 をクリックします。トピックが作成されます。
作成したトピックの
をクリックします。で「E メール」を選択し、 に通知先のメールアドレスを入力して、 をクリックします。
設定したメールアドレスにサブスクリプションの確認メールが届きます。
届いたメールの
をクリックします。サブスクリプションの確認が行われます。
ここまでで Amazon SNS のトピック設定ができました。
AWS IoT ルールを作成
続いて AWS IoT Core に戻り、設定した SNS のトピックを使用してメール通知するようルールの設定を行います。
AWS IoT コンソール にアクセスします。
→ → → の順にクリックします。
(例:SNS
) を入力し、 をクリックします。に以下の SQL ステートメントを入力し、 をクリックします。
SELECT * FROM 'beamdemo'
ここでは 'beamdemo' という MQTT topic に publish されたメッセージをすべて Amazon SNS へ通知するように設定しています。
をクリックし、「Simple Notification Service (SNS)」を選択し、以下のように設定して、 をクリックします。
- Amazon SNS を設定 で作成した SNS トピック (例:
my-sns-topic
) を選択します。 : - : 「RAW」を選択します。
- : をクリックし、ロール名を入力して、 をクリックします。
- Amazon SNS を設定 で作成した SNS トピック (例:
をクリックします。
AWS IoT ルールが作成されます。
デバイスデータエンドポイントを確認する
最後に、AWS IoT Core へデータを送信するためのカスタムエンドポイントを確認します。
AWS IoT コンソール にアクセスします。
をクリックし、 の に表示されている内容をコピーします。
以上で AWS IoT Core の設定は完了です。
ステップ 2: SORACOM Beam を有効にして MQTT エントリポイントを設定する
証明書ファイルの用意
AWS IoT モノを作成 の手順 8 でダウンロードした以下のファイルを用意します。
- プライベートキーファイル : {ランダム文字列}-private.pem.key
- デバイス証明書 : {ランダム文字列}-certificate.pem.crt
- Amazon ルート CA 1: AmazonRootCA1.pem
SORACOM Beam を有効化する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
以下のように転送先の設定を行います。
- : 「MQTTS」を選択します。
- デバイスデータエンドポイントを確認する の手順 2 でコピーしたエンドポイントをペーストします (例:
(ランダムな値)-ats.iot.ap-northeast-1.amazonaws.com
) : 8883
を入力します。 : - : スイッチをクリックして、オンにします。
をクリックします。
「認証情報を登録」画面が表示されます。
以下の内容を設定して、
をクリックします。- : 任意の文字列を、半角英数字とハイフン、アンダースコアを使って入力します。
- : 「X.509 証明書」を選択します。
{ランダム文字列}-private.pem.key
) の内容を入力します。 : プライベートキーファイル ({ランダム文字列}-certificate.pem.crt
) の内容を入力します。 : デバイス証明書 (- Amazon ルート CA 1 (
AmazonRootCA1.pem
) の内容を入力します。 :
「SORACOM Beam - MQTT 設定」画面に戻ります。
をクリックします。
IoT SIM の Beam の設定が完了しました。
ステップ 3: デバイスからデータを送信する
では、実際にデータを送信してみましょう。
ここでは、オープンソースとして提供されている MQTT メッセージブローカーである mosquitto-clients の mosquitto_pub
を使用して Publish します。
mosquitto-clients のインストール
mosquitto-clients は、サイト からダウンロードおよびインストールしてください。
なお、Raspberry Pi の場合は、以下のコマンドでインストールできます。
$ sudo apt install mosquitto-clients
上記 SIM グループに所属する IoT SIM を利用するデバイスで、以下のコマンドを実行します。
$ mosquitto_pub -d -h beam.soracom.io -t beamdemo -m "Hello, World"
Client (null) sending CONNECT Client (null) received CONNACK (0) Client (null) sending PUBLISH (d0, q0, r0, m1, 'beamdemo', ... (12 bytes)) Client (null) sending DISCONNECT
データが Beam に送信され、Amazon SNS 経由でメールが送信されます。
メールが届いていることを確認します。
上記のコマンドの実行のとおり、Beam の設定を行った SIM グループに属する IoT SIM を利用するデバイスからは、コマンド実行時にデバイス証明書を指定することなく、AWS IoT へデータを送信できています。
なお、Beam を使用しない場合は、AWS IoT Core Developer Guide の Connect a Raspberry Pi or another device にもあるとおり、以下のように証明書ファイル等を指定して送信する必要があります。
$ 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 の設定を変更するだけで対応できます。
このページでは、Beam を経由して AWS IoT にデータを送信し、AWS IoT からは Amazon SNS を経由してメールを送信する方法を説明しました。これ以外にも、S3 や DynamoDB へのデータ保存、Lambda Function の実行等、様々な AWS サービスと連携できますので、ぜひお試しください。
ステップ 4: AWS IoT Core からデータを受信する
次に デバイスで AWS IoT Core からのデータを受信してみましょう。
IoT SIM を利用するデバイスで、以下のコマンドを実行し MQTT topic を subscribe します。ここでは例として
messages/fromAWS
という MQTT topic を subscribe します。$ mosquitto_sub -d -h beam.soracom.io -t messages/fromAWS
Client mosq-FyNf82gCIce1UkNebM sending CONNECT Client mosq-FyNf82gCIce1UkNebM received CONNACK (0) Client mosq-FyNf82gCIce1UkNebM sending SUBSCRIBE (Mid: 1, Topic: messages/fromAWS, QoS: 0, Options: 0x00) Client mosq-FyNf82gCIce1UkNebM received SUBACK Subscribed (mid: 1): 0
AWS IoT コンソール にアクセスします。
をクリックし、 タブで以下の項目を設定します。
messages/fromAWS
です。 : デバイスが subscribe している MQTT topic 名を入力します。ここの例では { "message": "AWS IoT コンソールからの挨拶" }
: デバイスへ送信するメッセージを入力します。デフォルトでは以下のメッセージが設定されています。
をクリックします。
デバイスにメッセージが届き、以下のように表示されます。
Client mosq-FyNf82gCIce1UkNebM received PUBLISH (d0, q0, r0, m0, 'messages/fromAWS', ... (57 bytes)) { "message": "AWS IoT コンソールからの挨拶" }