MENU

Soracom

Users

AWS IoT アダプターを使用する

当ガイドでは、デバイスから送信するデータを AWS IoT Core に集約し、AWS IoT Core のルールエンジンでデータのフィルタリングを行い、Amazon SNS (Simple Notification Service)での通知を行う設定手順を例に、Funnel の AWS IoT アダプターの基本的な使い方を解説します。

AWS IoT Core にはデバイス管理など様々な機能がありますが、当ガイドでは、データの振り分けを行う「ルールエンジン」という機能を利用して Funnel から送ったデータの処理を行います。ルールエンジンの設定を変更すれば、システムの用途に合わせてデータの振り分けとアクションを指定できます。例えば、センサで取得した温度が特定の値を上回ったときに通知を出す、といった用途で利用できます。

当ガイドの前提は以下のとおりです。

  • SORACOM のアカウントを作成済みであること
  • AWS のアカウントを作成済みであること
  • IoT SIM で通信できるデバイスがお手元にあること

ステップ 1: IAM ユーザーを作成する

このガイドでは、 AWS IoT Core に届いたデータをルールエンジンで振り分け、条件に一致したデータがあれば SNS でメール通知します。はじめに SORACOM Funnel から AWS IoT Core へメッセージを Publish するための IAM ユーザーを作成します。 IAM のマネジメントコンソールを開き、左のメニュー画面の [ユーザー] をクリックします。ユーザー画面で [ユーザーの追加] をクリックするとユーザー作成画面が表示されます。ユーザー名は任意ですが、ここでは「funnel-test-user」としています。アクセスの種類については、今回は SORACOM から連携するので [プログラムによるアクセス]を 選択して次に進みます。

iam user

アクセス許可の設定では [既存のポリシーを直接アタッチ]を選択したあと、[ポリシーの作成] をクリックします。

iam user

新しく「ポリシーの作成」画面が表示されるので、それぞれ設定していきます。まず、[サービスの選択]では今回連携したい[IoT]を選択します。[アクション]では、検索ウィンドウに「Publish」と入力してそれを選択します。[リソース]では、[ARN の追加]をクリックして [Region][account][Topic name]をそれぞれ記入或いは[すべて]にチェックを入れた後[追加]をクリックします。なお、当ドキュメントでは例として [Topic name] に myTopic を指定します。すべての設定が終わったら、[ポリシーの確認]をクリックします。

iam user

最後にポリシーの名前を決めます。今回は funnel-test-aws-iot-policy としました。名前を決めて[ポリシーの作成]をクリックしたらポリシーの作成は完了です。

iam user

先ほどの「IAM ユーザー作成」の画面に戻り、右上の更新アイコンを一度クリックした後で、先ほど作成したポリシー名で検索すると、先ほど作成したポリシーが見つかりますので、選択して次に進みます。

iam user

以降はそのまま次に進んでいき、最後に [ユーザーの作成] をクリックすれば IAM ユーザーの作成は完了です。 IAM ユーザーの作成に成功すると、アクセスキー ID とシークレットアクセスキーが入手できますので、メモします。シークレットアクセスキーはアスタリスクで隠れていますが、[表示] をクリックすると見えるようになります。

iam user

ステップ 2: AWS IoT Core のエンドポイントを確認する

AWS IoT Core のマネジメントコンソールを開き、メニュー画面左下の [設定] をクリックします。

setting

  • はじめて AWS IoT Core を使う場合、AWS マネジメントコンソール画面中央の「Get Started」ボタンを押してください。メニュー画面に移動します。

ご自分の AWS アカウントに割り当てられたエンドポイントが表示されますので、内容をメモしてください。例えば、AWS 東京リージョンで AWS IoT Core をセットアップすると以下のようなエンドポイントが割り当てられます。

<ランダムな文字列>.iot.ap-norththeast-1.amazonaws.com

endopoint

ステップ 3: Funnel をセットアップする

上記の設定が終わったら、SORACOM 側の設定に移ります。

認証情報の登録

SORACOM では、証明書や外部クラウドサービスの認証情報などを「認証情報ストア」に登録し、Beam や Funnel の認証に使います。今回は Funnel から AWS IoT Core にアクセスするために、 IAM ユーザーの Credential (Access Key, Secret Access Key)をユーザーコンソールに登録します。手順は以下のとおりです。

  • SORACOM ユーザーコンソールにログインし、画面右上のユーザー名をクリックし「セキュリティ」を選択します。
  • 左のメニューから「認証情報ストア」を選択し、「認証情報を登録」をクリックすると、認証情報の登録画面が表示されます。認証情報 ID に任意の文字列を入力し、概要は必要に応じて入力します。種別は「AWS 認証情報」を選択し、上記で作成した IAM ユーザーのアクセスキー ID とシークレットアクセスキーを入力します。

credetial registration

  • 最後に登録ボタンをクリックすると登録は完了です。

SIM グループ設定

Funnel の設定は SIM グループ単位で行います。AWS IoT Core にデータ転送するよう以下の手順で設定を行います。

  • SIM グループの詳細画面を開きます。 (SIM グループが 1 つもなければ新しいグループを作成してください。)
  • Funnel 詳細設定を開き、以下のように入力します
項目設定内容
ON/OFF スイッチON にセット (設定を有効化)
転送先サービスAWS IoT を選択
転送先 URL{ご自分のAWSアカウントに割り当てられたエンドポイント}/myTopic を入力
認証情報先のステップで登録したものを選択
送信データ形式要件に応じてフォーマットを指定。今回は JSON を選択

