Soracom

Users

ドキュメント
Home ドキュメント SORACOM Beam Amazon Web Service (AWS) に送信する

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 を利用した認証

SORACOM Beam の MQTT エントリポイントを利用して、AWS IoT Core へデバイスからデータを送信したり、デバイスに AWS IoT Core からのデータを受信したりできます。本記事では、MQTTS を使用してデータを投入し SNS を使用してメール通知します。また AWS IoT Core から送信したデータをデバイスにて受信します。

AWS IoT AWS IoT

AWS IoT Core と接続する方法としては SORACOM Beam の他、SORACOM Funnel をご利用いただくことで、より簡単に実装できます。併せてご検討ください。

ステップ 1: AWS IoT を設定する

AWS IoT モノを作成

使用するデバイスをモノ (Thing) として、AWS IoT に作成します。

  1. AWS IoT コンソール にアクセスします。

  2. [管理][すべてのデバイス][モノ] の順にクリックします。

    AWS IoT AWS IoT

  3. [モノを作成] をクリックします。

    AWS IoT AWS IoT

  4. [1 つのモノを作成] を選択し、[次へ] をクリックします。

    AWS IoT AWS IoT

  5. [モノの名前] に名前を入力し、[次へ] をクリックします。

    ここでは、「raspi」という名前にしています。

    AWS IoT AWS IoT

    モノに証明書を追加します。

  6. [新しい証明書を自動生成 (推奨)] を選択し、[次へ] をクリックします。

    AWS IoT AWS IoT

    「証明書にポリシーをアタッチ - オプション」画面が表示されます。通常はここでポリシーを選択し、証明書にポリシーを割り当てます。

  7. ここではポリシーは未作成のため、ポリシーをアタッチせずに [モノの作成] をクリックします。

    AWS IoT AWS IoT

  8. 以下の 4 つのファイルをダウンロードするために、対応する [ダウンロード] をクリックし、[完了] をクリックします。

    これらの証明書は、後ほど使用します。

    • デバイス証明書
    • パブリックキーファイル
    • プライベートキーファイル
    • Amazon ルート CA 1

    AWS IoT AWS IoT

    モノが作成されます。次に、デバイス (モノ) に割り当てるポリシーを作成します。

  9. [管理][セキュリティ][ポリシー][ポリシーを作成] の順にクリックします。

    AWS IoT AWS IoT

    今回はどの MQTT topic にも Publish 可能なポリシーを作成します。

  10. 各項目を設定します。

    • [ポリシー名] : 任意の名前 (例: PubSubToAnyTopic)
    • [ポリシー効果] : 「許可」
    • [ポリシーアクション] : iot:Connect
    • [ポリシーリソース] : *

    AWS IoT AWS IoT

  11. [新しいステートメントを追加]をクリックし、追加で以下の項目を設定します。

    [ポリシー効果][ポリシーアクション][ポリシーリソース]
    「許可」iot:Publish*
    「許可」iot:Receive*
    「許可」iot:Subscribe*

    AWS IoT AWS IoT

  12. [作成] をクリックします。

    ポリシーが作成されます。

    次に、手順 9~12 で作成したポリシーを、手順 1~8 で作成したモノの証明書へ紐づけます。

  13. [管理][セキュリティ][証明書] の順にクリックし、手順 8 でダウンロードしたデバイス証明書ファイル (xxxxxxxxxx-certificate..pem.crt) のファイル名の先頭 (xxxxxxxxxx の部分) をコピーして、[証明書を見つける] に貼り付けます。

    作成した証明書が表示されます。

  14. 作成した証明書にチェックを入れて、[アクション][ポリシーをアタッチ] の順にクリックします。

    AWS IoT AWS IoT

  15. [AWS IoT ポリシー を選択] をクリックし、手順 9 ~ 12 で作成したポリシー (例: PubSubToAnyTopic) にチェックを入れて、[ポリシーをアタッチ] をクリックします。

    AWS IoT AWS IoT

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

Amazon SNS を設定

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

まずは事前に Amazon SNS で通知するトピックを設定しておきます。

  1. AWS の SNS ダッシュボード にアクセスして、[トピック][トピックの作成] の順にクリックします。

    AWS IoT AWS IoT

  2. [タイプ] で「スタンダード」を選択し、[名前] に任意の名前 (例: my-sns-topic) を入力して、[トピックの作成] をクリックします。

    AWS IoT AWS IoT

    トピックが作成されます。

  3. 作成したトピックの [サブスクリプションの作成] をクリックします。

    AWS IoT AWS IoT

  4. [プロトコル] で「E メール」を選択し、[エンドポイント] に通知先のメールアドレスを入力して、[サブスクリプションの作成] をクリックします。

    AWS IoT AWS IoT

    設定したメールアドレスにサブスクリプションの確認メールが届きます。

  5. 届いたメールの [Confirm subscription] をクリックします。

    サブスクリプションの確認が行われます。

    AWS IoT AWS IoT

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

