SORACOM Funnel AWS IoT アダプタの効果的な使い方

2017/04/14

IoTはデバイス・通信・クラウドといった多くの技術要素から構成されていますが、日々進化するテクノロジに追従するのは並大抵のことではないことは、皆さんもよくご存じだと思います

その中でもソラコムは特に通信において少しでも皆さんの負担を軽減するため、今日ご紹介する SORACOM Funnel および AWS IoT アダプタ をサービスしています

こちらでは SORACOM Funnel AWS IoT アダプタAWS IoT を効果的に使う方法をご紹介します

12/21: SORACOM Funnel での設定を追記しました

SORACOM Funnel のおさらいと AWS IoT アダプタ

SORACOM Funnel※とは、デバイスからのデータを 特定のクラウドサービスに直接転送するサービス です

※読み方は「ソラコム ファネル」ですね

4/6にリリースされました SORACOM Funnel AWS IoT アダプタ によって、AWSが提供しているIoT向けクラウドサービス “AWS IoT” へ直接転送できるようになりました!

これによって SORACOM Funnel が対応している「直接データを転送できるようになったクラウドサービス」は4種類になりました

AWS IoTとは?

IoT向けのデータ収集とデバイス制御用のAWSのサービスです MQTTSやHTTP RESTでアクセスができ、収集したデータを各種AWSサービスへと転送します

AWS IoTのアーキテクト例 AWS IoTのアーキテクト例

大きい図を開く

Amazon Kinesis StreamsおよびAmazon Kinesis FirehoseとAWS IoTの違い

  • Amazon Kinesis Streams
    • 大量のデータ通信向きのサービス
    • データ通信量の大小にかかわらず、ストリームの存在で課金される
    • Kinesis Streamsからのデータ取得にAWS LambdaやAmazon Kinesis Client Libraryを使ったプログラム(と実行場所)を準備する必要がある
  • Amazon Kinesis Firehose
    • Kinesis Streamsの特徴を持ちつつ、AWS IoT ルール&アクションのようにAWSのサービスにデータロードが簡単に行える
    • 東京リージョンでは利用不可能 (2017/4/14時点)
    • 振り分け先のAWSサービスがAWS IoTより少ない

このような面を検討しつつ、アダプタを選定していきます

SORACOM Funnel AWS IoTアダプタを使ってみる

SORACOM Funnel と AWS IoT を使い、フルマネージド NoSQLサービス “Amazon DynamoDB” にデータを格納するところまでをご紹介します

SORACOM Funnelにデータを送信すると、AWS IoTの to_dynamodb/# トピックを経由してAmazon DynamoDBへ保存されます

全体構成 全体構成

大きい図を開く

※AWS IoTからAmazon SNSを呼び出しメール送信をする例は Getting Started でご紹介しています

手順

  1. AWS認証情報の確認
    • AWSアカウントに設定されてるアクセスキー及びシークレットアクセスキー(クレデンシャル)を確認&入手
  2. Amazon DynamoDBの設定
    • テーブルを作成
  3. AWS IoTの設定
    • ルールを作成
  4. SORACOM Funnelの設定
    • AWS認証情報の埋め込み
    • AWS IoTのエンドポイント(転送先URL)の設定

最後に確認していきます

1. AWS認証情報の確認

AWSコンソールからIAMのページを開き、AWSアカウントに設定されてるアクセスキー及びシークレットアクセスキー(クレデンシャル)を入手してください

AWS認証情報の確認 AWS認証情報の確認

2. Amazon DynamoDBの設定

AWSコンソールからDynamoDBのページを開き、 テーブルの作成 をクリックしてDynamoDBテーブルを作成していきます

DynamoDBテーブル作成開始 DynamoDBテーブル作成開始

DynamoDBテーブルは、下記の通りに設定し 作成 をクリックします

  • テーブル名: testing_awsiot
  • プライマリキー
    • パーティションキー: uuid
    • 型: 文字列
    • ソートキーの追加: チェックしない
  • テーブル設定
    • デフォルト設定の使用: チェックする
DynamoDBテーブル設定 DynamoDBテーブル設定

下図のようにテーブルの作成が開始されます。作成完了までに5~10分程度かかりますので、待ちます

DynamoDBテーブル作成中 DynamoDBテーブル作成中

以上でDynamoDBの設定は完了です

3. AWS IoTの設定

AWSコンソールからAWS IoTのページを開き、 Get started をクリックしてAWS IoTの管理画面を開きます

AWS IoT Get started AWS IoT Get started

AWS IoTの Settings から Endpoint を控えておきます

AWS IoT Endpoint AWS IoT Endpoint

AWS IoTの Rules を開き、 Create a rule をクリックします

AWS IoT Create rule AWS IoT Create rule

