このページでは、デバイスから送信するデータを AWS IoT Core に集約し、AWS IoT Core のルールエンジンでデータのフィルタリングを行い、Amazon SNS (Simple Notification Service) での通知を行う設定手順を例に、Funnel の AWS IoT アダプターの基本的な使いかたを説明します。
AWS IoT Core にはデバイス管理など様々な機能がありますが、このページでは、データの振り分けを行う「ルールエンジン」という機能を利用して、Funnel から送信したデータを処理します。ルールエンジンの設定を変更すれば、システムの用途に合わせてデータの振り分けとアクションを指定できます。
たとえば、センサーで取得した温度が特定の値を上回ったときに通知を出す、といった用途で利用できます。
操作を始める前に準備が必要です (クリックして確認してください)
(1) SORACOM のアカウントを作成して IoT SIM を申し込む / デバイスを購入する
デバイスと、そのデバイスで利用できる IoT SIM を用意します。
SORACOM アカウントの作成方法、IoT SIM の申し込み方法、およびデバイスの購入方法について詳しくは、SORACOM の利用を始める を参照してください。
(2) AWS のアカウントを用意する
AWS のアカウントを用意してください。
準備完了このページでは、デバイスから Funnel を経由して AWS IoT Core にデータを送信します。AWS IoT Core では、Funnel から送信されたデータをルールエンジンでフィルタリングを行い、Amazon SNS (Simple Notification Service) を利用して、メールを送信します。
ステップ 1: IAM ロールを作成する
AWS IoT Core へメッセージを Publish するための IAM ロールを作成します。
IAM コンソール にアクセスし、 → の順にクリックして、 をクリックします。
→ の順にクリックし、Funnel を利用する IoT SIM のカバレッジタイプにあわせて に以下のいずれかを入力します。
- 日本カバレッジ:
762707677580
- グローバルカバレッジ:
950858143650
- 日本カバレッジ:
にチェックを入れ、 に任意の文字列を入力します。
に入力した文字列は、これ以降、${external_id} と表記します。例:External-ID-Mej73gfhrFhimGKb
外部 ID の詳細は、AWS の AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法 - AWS Identity and Access Management を参照してください。
をクリックします。
「許可を追加」画面が表示されます。
をクリックします。
別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。
ここからは「ポリシーの作成」画面でポリシーを作成します
「ポリシーの作成」画面の操作が終わったら、
が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。以下の項目を設定します。
項目 説明 をクリックして、 をクリックします。 に「Publish」と入力し、 にチェックを入れます。 → → の順にクリックします。
「ARN の追加」画面が表示されます。
、 、 をそれぞれ入力または にチェックを入れて、 をクリックします。
「ポリシーの作成」画面に戻ります。
SORACOM Funnel 設定の
にプレースホルダー (#{imsi}
、#{simId}
、#{imei}
) を入力する場合は、 に*
を入力します。たとえば、 の末尾をmyTopic/#{imsi}
にする場合は、myTopic/*
を入力してください。このmyTopic
を以降、${topic_name} と表記します。→ の順にクリックします。
に AWS IAM ポリシーの名前を入力し、 をクリックします。
AWS IAM ポリシーが作成され、ポリシー画面が表示されます。
ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。
作成した AWS IAM ポリシーが表示されます。
作成した AWS IAM ポリシーにチェックを入れて、
をクリックします。に IAM ロールの名前を入力して、 をクリックします。
ロール画面に戻ります。
作成した IAM ロールの名前をクリックし、
をメモします。この ARN は、これ以降、${iam_role_arn} と表記します。例:
arn:aws:iam::XXXXXXXXXXXX:role/funnel-test-aws-iot-role
ステップ 2: AWS IoT Core のエンドポイントを確認する
AWS IoT コンソール にアクセスして、メニュー画面左下の をクリックします。
はじめて AWS IoT Core を使う場合、AWS マネジメントコンソール画面中央の
をクリックしてください。メニュー画面に移動します。設定画面が表示されます。
の をメモします。
エンドポイントは、これ以降、${device_data_endpoint} と表記します。例:
<ランダムな文字列>.iot.ap-norththeast-1.amazonaws.com
以下のようなエンドポイントは、非推奨とされています。利用しないでください。
data.iot.[リージョン名].amazonaws.com
Funnel から AWS IoT へデータを送信する場合は、上記のエンドポイント (
<ランダムな文字列>.iot.ap-norththeast-1.amazonaws.com
) を利用してください。詳細は、AWS IoT Core がお客様に提供する Symantec の認証局無効化の対応方法 | Amazon Web Services ブログ を参照してください。Funnel が対応する TLS バージョンは 1.2 です
では、TLS 1.2 に対応するセキュリティポリシーを選択してください。たとえば、「IoTSecurityPolicy_TLS13_1_2_2022_10」は TLS 1.2 に対応しています。
ステップ 3: Funnel をセットアップする
IoT SIM を利用するデバイスから送信されたデータを、Funnel の AWS IoT アダプターを利用して、AWS IoT Core に転送するための設定を、ユーザーコンソールで行います。
認証情報ストアに AWS IAM ロール認証情報を登録する
ユーザーコンソールの 認証情報ストア に、Funnel から AWS IoT Core にデータを送信するための認証情報を登録します。認証情報は、${iam_role_arn} および ${external_id} です。
認証情報ストアの「認証情報を登録」画面を表示します。
詳しくは、認証情報を登録する を参照してください。
以下の項目を設定します。
項目 説明 認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials
「AWS IAM ロール認証情報」を選択します。 ${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/funnel-test-aws-iot-role
${external_id} を入力します。例: External-ID-Mej73gfhrFhimGKb
をクリックします。
Funnel を有効化する
IoT SIM に対して Funnel を有効化します。
Funnel の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
各項目を設定します。
項目 説明 「AWS IoT」を選択します。 「${device_data_endpoint}/${topic_name}/#{imsi}」を入力します。例: <ランダムな文字列>.iot.ap-norththeast-1.amazonaws.com/myTopic/#{imsi}
。#{imsi}
はプレースホルダー (*1) です。認証情報ストアに AWS IAM ロール認証情報を登録する で登録した認証情報を選択します。例: AWS-IAM-role-credentials
ここでは、「JSON」を選択します。SORACOM Funnel を有効化する を参照してください。 について詳しくは、 に#{simId}
のプレースホルダーを指定した場合や、メッセージに SIM ID を含める場合は、オンにします。- (*1)
#{imsi}
、#{simId}
、#{imei}
) を指定できます。プレースホルダーは、Funnel でデータが転送される際に、それぞれ IoT SIM の IMSI、SIM ID、IMEI に置き換えられます。 には、プレースホルダー (
- (*1)
をクリックします。
IoT SIM の Funnel の設定が完了しました。
ステップ 4: MQTT テストクライアントを使って動作を確認する
ここまでの設定で、デバイスから Funnel を経由して AWS IoT Core にデータを転送できるようになりました。
動作確認のために、IoT SIM を利用するデバイスから MQTT を使用して AWS IoT Core にデータを送信します。
AWS の MQTT テストクライアントを設定する
送信されたデータは、AWS の MQTT テストクライアントを使って受信します。
AWS IoT コンソール にアクセスして、メニュー画面の をクリックします。
MQTT テストクライアント画面が表示されます。
初めて MQTT テストクライアントにアクセスする場合、操作できる状態になるまでしばらく時間がかかることがあります。その場合は少し待ってからアクセスし直してください。
に「${topic_name}/#」(例:myTopic/#
) と入力し、 をクリックします。${topic_name} 配下 (例:
myTopic
配下) に配信されたメッセージが表示されるようになります。これで、MQTT テストクライアントで受信データを確認できます。
IoT SIM を利用するデバイスから Funnel 宛てにデータを送信する
以下のような JSON 形式のデータをリクエストボディとして、HTTP で Funnel に送信します。
{
"deviceid": "iot123",
"temp": 54.98,
"humidity": 32.43,
"coords": {
"latitude": 47.615694,
"longitude": -122.3359976
}
}
IoT SIM を利用するデバイスから Funnel にデータを送信します。
$ curl -v funnel.soracom.io \ -H "Content-Type: application/json" \ -d '{ "deviceid": "iot123", "temp": 54.98, "humidity": 32.43, "coords": { "latitude": 47.615694, "longitude": -122.3359976 } }'
* 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
上記のように、レスポンスとして
HTTP/1.1 204 No Content
が返ってくれば、データ送信に成功しています。他の HTTP レスポンスコードが返ってきた場合には、レスポンスコードを元に、送信データの形式などを確認してください。
AWS IoT コンソール の MQTT テストクライアントの に、メッセージが表示されることを確認します。
Funnel の設定でプレースホルダー (
#{imsi}
) を指定すると、トピックには IoT SIM の IMSI が入ります。
メッセージが受信できないときは以下の点を確認してください
ステップ 1: IAM ロールを作成する の手順 2 で指定したアカウント ID が対応するカバレッジタイプと、Funnel を有効化した IoT SIM のカバレッジタイプが一致していること
認証情報ストアに AWS IAM ロール認証情報を登録する で認証情報ストアに登録した と が、それ以前に設定した値 (${iam_role_arn}、および ${external_id}) と一致していること
Funnel を有効化する で指定した がサンプルどおりになっていること
特に
myTopic
を任意の文字列に変更する場合は、このページで設定するすべてのmyTopic
を同じ文字列に置き換える必要があります。Funnel にデータを送信するデバイスで利用する IoT SIM が、Funnel を設定したグループに所属していること
ステップ 5: Amazon SNS をセットアップする
Amazon SNS の SNS トピックからメールで通知を受け取れるように設定します。
SNS トピック
Amazon SNS コンソール にアクセスして、以下の設定の SNS トピックを作成してください。詳しくは、Amazon SNS トピックを作成する を参照してください。
項目 | 説明 |
---|---|
「スタンダード」を選択します。 | |
SNS トピックの名前を入力します。my-sns-topic | に入力した文字列は、これ以降、${sns_topic} と表記します。例:
SNS サブスクリプション
同様に Amazon SNS コンソール にアクセスして、以下の設定の SNS サブスクリプションを作成してください。詳しくは、Amazon SNS トピックへサブスクライブする を参照してください。
項目 | 説明 |
---|---|
SNS トピック で作成した SNS トピックの ARN を入力します。 | |
「E メール」を選択します。 | |
通知を受信するメールアドレスを入力します。 |
なお、SNS サブスクリプションを作成すると、
に入力したメールアドレスに、確認メールが送信されます。確認メールに表示されているリンクをクリックして、登録を完了させてください。ステップ 6: AWS IoT Core のルールを作成する
AWS IoT Core では、IoT デバイスから送信されたデータは、ルールに従って処理され、アクションが実行されます。今回は、${topic_name} 配下 (例: myTopic
配下) に配信されたメッセージのうち、「temp」フィールド (センサーで取得した温度) の値が特定の値を上回った場合に、Amazon SNS に通知するルールを作成します。
AWS IoT コンソール にアクセスし、 → の順にクリックして、 をクリックします。
「ルールのプロパティを指定」画面が表示されます。
を入力して、 をクリックします。
「SQL ステートメントを設定」画面が表示されます。
に以下の内容を入力して、 をクリックします。
SELECT * FROM 'myTopic/#' WHERE payloads.temp > 30
- (*)
myTopic/#
は、「${topic_name}/#」を入力してください。
この設定で、${topic_name} 配下 (例:
myTopic
配下) に配信されたメッセージの「temp」フィールドの値が 30 を超えた場合に、Amazon SNS に通知されます。「ルールアクションをアタッチ」画面が表示されます。
- (*)
で「Simple Notification Service (SNS)」を選択し、以下の項目を設定します。
項目 説明 SNS トピック で作成した SNS トピックの ARN を選択します。 「RAW」を選択します。 をクリックします。
「ロールを作成」画面が表示されます。
に IAM ロールの名前を入力して、 をクリックします。
「ルールアクションをアタッチ」画面に戻ります。
→ の順にクリックします。
ルールの作成手順について詳しくは、デバイスデータを他のサービスにルーティングする AWS IoT ルールの作成 を参照してください。
ステップ 7: メールの送信を確認する
ここまでの手順で、デバイスから Funnel にデータを送信すると、AWS IoT Core に転送され、Amazon SNS を経由してメールが送信される仕組みが整いました。最後にデバイスからデータを送信して、Amazon SNS で設定したメールアドレスにメールが届くことを確認します。
IoT SIM を利用するデバイスから Funnel にデータを送信します。
temp
の値が 30 を超えていることを確認してください。$ curl -v funnel.soracom.io \ -H "Content-Type: application/json" \ -d '{ "deviceid": "iot123", "temp": 54.98, "humidity": 32.43, "coords": { "latitude": 47.615694, "longitude": -122.3359976 } }'
* 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
上記のように、レスポンスとして
HTTP/1.1 204 No Content
が返ってくれば、データ送信に成功しています。他の HTTP レスポンスコードが返ってきた場合には、レスポンスコードを元に、送信データの形式などを確認してください。
SNS サブスクリプション で に指定したメールアドレスに、以下のようなメールが送信されていることを確認します。
メールが届かない場合は
以下のポイントを確認してください。
- ルールの設定内容が、上記の説明どおりになっていること
- 確認のポイントは AWS IoT のトラブルシューティング を参照してください。特に、CloudWatch Logs でログを出力すると、トラブルシューティングに役立ちます。
- SNS サブスクリプション の に有効なメールアドレスが登録されていること
temp
の値が 30 を超えていること