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種類になりました
- Amazon Kinesis Streams アダプタ
- Amazon Kinesis Firehose アダプタ
- Microsoft Azure Event Hubs アダプタ
- AWS IoT アダプタ 4/6 NEW!!
AWS IoTとは?
IoT向けのデータ収集とデバイス制御用のAWSのサービスです
MQTTSやHTTP RESTでアクセスができ、収集したデータを各種AWSサービスへと転送します

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 でご紹介しています
手順
- AWS認証情報の確認
- AWSアカウントに設定されてるアクセスキー及びシークレットアクセスキー(クレデンシャル)を確認&入手
- Amazon DynamoDBの設定
- テーブルを作成
- AWS IoTの設定
- ルールを作成
- SORACOM Funnelの設定
- AWS認証情報の埋め込み
- AWS IoTのエンドポイント(転送先URL)の設定
最後に確認していきます
1. AWS認証情報の確認
AWSコンソールからIAMのページを開き、AWSアカウントに設定されてるアクセスキー及びシークレットアクセスキー(クレデンシャル)を入手してください

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

DynamoDBテーブルは、下記の通りに設定し 作成 をクリックします
- テーブル名:
testing_awsiot
- プライマリキー
- パーティションキー:
uuid
- 型: 文字列
- ソートキーの追加: チェックしない
- パーティションキー:
- テーブル設定
- デフォルト設定の使用: チェックする

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

以上でDynamoDBの設定は完了です
3. AWS IoTの設定
AWSコンソールからAWS IoTのページを開き、 Get started をクリックしてAWS IoTの管理画面を開きます

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

AWS IoTの Rules を開き、 Create a 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: (空)


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


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

下図の画面が表示されるので、下記の通り設定し Create a new role をクリックします
- IAM role name:
testing-awsiot-put-to-dynamodb

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

下図のように DynamoDBへのアクションが追加されたことが確認出来たら Create rule をクリックします
以上でAWS IoTの設定は完了です
4. SORACOM Funnelの設定
まず以下の情報がそろっていることを確認します
- AWSアカウント
- アクセスキー
- シークレットアクセスキー
- AWS IoT
- カスタムエンドポイント (AWS IoT の管理画面で確認できます。本例では
YOUR_AWSIOT_ENDPOINT.iot.us-west-2.amazonaws.com
としています)
- カスタムエンドポイント (AWS IoT の管理画面で確認できます。本例では
あと決めておく事としては 送信先のトピック です
今回は my_topic/bar/各SIMのIMSI というように設計します
4-1. 認証情報(AWS アカウントのアクセスキー)を SORACOM に保管
まず AWS IoT に接続するために必要な認証情報を SORACOM に保管します
メニューの [セキュリティ] > [認証情報ストア] > [認証情報を登録]

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

この保管した認証情報を、次の SORACOM Funnel で指定して利用できるようにします
4-2. SORACOM Funnel の設定
SORACOM Funnelの設定画面から、上記情報を各自入力します
認証情報のところは、先ほど設定した認証情報を選んでください
非常に簡素ですが、SORACOM Funnelの設定はこれで完了です

設定のポイント
転送先URL:
転送先URLは https:// + AWS IoT カスタムエンドポイント + 送信先のトピック になります
そのため今回は
https://YOUR_AWSIOT_ENDPOINT.iot.us-west-2.amazonaws.com/to_dynamodb/#{imsi}
このような形です
転送先URLの中の #{...}
について
紹介している #{imsi}
は プレースホルダ機能 といって、 SORACOM Funnel 内部で自動的に送信元のSIMのIMSIに置き換えられます
LPWAでも使えるプレースホルダがありますが、詳しくは SORACOM Funnel Getting start をご覧ください
確認してみる
確認の方法は SORACOM Funnel AWS IoT アダプターを使用してデータを送信する / 確認方法 でご紹介している方法と全く同じです
実際には下図の通りに 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化と、通信にまつわる実装がデバイス開発の速度を遅らせてしまいます
デバイス側における通信の面倒ごとは極力減らし、本来のセンサーなどのハードウェア制御に集中できるお手伝いをこれからも行っていきます!
ソラコム 松下