「クラウドリソースアダプタ サービス」SORACOM FunnelでAWS IoT Coreと連携する
PaaSやSaaSの活用はいいことづくめのように見えます。しかし、いざ実際にデバイスとクラウドサービスと連携をしようとすると、デバイス側にSDK(Software Development Kit;クラウドサービスを利用するための認証プロセスやプロトコル変換を行ってくれるライブラリ群)のセットアップが必要となります。クラウドから提供されている最新の機能を存分に利用できる反面、セットアップ可能な機種やスペックに条件が存在します。
SORACOMでは、さまざまなクラウドサービスと連携する仕組みも用意されています。代表的なものが「SORACOM Funnel」(「ソラコム ファネル」と読みます)です。SORACOM Funnelは、いわばプロキシサーバのように動作します。これにより、デバイス側にSDKが入っていなくとも、SORACOM Funnelで対応しているクラウドサービスにデータを送ることができます。
今回はAWSが提供しているIoT向けのフルマネージド・サービス「AWS IoT Core」へデータを送り、同じくAWSが提供しているフルマネージドのモニタリングサービス「Amazon CloudWatch」でモニタリングしてみます。
注意点
本章ではSORACOMアカウントの他、AWSアカウントも必要となるため準備してください。(AWSアカウントの作成等の準備については解説しません。ご了承ください)
また、本章ではSORACOM Air SIMやSORACOM FunnelなどのSORACOMサービスの他、AWSにおける費用も必要です。各サービスの利用料金を確認するようお願いします。
1:AWS IoT Core設定
まず、AWS IoT Coreの設定を行います。AWS IoT Core上に、トピックに対応する「ACT(ルールとアクション)」を作成するだけです。
通常、AWS IoT Coreを利用する場合はAWS IoT Core上に「モノ」や「証明書」を作成する必要があります。SORACOM Funnelと連携する場合はこうした設定が不要になるのも、SORACOM Funnelを利用する利点です。
アクションの作成
AWS IoT Coreコンソールの左側のメニューから[ACT]をクリックして、ルールを作成します。
名前と説明は任意で入力します。今回は名前をSensorToCloudWatch、説明をSend sensor data to CloudWatchとしました。
属性に*、トピックフィルターにsensorを指定します。
[アクションの追加]を押し、「CloudWatch にメッセージデータを送信する」を選びます。
メトリクス名Distance、メトリクス名前空間Sensor、単位None、値${payloads.distance_cm}を指定します。
新しいロールの作成をクリックし、任意の名前(今回はAWSIoTtoCloudWatchとしました)を指定し、[新しいロールの作成]をクリックします。
IAMロール名から作成したロールを選択し、アクションの追加を押します。
最後に[ルールの作成]をクリックすると、ルールが作成されます。これでsensorのトピックにデータが着信すると、CloudWatchへデータが送信される設定ができました。
テストとCloudwatch側の確認
AWS IoT Coreコンソールの左側のメニューから[テスト]をクリックし、[発行]からテストデータを送ってみます。
トピックをsensorに、データは以下の通り設定して[トピックに発行]をクリックします。
{"payloads":{"distance_cm":100}}
これで、AWS IoT Coreのルール経由でCloudWatchにデータが送信されました。確認してみます。
CloudWatchコンソールの左側のメニューから、メトリクスをクリックします。すると「Sensor」というカスタム名前空間ができているはずです。
SensorをクリックしていくとDistanceが見つかります。これをグラフに追加しましょう。
先ほど送信した100という数値が描画されています。
これでAWS IoT Coreの設定が完了しました。
2:AWS IAMユーザ作成
AWS上にAWS IoT Coreへデータを送信する専用のユーザ(IAMユーザ)を作成し、適切な権限を付与します。
- AWSマネージメントコンソールでAWS IAMのコンソールを開きます。
- ユーザ名には「AWSIoT」などの分かりやすい名前を付けます。APIキーが必要なので「プログラムによるアクセス」のチェックボックスを付け、次のステップへ進みます(図29)。
- 「既存のポリシーを直接アタッチ」を選び、「iotdata」と検索窓に入れ「AWSIoTDataAccess」にチェックボックスを入れ、次のステップに進みます(図30)。
- 確認画面で、ユーザの作成をクリックします。
- 完了画面では、アクセスキーIDと、シークレットアクセスキーをどこかに保存しておきます。CSVファイルをダウンロードしてもいいです(図31)。
これで専用ユーザの作成と設定は完了です。
3:SORACOM Funnel設定
次はSORACOM Funnelの設定です。主に2つあり、1つは転送先クラウドサービス設定と、もう1つが転送先クラウドサービスに接続するための認証情報です。基本的な操作はSORACOM Harvestと同じになります。
- [Menu]>[SIMグループ]をクリックすると、SIMグループ一覧が表示されます。[追加]からSIMグループを作成します。名前は任意で構いません。
-
先ほど作成したSIMグループをクリックします。その中の[SORACOM Funnel 設定]を開いて、まずスイッチをONにします。すると各種情報が入力できるようになるので、以下の通り設定します。
- 転送先サービス:AWS IoT
- 転送先URL:https://data.iot.ap-northeast-1.amazonaws.com/sensor
- 認証情報の右の[+]ボタンを押します(図32)。
- 先ほど作成したIAMユーザの認証情報を入力します(図33)。
- [登録]をクリックしたあと、[保存]をクリックします。
- [Menu]>[SIM管理]をクリックすると、SIM一覧が表示されます。
- Wio LTEに取り付けているSIMにチェックを付けて、>[操作]>[所属グループ変更]を選択します。
- 新しい所属グループを、先ほど作成したグループを選択してから[グループ変更]をクリックします。
以上でSORACOM Funnelの設定は完了です。
4:スケッチの作成
前回利用したスケッチ「ma2shita/grove-ultrasonic-ranger_soracom-harvest.ino」を改造して、SORACOM Funnelに送信できるようにします。
Arduino IDEを起動し、前回使用したスケッチを読み込んだ後、2カ所変更を行います。
9行目を以下の通り変更します。データの送信間隔を60秒に変更しています。
//旧 #define INTERVAL (3000) //新 #define INTERVAL (60000)
50行目を以下の通り変更します。送信先をSORACOM HarvestからSORACOM Funnelに変更しています。
//旧
connectId = Wio.SocketOpen("harvest.soracom.io", 8514, WIOLTE_UDP);
//新
connectId = Wio.SocketOpen("funnel.soracom.io", 23080, WIOLTE_UDP);
その後はWio LTEをDFUモードにし、スケッチの書き込みを行います。
以上でWio LTEに超音波測距センサーで計測した距離を、SORACOM Funnelに送信するプログラムの書き込みが完了しました。
5:動作確認
Wio LTEの電源をON(通常モード)で起動して動作確認をしてみましょう。TeraTermもしくはArduinoIDEのシリアルモニタを使用します。
Receive:200と表示されるようになれば、SORACOM Harvestへデータが送信されたことになります。
この200はHTTPコードに対応しています。
また、CloudWatchを見てみるとデータが描画されている様子が見えます。
このように、SORACOM Harvestにデータが送信できるようになれば、送信先の変更をするだけでSORACOM Funnelを通じてさまざまなクラウドサービスと連携することも可能になります。