funnel group setting

  • 各項目の入力が終わり、「保存」ボタンをクリックすると設定完了です。

ステップ 4: MQTT クライアントを使って動作を確認する

ここまでの設定で、デバイスからデータを Funnel を経由して AWS IoT Core に転送できるようになりました。 動作確認には IoT SIM で通信しているデバイスと AWS IoT Core の MQTT クライアントを使います。

AWS IoT Core のマネジメントコンソールを開き、画面左のメニューから「テスト」を選択し、MQTT クライアントを開きます。この画面では AWS IoT Core に対してデータを受信・送信するテストができます。

※初めて MQTT クライアントにアクセスする場合、操作できる状態になるまでしばらく時間がかかることがあります。その場合は少し待ってからアクセスしてみてください。

MQTT クライアントが表示されたら、「トピックのサブスクリプション」に myTopic/# と入力し、「トピックへのサブスクライブ」をクリックします。これで myTopic という名前のトピック配下に配信されたメッセージすべてを受信できるようになります。

aws mqtt client

これでデータの受信状況を確認できる環境が整いました。 IoT SIM で通信できるデバイスから Funnel 宛てにデータを送信します。

今回は次のような JSON 形式のデータをリクエストボディとして、HTTP で送信してみましょう。

{
  "deviceid": "iot123",
  "temp": 54.98,
  "humidity": 32.43,
  "coords": {
    "latitude": 47.615694,
    "longitude": -122.3359976
  }
}

以下は Raspberry Pi に USB ドングルをセットして HTTP でデータ送信した場合のリクエストとレスポンスの例です。レスポンスとして 204 No Content が返ってくれば、データ送信成功です。他の HTTP レスポンスコードが返ってきた場合には、エラーコードを元に送信データの形式などを確認してください。

pi@raspberrypi:~ $ curl -v -H "Content-Type:application/json" -d "{\"deviceid\" : \"iot123\",    \"temp\" : 54.98, \"humidity\" : 32.43, \"coords\" : { \"latitude\" : 47.615694,  \"longitude\" : -122.3359976 }}" funnel.soracom.io

* Rebuilt URL to: funnel.soracom.io/
* Hostname was NOT found in DNS cache
*   Trying 100.127.65.43...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: funnel.soracom.io
> Accept: */*
> Content-Type:application/json
> Content-Length: 156
>
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 204 No Content
< Date: Thu, 30 Mar 2017 11:12:43 GMT
< Connection: keep-alive
<
* Connection #0 to host funnel.soracom.io left intact

AWS IoT Core マネジメントコンソールの MQTT クライアントで、以下のようにメッセージが表示されれば AWS IoT Core までデータが届いていることが確認できます。 Funnel の設定でプレースホルダーを指定したので、トピックには自動的に IoT SIM の IMSI が入っています。

aws mqtt client

メッセージが受信できない場合は以下のポイントを確認してください。

  • Funnel の設定で登録した転送先 URL がサンプルどおりになっているか
  • 「認証情報ストア」に登録した IAM ユーザーのアクセスキーとシークレットアクセスキー (クレデンシャル)に誤りはないか
  • IoT SIM が Funnel を設定したグループに所属しているか

ステップ 5: Amazon SNS をセットアップする

次にメール通知に使う Amazon SNS をセットアップします。

AWS のドキュメントを参考に SNS トピックの作成とサブスクライブを行ってください。

  • AWS Documentation: SNS トピックの作成
  • AWS Documentation: SNS トピックへのサブスクライブ
  • 今回は SNS トピックからメールで通知を受け取れるよう設定します。サブスクリプション作成の際、プロトコル は 「E メール」を指定し、エンドポイントには通知を受信するメールアドレスを登録してください。トピックへのサブスクライブを行うと確認メールが届きますので、メールにあるリンクをクリックし、登録を完了させてください。

ステップ 6: AWS IoT Core のルールを作成する

続いて、Funnel からのデータを受け取る AWS IoT Core をセットアップします。AWS IoT Core では、IoT デバイスから送られたデータをルールに沿って処理し、アクションを実行します。今回は、センサで取得した温度が特定の値を上回った場合に SNS に通知をするようルールを作成します。

画面左のメニューから [ACT] > [ルール]をクリックし、ルールを作成します。以下、myTopic という名前のトピック配下に配信されたメッセージのうち、「temp」フィールドの値が特定の値を上回ったものだけフィルタリングし、該当するものがあった場合に SNS のメール機能でメッセージ全体を送信する、というルールを設定します。

rule

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

rule_name

ルールクエリステートメントを以下のように設定します。メッセージの「temp」フィールドの値が 30 を超えた場合にメールで通知するようになります。

SELECT * FROM 'myTopic/#' WHERE payloads.temp > 30

rule_query_statement

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

rule_action

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

rule_setting

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

rule_setting_sns

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

create_rule

以上で AWS IoT Core の設定は完了です。 ルールの作成手順は AWS のドキュメントも参考にしてください。

ステップ 7: メールの送信を確認する

ここまでの手順で、Funnel から AWS IoT Core へデータを転送し、SNS で通知を送る準備が整いました。最後に実際にデータを送信して SNS で設定したメールアドレス宛に通知が届くことを確認します。

動作確認 1 と同様の手順で、IoT SIM で通信できるデバイスから Funnel 宛てにデータを送信します。

SNS 経由でメールが届くことを確認します。

funnel test

メールが届かない場合は以下のポイントを確認してください。

  • ルールの設定内容がサンプルどおりになっているか
  • SNS トピックにメールアドレスが登録されているか