Soracom

Users

ドキュメント
Home ドキュメント SORACOM Funnel Getting Started

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

このページでは、デバイスから送信するデータを 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 ロールを作成します。

  1. IAM コンソール にアクセスし、[アクセス管理][ロール] の順にクリックして、[ロールを作成] をクリックします。

    IAM ロール作成 IAM ロール作成

  2. [AWS アカウント][別の AWS アカウント] の順にクリックし、Funnel を利用する IoT SIM のカバレッジタイプにあわせて [アカウント ID] に以下のいずれかを入力します。

    • 日本カバレッジ: 762707677580
    • グローバルカバレッジ: 950858143650

    IAM ロール作成 IAM ロール作成

  3. [外部 ID を要求する] にチェックを入れ、[外部 ID] に任意の文字列を入力します。

    [外部 ID] に入力した文字列は、これ以降、${external_id} と表記します。例: External-ID-Mej73gfhrFhimGKb

    IAM ロール作成 IAM ロール作成

  4. [次へ] をクリックします。

    「許可を追加」画面が表示されます。

  5. [ポリシーの作成] をクリックします。

    IAM ロール作成 IAM ロール作成

    別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。

    ここからは「ポリシーの作成」画面でポリシーを作成します

    「ポリシーの作成」画面の操作が終わったら、[ポリシーの作成] が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。

  6. 以下の項目を設定します。

    項目説明
    [サービス][サービスの選択] をクリックして、[IoT] をクリックします。
    [アクション][フィルタアクション] に「Publish」と入力し、[Publish] にチェックを入れます。

    IAM ロール作成 IAM ロール作成

  7. [リソース][指定][ARN の追加] の順にクリックします。

    IAM ロール作成 IAM ロール作成

    「ARN の追加」画面が表示されます。

  8. [Region][Account][Topic name] をそれぞれ入力または [すべて] にチェックを入れて、[追加] をクリックします。

    IAM ロール作成 IAM ロール作成

    「ポリシーの作成」画面に戻ります。

    SORACOM Funnel 設定の [転送先 URL] にプレースホルダー (#{imsi}#{simId}#{imei}) を入力する場合は、[Topic name]* を入力します。たとえば、[転送先 URL] の末尾を myTopic/#{imsi} にする場合は、myTopic/* を入力してください。この myTopic を以降、${topic_name} と表記します。

  9. [次のステップ: タグ][次のステップ: 確認] の順にクリックします。

  10. [名前] に AWS IAM ポリシーの名前を入力し、[ポリシーの作成] をクリックします。

    IAM ロール作成 IAM ロール作成

    AWS IAM ポリシーが作成され、ポリシー画面が表示されます。

  11. ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。

  12. [] をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。

    IAM ロール作成 IAM ロール作成

    作成した AWS IAM ポリシーが表示されます。

  13. 作成した AWS IAM ポリシーにチェックを入れて、[次へ] をクリックします。

  14. [ロール名] に IAM ロールの名前を入力して、[ロールを作成] をクリックします。

    IAM ロール作成 IAM ロール作成

    ロール画面に戻ります。

  15. 作成した IAM ロールの名前をクリックし、[ARN] をメモします。

    この ARN は、これ以降、${iam_role_arn} と表記します。例: arn:aws:iam::XXXXXXXXXXXX:role/funnel-test-aws-iot-role

    IAM ロール作成 IAM ロール作成

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

  1. AWS IoT コンソール にアクセスして、メニュー画面左下の [設定] をクリックします。

    はじめて AWS IoT Core を使う場合、AWS マネジメントコンソール画面中央の [Get Started] をクリックしてください。メニュー画面に移動します。

    設定画面が表示されます。

  2. [デバイスデータエンドポイント][エンドポイント] をメモします。

    エンドポイントは、これ以降、${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} です。

  1. 認証情報ストアの「認証情報を登録」画面を表示します。

    詳しくは、認証情報を登録する を参照してください。

  2. 以下の項目を設定します。

    項目説明
    [認証情報 ID]認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials
    [種別]「AWS IAM ロール認証情報」を選択します。
    [ロール ARN]${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/funnel-test-aws-iot-role
    [外部 ID]${external_id} を入力します。例: External-ID-Mej73gfhrFhimGKb

    credential registration credential registration

  3. [登録] をクリックします。

Funnel を有効化する

IoT SIM に対して Funnel を有効化します。

Funnel の設定はグループに対して行います

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

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

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

  2. スイッチをクリックして「ON」にします。

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

    項目説明
    [転送先サービス]「AWS IoT」を選択します。
    [転送先 URL]「${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 を有効化する を参照してください。
    [SIM ID を追加][転送先 URL]#{simId} のプレースホルダーを指定した場合や、メッセージに SIM ID を含める場合は、オンにします。
    • (*1) [転送先 URL] には、プレースホルダー (#{imsi}#{simId}#{imei}) を指定できます。プレースホルダーは、Funnel でデータが転送される際に、それぞれ IoT SIM の IMSI、SIM ID、IMEI に置き換えられます。

    funnel group setting funnel group setting

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

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

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

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

ここまでの設定で、デバイスから Funnel を経由して AWS IoT Core にデータを転送できるようになりました。

動作確認のために、IoT SIM を利用するデバイスから MQTT を使用して AWS IoT Core にデータを送信します。

AWS の MQTT テストクライアントを設定する

送信されたデータは、AWS の MQTT テストクライアントを使って受信します。

  1. AWS IoT コンソール にアクセスして、メニュー画面の [MQTT テストクライアント] をクリックします。

    AWS MQTT テストクライアント AWS MQTT テストクライアント

    MQTT テストクライアント画面が表示されます。

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

  2. [トピックのフィルター] に「${topic_name}/#」(例: myTopic/#) と入力し、[サブスクライブ] をクリックします。

    ${topic_name} 配下 (例: myTopic 配下) に配信されたメッセージが表示されるようになります。

    AWS MQTT テストクライアント AWS MQTT テストクライアント

    これで、MQTT テストクライアントで受信データを確認できます。

IoT SIM を利用するデバイスから Funnel 宛てにデータを送信する

以下のような JSON 形式のデータをリクエストボディとして、HTTP で Funnel に送信します。

{
  "deviceid": "iot123",
  "temp": 54.98,
  "humidity": 32.43,
  "coords": {
    "latitude": 47.615694,
    "longitude": -122.3359976
  }
}
  1. 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 レスポンスコードが返ってきた場合には、レスポンスコードを元に、送信データの形式などを確認してください。

  2. AWS IoT コンソール の MQTT テストクライアントの [サブスクリプション] に、メッセージが表示されることを確認します。

    Funnel の設定でプレースホルダー (#{imsi}) を指定すると、トピックには IoT SIM の IMSI が入ります。

    aws mqtt client aws mqtt client

メッセージが受信できないときは以下の点を確認してください
  • ステップ 1: IAM ロールを作成する の手順 2 で指定したアカウント ID が対応するカバレッジタイプと、Funnel を有効化した IoT SIM のカバレッジタイプが一致していること

  • 認証情報ストアに AWS IAM ロール認証情報を登録する で認証情報ストアに登録した [ロール ARN][外部 ID] が、それ以前に設定した値 (${iam_role_arn}、および ${external_id}) と一致していること

  • Funnel を有効化する で指定した [転送先 URL] がサンプルどおりになっていること

    特に myTopic を任意の文字列に変更する場合は、このページで設定するすべての myTopic を同じ文字列に置き換える必要があります。

  • Funnel にデータを送信するデバイスで利用する IoT SIM が、Funnel を設定したグループに所属していること

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

Amazon SNS の SNS トピックからメールで通知を受け取れるように設定します。

SNS トピック

Amazon SNS コンソール にアクセスして、以下の設定の SNS トピックを作成してください。詳しくは、Amazon SNS トピックを作成する を参照してください。

項目説明
[タイプ]「スタンダード」を選択します。
[名前]SNS トピックの名前を入力します。[名前] に入力した文字列は、これ以降、${sns_topic} と表記します。例: my-sns-topic

SNS サブスクリプション

同様に Amazon SNS コンソール にアクセスして、以下の設定の SNS サブスクリプションを作成してください。詳しくは、Amazon SNS トピックへサブスクライブする を参照してください。

項目説明
[トピック ARN]SNS トピック で作成した SNS トピックの ARN を入力します。
[プロトコル]「E メール」を選択します。
[エンドポイント]通知を受信するメールアドレスを入力します。

なお、SNS サブスクリプションを作成すると、[エンドポイント] に入力したメールアドレスに、確認メールが送信されます。確認メールに表示されているリンクをクリックして、登録を完了させてください。

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

AWS IoT Core では、IoT デバイスから送信されたデータは、ルールに従って処理され、アクションが実行されます。今回は、${topic_name} 配下 (例: myTopic 配下) に配信されたメッセージのうち、「temp」フィールド (センサーで取得した温度) の値が特定の値を上回った場合に、Amazon SNS に通知するルールを作成します。

  1. AWS IoT コンソール にアクセスし、[メッセージのルーティング][ルール] の順にクリックして、[ルールを作成] をクリックします。

    「ルールのプロパティを指定」画面が表示されます。

  2. [ルール名] を入力して、[次へ] をクリックします。

    「SQL ステートメントを設定」画面が表示されます。

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

    SELECT * FROM 'myTopic/#' WHERE payloads.temp > 30
    
    • (*) myTopic/# は、「${topic_name}/#」を入力してください。

    この設定で、${topic_name} 配下 (例: myTopic 配下) に配信されたメッセージの「temp」フィールドの値が 30 を超えた場合に、Amazon SNS に通知されます。

    「ルールアクションをアタッチ」画面が表示されます。

  4. [アクション 1] で「Simple Notification Service (SNS)」を選択し、以下の項目を設定します。

    項目説明
    [SNS トピック]SNS トピック で作成した SNS トピックの ARN を選択します。
    [メッセージ形式]「RAW」を選択します。

  5. [新しいロールを作成] をクリックします。

    「ロールを作成」画面が表示されます。

  6. [ロール名] に IAM ロールの名前を入力して、[作成] をクリックします。

    「ルールアクションをアタッチ」画面に戻ります。

  7. [次へ][作成] の順にクリックします。

ルールの作成手順について詳しくは、デバイスデータを他のサービスにルーティングする AWS IoT ルールの作成 を参照してください。

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

ここまでの手順で、デバイスから Funnel にデータを送信すると、AWS IoT Core に転送され、Amazon SNS を経由してメールが送信される仕組みが整いました。最後にデバイスからデータを送信して、Amazon SNS で設定したメールアドレスにメールが届くことを確認します。

  1. 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 レスポンスコードが返ってきた場合には、レスポンスコードを元に、送信データの形式などを確認してください。

  2. SNS サブスクリプション[エンドポイント] に指定したメールアドレスに、以下のようなメールが送信されていることを確認します。

    funnel test funnel test

メールが届かない場合は

以下のポイントを確認してください。

  • ルールの設定内容が、上記の説明どおりになっていること
  • SNS サブスクリプション[エンドポイント] に有効なメールアドレスが登録されていること
  • temp の値が 30 を超えていること