Create a ruleは、下記の通りに設定し Add action をクリックします

  • Name: to_dynamodb
  • Description: (空)
  • Using SQL version: 2016-03-23
  • Attribute: *, timestamp() + '-' + newuuid() as uuid
  • Topic filter: to_dynamodb/#
  • COndition: (空)
AWS IoT Create a rule1 AWS IoT Create a rule1 AWS IoT Create a rule2 AWS IoT Create a rule2

Select an actionは、DynamoDBv2 を選択し Configure action をクリックします

AWS IoT Select an action1 AWS IoT Select an action1 AWS IoT Select an action2 AWS IoT Select an action2

Configure actionは、下記の通り設定し Create a new role をクリックします

  • Table name: testing_awsiot
AWS IoT Configure action AWS IoT Configure action

下図の画面が表示されるので、下記の通り設定し Create a new role をクリックします

  • IAM role name: testing-awsiot-put-to-dynamodb
AWS IoT Configure action AWS IoT Configure action

改めて IAM role name を先ほど作成した testing-awsiot-put-to-dynamodb を選択した後、 Add action をクリックします

AWS IoT Configure action AWS IoT Configure action

下図のように DynamoDBへのアクションが追加されたことが確認出来たら Create rule をクリックします

以上でAWS IoTの設定は完了です

4. SORACOM Funnelの設定

まず以下の情報がそろっていることを確認します

  • AWSアカウント
    • アクセスキー
    • シークレットアクセスキー
  • AWS IoT
    • カスタムエンドポイント (AWS IoT の管理画面で確認できます。本例では YOUR_AWSIOT_ENDPOINT.iot.us-west-2.amazonaws.com としています)

あと決めておく事としては 送信先のトピック です 今回は my_topic/bar/各SIMのIMSI というように設計します

4-1. 認証情報(AWS アカウントのアクセスキー)を SORACOM に保管

まず AWS IoT に接続するために必要な認証情報を SORACOM に保管します

メニューの [セキュリティ] > [認証情報ストア] > [認証情報を登録]

AWSアカウントの情報を入力し、登録します

この保管した認証情報を、次の SORACOM Funnel で指定して利用できるようにします

4-2. SORACOM Funnel の設定

SORACOM Funnelの設定画面から、上記情報を各自入力します 認証情報のところは、先ほど設定した認証情報を選んでください

非常に簡素ですが、SORACOM Funnelの設定はこれで完了です

SORACOM Funnel 設定 SORACOM Funnel 設定

設定のポイント

転送先URL: 転送先URLは https:// + AWS IoT カスタムエンドポイント + 送信先のトピック になります そのため今回は

https://YOUR_AWSIOT_ENDPOINT.iot.us-west-2.amazonaws.com/my_topic/bar/#{imsi}

このような形です

転送先URLの中の #{...} について 紹介している #{imsi}プレースホルダ機能 といって、 SORACOM Funnel 内部で自動的に送信元のSIMのIMSIに置き換えられます LPWAでも使えるプレースホルダがありますが、詳しくは SORACOM Funnel Getting start をご覧ください

確認してみる

確認の方法は SORACOM Funnel AWS IoT アダプターを使用してデータを送信する / 確認方法 でご紹介している方法と全く同じです

実際には下図の通りに Amazon DynamoDB にデータが入っていることが確認できます

Amazon DynamoDBでデータを確認する Amazon DynamoDBでデータを確認する

SORACOM Beamとの違い・使い分け

ソラコムではサービス開始直後から SORACOM Beam という SORACOM Funnel に類似したデータ転送サービスも利用可能です

AWS IoTはMQTTSで通信できるため、SORACOM BeamのMQTTSプロトコル変換機能をつかってもAWS IoTにアクセスすることができます。それぞれの使い分けは以下の通りです

  • SORACOM Funnelを使ったほうがいい場合
    • データ収集目的 (デバイス→クラウドの通信のみで、下りの通信が無い)
    • MQTT実装が不可能な場合
  • SORACOM Beamを使ったほうがいい場合
    • SORACOM Funnelが対応していない送信先へのデータ転送
    • AWS IoTのDevice Shadowのような、下りの通信(クラウド→デバイス)が必要

あとがき

最近ではモデム側にHTTPクライアントが実装されており、ATコマンドを経由してHTTP POSTができたりするため、UART制御さえできればHTTP通信ができる可能性も広がってきました

クラウドへデータ送信するにはMQTTやHTTPといったアプリケーションプロトコルやそれよりも下のレイヤーのTCP/UDPを使った実装が必須で、しかも各種クラウド・サービスに合わせた認証・ペイロード調整、加えてセキュアにデータを送るためにはTLS化と、通信にまつわる実装がデバイス開発の速度を遅らせてしまいます

デバイス側における通信の面倒ごとは極力減らし、本来のセンサーなどのハードウェア制御に集中できるお手伝いをこれからも行っていきます!

ソラコム 松下


Posted by max at 2017/04/14