MENU

Soracom

Users

AWS IoT と接続する (ユーザーコンソール版)

AWS IoT とは

AWS IoT とは、デバイス(Thing)から安全にデータをクラウドに送信し、また送信されたデータに対してルールベースで各種 AWS サービスを連携させる事ができるプラットフォームです。

image

(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 の設定を開始します。

AWS IoT

まず 管理 > モノ > 作成 から、使用するデバイスをモノ(Thing)として作成します。

AWS IoT

「単一のモノを作成する」をクリックします。

AWS IoT

ここでは、「raspi」という名前にしています。入力後、「次へ」をクリックします。

AWS IoT

モノに証明書を追加します。ここでは「証明書を作成」をクリックし 1-Click 証明書を作成します。

AWS IoT

下記の3つの証明書をダウンロードのリンクよりダウンロードします(後ほど使用します)。 また、「有効化」をクリックして証明書を有効化します。 その後、「ポリシーをアタッチ」をクリックします。

  • このモノの証明書
  • プライベートキー
  • AWS IoT のルート CA (有効化ボタンの上に表示されているリンクから Amazon ルート CA 1 等の CA 証明書をダウンロードします)

通常はここで [ポリシーのアタッチ] をクリックしモノにポリシーを割り当てますが、まだポリシーは未作成のため、ここではそのまま [完了] をクリックします。

AWS IoT

次に 安全性 > ポリシー > ポリシーの作成からデバイスに割り当てるポリシーを作成します。

AWS IoT

今回はどの MQTT topic にも Publish, Subscribe 可能なポリシーを作成します。 下記のように入力して [作成] をクリックします。

  • 名前 : PubSubToAnyTopic
  • アクション : iot:*
  • リソース ARN : *
  • 効果 : 許可をチェック

AWS IoT

次に作成したポリシーを作成したモノの証明書へ紐付けます。

安全性 > 証明書 を選択し、先ほど作成した証明書の右上の […] から [ポリシーのアタッチ] をクリックします。

AWS IoT

先ほど作成した PubSubToAnyTopic を選択し、[アタッチ] をクリックします。

AWS IoT

以上で AWS IoT Core へのモノの登録が完了しました。

続いて SNS を使用してメール通知するルールの作成を行っていきます。

まずは事前に SNS で通知するトピックを設定しておきます。 AWS の SNS ダッシュボード を開き、[トピック] > [新しいトピックを作成]をクリックします。

AWS IoT

トピック名 (ここでは my-sns-topic とします) を入力し、[トピックの作成]をクリックします。

AWS IoT

作成したトピックを選択し、[アクション] > [トピックへのサブスクリプション]をクリックします。

AWS IoT

プロトコルで Email を選択し、エンドポイント ( Email の場合、通知先のメールアドレス) を入力します。入力後、[サブスクリプションの作成]をクリックします。

AWS IoT

しばらくすると、設定したメールアドレスへサブスクリプションの確認メールが届きます。 届いたメールに従い「Confirm subscription」をクリックし、サブスクリプションの確認を行います。

ここまでで SNS のトピック設定ができました。

続いて AWS IoT Core に戻り、設定した SNS のトピックを使用してメール通知するようルールの設定を行います。 [ACT] > [ルールの作成]をクリックし、ルールを作成します。

AWS IoT

ルールの名前と説明を入力します。(ここでは SNS という名前にします)

AWS IoT

ルールクエリステートメントを設定します。 今回は ‘beamdemo’ という MQTT topic に publish されたメッセージを全て SNS へ通知するよう、ルールクエリステートメントに下記のように入力します。

SELECT * FROM 'beamdemo'

AWS IoT

次に「1 つ以上のアクションを設定する」の下の[アクションの追加]をクリックします。

AWS IoT

[SNS プッシュ通知としてメッセージを送信する] を選択し[アクションの設定]をクリックします。

AWS IoT

SNS ターゲットは先ほど作成した SNS トピック (my-sns-topic) を設定します。 メッセージ形式は[RAW]を設定します。 IAM ロールは[新しいロールを作成]をクリックし、ロール名を設定して作成します。 上記設定ができたら、[アクションの追加]をクリックします。

AWS IoT

[ルールの作成]をクリックします。

AWS IoT

最後に、AWS IoT Core へデータを送信するためのカスタムエンドポイントを確認します。 AWS IoT Core の [設定] > カスタムエンドポイントに記載されているエンドポイントをコピーします。(後ほど使用します)

AWS IoT

以上で AWS IoT Core の設定は完了です。

ステップ 2: SORACOM Beam を設定する

証明書ファイルの用意

AWS IoT Core の Thing 設定の際に得られた以下の証明書ファイルを準備します。

  • プライベートキー : (ランダム文字列)-private.pem.key
  • このモノの証明書 : (ランダム文字列)-certificate.pem.crt
  • AWS IoT のルート CA : Amazon ルート CA 1 など

Beam の設定

SORACOM Beam の設定を行います。SORACOM Beam の設定は SORACOM のユーザーコンソールのグループ設定から行います。 ユーザーコンソールにログインして、グループタブを開きます。開いた画面で、追加ボタンをクリックし、グループを作成します。(ここでは、グループ名「AWS IoT」としています。)

AWS IoT

一覧から作成したグループをクリックします。

AWS IoT

設定画面内にある「SORACOM Beam 設定」の「+」ボタンをクリックして、「MQTT エントリポイント」を選択します。

AWS IoT

「MQTT エントリポイント」を選択します。

AWS IoT

以下のように転送先の設定を行います。

  • プロトコル: MQTTS
  • ホスト名: 先ほどコピーした AWS IoT Core のカスタムエンドポイントをペーストします ((ランダムな値)­-ats.iot.ap-northeast-1.amazonaws.com のような文字列)
  • ポート番号: 8883

AWS IoT

次に、証明書を入力します。 既に登録されていれば候補が表示されますが、未登録の場合は「+」ボタンから追加します。

AWS IoT

認証情報 ID は任意の文字列を、半角英数字とハイフン、アンダースコアを使って入力します。 先ほどダウンロードしたファイルの内容をコピー & ペーストします。それぞれ以下のファイルとなります。 (いずれのファイルもテキストファイルですので、テキストエディタなどで内容を表示させ、コピーしてください)

  • 秘密鍵のテキストボックス:(ランダム文字列)-private.pem.key の内容
  • 証明書のテキストボックス:(ランダム文字列)-certificate.pem.crt の内容
  • CA 証明局のテキストボックス:Amazon ルート CA の内容

AWS IoT

以上で、 Beam の設定が完了しました。

ステップ 3: デバイスからデータを送信する

では、実際にデータを送信してみましょう。 IoT SIM のグループを先ほど作成したグループに所属させます。 AWS IoT

上記グループに所属する 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 経由でメールを確認できます。

AWS IoT

上記のコマンドの実行のとおり、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 サービスと連携できますので、是非お試しください。