SORACOM Beam の MQTT エントリポイント を利用して、AWS IoT Core へデバイスからデータを送信したり (下図の赤線)、デバイスに AWS IoT Core からのデータを受信したりできます (下図の青線)。ここでは、(赤線に相当する) デバイスで Beam の MQTT エントリポイントを経由して AWS IoT にデータを送信し、AWS IoT からは Amazon SNS を経由してメールを送信する方法を説明します。また、(青線に相当する) AWS IoT Core から送信したデータをデバイスで受信します。
AWS IoT Core と接続する場合は、SORACOM Beam の代わりに SORACOM Funnel を利用すると、より簡単に実装できます。詳しくは、AWS IoT アダプターを使用する を参照してください。
AWS IoT とは
AWS IoT とは、デバイス (Thing) から安全にデータをクラウドに送信し、また送信されたデータに対してルールベースで各種 AWS サービスを連携させることができるプラットフォームです。
デバイス (Thing) からクラウドへのデータ送信の方法には 2 種類用意されています。
- MQTTS : X.509 証明書を使用した TLS (Transport Layer Security) のクライアント認証
- HTTPS : IAM ユーザーやロール・Cognito を利用した認証
これ以外にも、AWS IoT Core を利用すると S3 や DynamoDB へのデータ保存、AWS Lambda の関数の実行など、様々な AWS サービスと連携できます。ぜひお試しください。
ステップ 1: AWS IoT を設定する
AWS IoT Core にモノ (Thing) を作成する
使用するデバイスをモノ (Thing) として、AWS IoT に作成します。操作手順について詳しくは、AWS IoT Core にモノ (Thing) を作成する を参照してください。
具体的には以下のように設定します。
項目 | 説明 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
任意の文字列を入力します。例: raspi | ||||||||||||||||
|
Amazon SNS のトピックを作成する
続いて Amazon SNS を使用してメールを送信する仕組みを作成します。操作手順について詳しくは、Amazon SNS のトピックを作成する を参照してください。
具体的には以下のように設定します。
項目 | 説明 |
---|---|
「スタンダード」を選択します。 | |
任意の文字列を入力します。例: my-sns-topic | |
|
なお、ここで作成した Amazon SNS トピックの ARN を、これ以降、${sns_topic_arn} と表記します。例: arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:my-sns-topic
AWS IoT Core のルールを作成する
このページで説明する機能を体験するために、AWS IoT Core に送信されたデータに応じて SNS トピックを呼び出すルールを作成します。操作手順について詳しくは、AWS IoT Core のルールを作成する を参照してください。
具体的には以下のように設定します。
項目 | 説明 |
---|---|
任意の文字列を入力します。例: SNS | |
「2016-03-23」を選択します。 | |
'beamdemo' という MQTT トピックに Publish (送信) されたメッセージをすべて Amazon SNS へ通知するように、以下の SQL を入力します。
| |
「Simple Notification Service (SNS)」を選択します。 | |
${sns_topic_arn} を選択します。例: Amazon SNS のトピックが見つからない場合は、リージョンを確認してください。AWS IoT Core と Amazon SNS のリージョンは同一である必要があります。 | |
「RAW」を選択します。 | |
新しいロールを作成します。
|
AWS IoT Core のデフォルトのデータエンドポイントを確認する
AWS IoT Core へデータを送信するためのデフォルトのデータエンドポイントを確認します。詳しくは、AWS IoT Core のデフォルトのデータエンドポイントを確認する を参照してください。
このエンドポイントをこれ以降、${default_endpoint} と表記します。例: xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com
ステップ 2: SORACOM Beam をセットアップする
認証情報ストアに X.509 証明書を登録する
Beam から AWS IoT に登録したモノを利用するために、モノ (Thing) を作成する で作成した証明書を、SORACOM ユーザーコンソールに登録します。
具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: aws-iot | |
「X.509 証明書」を選択します。 | |
プライベートキーファイル (例: xxx...xxx-private.pem.key ) の内容を貼り付けます。(*1) | |
デバイス証明書 (例: xxx...xxx-certificate.pem.crt ) の内容を貼り付けます。(*1) | |
ルート CA 証明書の Amazon ルート CA 1 (例: AmazonRootCA1.pem ) の内容を貼り付けます。(*1) |
- (*1) ファイル名ではなく、テキストエディタなどで ファイルの内容をコピーし 貼り付けてください。
SORACOM Beam を有効化する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
以下の項目を設定します。
項目 説明 任意の文字列を入力します。わかりやすい名前を設定します。例: AWS IoT → 「Standard」を選択します。 → 「MQTTS」を選択します。 → ${default_endpoint} を入力します。例: xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com
→ 「8883」を入力します。 スイッチをクリックして、オンにします。 認証情報ストアに X.509 証明書を登録する で登録した X.509 証明書を選択します。例: aws-iot をクリックします。
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 の設定を変更するだけで対応できます。
ステップ 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 コンソールからの挨拶" }