AWS IoT ルールを作成

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

  1. AWS IoT コンソール にアクセスします。

  2. [管理][メッセージのルーティング][ルール][ルールを作成] の順にクリックします。

    AWS IoT AWS IoT

  3. [ルール名] (例: SNS) を入力し、[次へ] をクリックします。

    AWS IoT AWS IoT

  4. [SQL ステートメント] に以下の SQL ステートメントを入力し、[次へ] をクリックします。

    SELECT * FROM 'beamdemo'
    

    ここでは 'beamdemo' という MQTT topic に publish されたメッセージをすべて Amazon SNS へ通知するように設定しています。

    AWS IoT AWS IoT

  5. [アクション 1] をクリックし、「Simple Notification Service (SNS)」を選択し、以下のように設定して、[次へ] をクリックします。

    • [SNS トピック]: Amazon SNS を設定 で作成した SNS トピック (例: my-sns-topic) を選択します。
    • [メッセージ形式]: 「RAW」を選択します。
    • [IAM ロール]: [新しいロールを作成] をクリックし、ロール名を入力して、[作成] をクリックします。

    AWS IoT AWS IoT

  6. [作成] をクリックします。

    AWS IoT AWS IoT

    AWS IoT ルールが作成されます。

デバイスデータエンドポイントを確認する

最後に、AWS IoT Core へデータを送信するためのカスタムエンドポイントを確認します。

  1. AWS IoT コンソール にアクセスします。

  2. [設定] をクリックし、[デバイスデータエンドポイント][エンドポイント] に表示されている内容をコピーします。

    AWS IoT 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 の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Beam 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. [+設定を追加する][MQTT エントリポイント] の順にクリックします。

    AWS IoT AWS IoT

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

    • [プロトコル]: 「MQTTS」を選択します。
    • [ホスト名]: デバイスデータエンドポイントを確認する の手順 2 でコピーしたエンドポイントをペーストします (例: (ランダムな値)-ats.iot.ap-northeast-1.amazonaws.com)
    • [ポート番号]: 8883 を入力します。
    • [証明書]: スイッチをクリックして、オンにします。

    AWS IoT AWS IoT

  4. [+認証情報を追加] をクリックします。

    AWS IoT AWS IoT

    「認証情報を登録」画面が表示されます。

  5. 以下の内容を設定して、[登録] をクリックします。

    • [認証情報 ID]: 任意の文字列を、半角英数字とハイフン、アンダースコアを使って入力します。
    • [種別]: 「X.509 証明書」を選択します。
    • [秘密鍵 (KEY)]: プライベートキーファイル ({ランダム文字列}-private.pem.key) の内容を入力します。
    • [証明書 (CERT)]: デバイス証明書 ({ランダム文字列}-certificate.pem.crt) の内容を入力します。
    • [CA 証明局]: Amazon ルート CA 1 (AmazonRootCA1.pem) の内容を入力します。

    AWS IoT AWS IoT

    「SORACOM Beam - MQTT 設定」画面に戻ります。

  6. [保存] をクリックします。

  7. IoT SIM が所属するグループを切り替えます。

    IoT SIM の Beam の設定が完了しました。

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

では、実際にデータを送信してみましょう。

ここでは、オープンソースとして提供されている MQTT メッセージブローカーである mosquitto-clients の mosquitto_pub を使用して Publish します。

mosquitto-clients のインストール

mosquitto-clients は、サイト からダウンロードおよびインストールしてください。

なお、Raspberry Pi の場合は、以下のコマンドでインストールできます。

$ sudo apt install mosquitto-clients
  1. 上記 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 経由でメールが送信されます。

  2. メールが届いていることを確認します。

    AWS IoT AWS IoT

上記のコマンドの実行のとおり、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 からのデータを受信してみましょう。

  1. 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
    
  2. AWS IoT コンソール にアクセスします。

  3. [MQTT テストクライアント] をクリックし、[トピックに公開する] タブで以下の項目を設定します。

    • [トピック名]: デバイスが subscribe している MQTT topic 名を入力します。ここの例では messages/fromAWS です。
    • [メッセージペイロード]: デバイスへ送信するメッセージを入力します。デフォルトでは以下のメッセージが設定されています。
      {
        "message": "AWS IoT コンソールからの挨拶"
      }
      

    AWS IoT AWS IoT

  4. [発行] をクリックします。

    デバイスにメッセージが届き、以下のように表示されます。

    Client mosq-FyNf82gCIce1UkNebM received PUBLISH (d0, q0, r0, m0, 'messages/fromAWS', ... (57 bytes))
    {
      "message": "AWS IoT コンソールからの挨拶"
    }