SORACOM Users

Getting Started

SORACOM Funnel AWS IoT アダプターを使用してデータを送信する

はじめに

SORACOM Funnel(以下、Funnel)は、デバイスからのデータを特定のクラウドサービスに直接転送するアダプターです。

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

overview

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

サービスの詳細は 「SORACOM Funnelサービス概要ページ」 を参照ください。より詳細な技術仕様は「SORACOM Funnel機能詳細」をご覧ください。

ここではセットアップから動作確認までの流れを以下のステップに沿って解説します。

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

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

AWS IoT Core のエンドポイントの確認

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

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

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

Funnel のセットアップ

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

認証情報の登録

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

credetial registration

SIM グループ設定

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

項目 設定内容
ON/OFF スイッチ ON にセット(設定を有効化)
転送先サービス AWS IoT を選択
転送先 URL {ご自分のAWSアカウントに割り当てられたエンドポイント}/myTopic/ を入力
認証情報 先のステップで登録したものを選択
送信データ形式 要件に応じてフォーマットを指定。今回は JSON を選択
funnel group setting

プレースホルダー機能

Funnel の 転送先 URL にはプレースホルダーを使うことができます。プレースホルダーを使うと IMSI, IMEI, LoRa デバイス ID, Sigfox デバイス ID を URL に自動的に入れ込むことができます。利用できるプレースホルダーは以下の通りです。通信方法によって利用できるものが異なる点に注意してください。

動作確認1

ここまでの設定で、デバイスからデータを 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

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

Amazon SNS のセットアップ

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

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

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 のドキュメントも参考にしてください。

動作確認2

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

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

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

funnel test

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

利用例

Funnel の AWS IoT アダプタの長所は、デバイスから送信したデータを Funnel のエントリポイントに送信するだけで、AWS IoT Core によって様々な AWS サービスとの連携が可能となる点です。また、TCP/UDP/HTTP のプロトコルに対応しており、デバイスやシステムの要件に合ったプロトコルで通信できます。さらに、Funnel の設定項目の中では、転送先URL として#{imsi}, #{imei}を変数として URL のパスに埋め込むことができます。この機能を使うと、SIM の IMSI や IMEI を自動的にトピック名とすることが可能となり、特定の SIM やデバイスのみフィルタリングをかけてデータ処理を実行することも簡単に行うことができます。

具体的な利用例としては以下のようなものが挙げられます。

なお、Funnel はデータをクラウドサービスにアップロードする機能に特化しており、デバイス宛の通信(下り通信)には対応していません。AWS IoT Core の Thing Shadow 機能を使う場合には SORACOM Beam を利用してください。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Mosaic

SORACOM Napter

SORACOM Orbit

SORACOM Peek

SORACOM LTE-M Button

GPS マルチユニット SORACOM Edition

IoT 体験キット

Device

サービス機能詳細

Developer Tools

Design Patterns

pagetop