【作業】ステップ 2-1: クラウド連携 / SORACOM Funnel + AWS IoT Core 編

本格的なデータ収集 IoT システムの構築としてクラウド連携を学びます。
ここでは AWS IoT Core を活用した構成です。

今回は Wio LTE からのデータを 「クラウド・アダプタ サービス」 SORACOM Funnel で中継し、AWS IoT Core に送ります。 ※ AWS 以降の環境は運営側で準備済みです。

step4a Cloud / architecture1

AWS IoT Core に送信したデータは、最初は catch_all/ というトピック(メールボックスのようなものです)に送信します。トピックのデータ着信をトリガーに awsiotcore-post_to_slack-max_catch_all という AWS Lambda 関数が起動します。

この AWS Lambda 関数は #max_catch_all という、テスト用に用意した Slack チャンネルと、一覧で見やすくしている Ruby 製 Web アプリに送られるようになっており、 Wio LTE のデータは最終的に Slack もしくは Ruby 製 Web アプリで確認できます。

また、後半では SORACOM Funnel の設定を変更して AWS IoT Core に送信するトピックを filter/# に変更します。AWS IoT Core 上でデータの判定を行ったうえで、条件に一致した時のみ AWS Lambda 関数 awsiotcore-post_to_slack-max_filter の起動するようにしています。

利用するサービスの解説

AWS IoT Core とは

IoT デバイス向けのメッセージ処理基盤です。
フルマネージド・サービスであり、構築や運用の手間は AWS がすべて行ってくれます。

1 台のデバイスから利用することができ、また、万を超えるデバイスからのメッセージを受け付けることができます。課金も完全従量制になっています。
またルールに応じて AWS の各サービスに接続できます。

AWS Lambda とは

Python や Node.js で書かれたプログラムコードを保存しておくと、特定の条件(トリガー)でプログラムを実行してくれる仕組みです。
例えば Amazon S3 にオブジェクトが作られた時や、 CloudWatch のイベントに連動させることが可能であり、 AWS IoT Core にも対応しています。
フルマネージド・サービスであり、プログラムを実行するための環境構築や運用の手間は AWS がすべて行ってくれます。

最初に. Wio LTE の電源を OFF にする

ここから作業になります

Wio LTE の microUSB ケーブルを抜き、電源を OFF にしてください

※いきなり抜いてOKです。また、すでに OFF になっている場合は次に進んでください

1. SORACOM へ認証情報を保管する

1-1. SORACOM ユーザーコンソール で [右上のユーザー名] > [セキュリティ] をクリック

soracom-menu-security

1-2. [認証情報ストア] > [認証情報を登録] をクリック

soracom-cred-store

1-3. 認証情報を登録する画面では下記の通り入力して [保存] をクリック

soracom-cred-save

※進捗表から入手する情報は、本来ご自身でご用意いただくことになります。実際の準備方法は AWS IoT Core の準備 をご覧ください

2. SORACOM Funnel の設定をする

2-1. SORACOM ユーザーコンソールで 左上 [Menu] > [SIM 管理] をクリック

※ 画面が切り替わらない場合は、左上の SORACOM ロゴをクリックしてください。

2020ui/go-subscribers

2-2. SIM 管理画面で、先ほど作成した SIM グループ名をクリック

2020ui/go-sim-group-config/sim-group-name1

2-3. SIM グループ設定画面で [SORACOM Funnel 設定] をクリック

2020ui/open-soracom-funnel-config

2-4. SORACOM Funnel の設定でスイッチを “ON” にしてから下記の通り入力して [保存] をクリック

soracom-funnel

以上で SORACOM ユーザーコンソール上での作業は終了です。

3. スケッチの確認と Wio LTE の電源を ON にして通常モードで動かす

Wio LTE に電源を入れ、動かしてください。

この時、Wio LTE には 1-3 で作成されたスケッチが書き込まれている必要があります。そうでなければ 1-3 を参考に、スケッチを再度書き込んでください。

4. 確認

AWS IoT Core 上でのデータ着信は、運営側で行います。受講者番号を運営にお伝えください。

※ 標準では送信間隔が60秒です。早めたい場合は 1-2 のやってみようを参考に、 INTERVAL を例えば 5000 (= 5秒) に変更して、Wio LTE に書込んでみてください。

※ うまく動かなかったら(トラブルシュート)

まず SORACOM Harvest を確認してみてください。
SORACOM Harvest にデータが表示されている: データ送信自体は成功しています。 SORACOM Funnel の設定不備の可能性があるため、以下のトラブルシュートを確認してください。
SORACOM Harvest でデータが確認できない: Wio LTE の接続を確認してください。

また、 SORACOM Harvest 以外にトラブルシュートで利用可能なツールは「Arduino IDE のシリアルモニター」「SORACOM ユーザーコンソール上の SIM のログ」です。

データは送られているが AWS IoT Core 上で確認できない

5. 送信先を変更し、クラウド上での条件付けを行う

温度が 28℃ を超えたら Slack にデータが送信されるようにしてみます。

5-1. 「4 確認」 まで終了していることを確認する

5-2. SORACOM Funnel 設定

5-2-1. 先ほど設定した SORACOM Funnel のグループを開きます

5-2-2. SORACOM Funnel の設定を下記の通りに入力(変更)し、保存してください

5-3. 確認

温湿度センサーに息を吹きかける等で温度が 28℃を超えるようにしてください。

AWS IoT Core 上でのデータ着信は、運営側で行います。受講者番号を運営にお伝えください。

以上で本章は終了です

達成状況を運営表へご記入ください。

AWS IoT Core の準備

ここからは本日使用した AWS IoT Core の環境を自分で作りたい場合の手順です。

SORACOM Funnel を利用する際の AWS IoT Core の設定

SORACOM Funnel から AWS IoT Core を利用するための準備は AWS IAM の設定 (専用の仮想ユーザーの作成) で完了します。
AWS IoT Core 上でモノやポリシーの他、X.509 証明書 の作成/設定は不要です。

AWS セットアップ内容

上記の設定を aws-cli で行う場合の手順

## 環境構築
$ aws iam create-user --user-name awsiotcore-dataaccess-for-funnel-handson
$ aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/AWSIoTDataAccess --user-name awsiotcore-dataaccess-for-funnel-handson
$ aws iam create-access-key --user-name awsiotcore-dataaccess-for-funnel-handson

## 環境終了
$ aws iam list-access-keys --user-name awsiotcore-dataaccess-for-funnel-handson
$ aws iam delete-access-key --user-name awsiotcore-dataaccess-for-funnel-handson --access-key-id $OLD_ACCESS_KEY_ID
$ aws iam detach-user-policy --policy-arn arn:aws:iam::aws:policy/AWSIoTDataAccess --user-name awsiotcore-dataaccess-for-funnel-handson
$ aws iam delete-user --user-name awsiotcore-dataaccess-for-funnel-handson

AWS IoT Core 上のルールについて

AWS IoT Core のルールは 2 つ設定されています。

1つ目は監視対象のトピックに着信したメッセージは全て指定されたアクション (Lambda 関数の実行) をするようにしています。

2つめは監視対象のトピックに着信したメッセージが条件に一致した時に、アクションが実行されるようになっています。

step4a Cloud / awsiotcore-rule

awsiotcore-post_to_slack-max_* Lambda 関数について

基になる Lambda 関数は post_to_slack_on_aws-lambda.py で公開しています。
この関数一つで SLACK_CHANNEL に基づき Slack チャンネルに送信できるようになっています。

重要な部分は以下の通りです。この Lambda 関数は AWS IoT Core のルールから、メッセージが着信した毎に実行されます。

def lambda_handler(event, context):
    slack_message = {
        'channel': SLACK_CHANNEL,
        'text': str(event['payloads'])
    }
    req = Request(HOOK_URL, json.dumps(slack_message))

Unified Endpoint について

本ハンズオンでは Unified Endpoint という機能を使い、 SORACOM Harvest と SORACOM Funnel へ 同時に データを送信しています。使い方としては unified.soracom.io にデータを送信するだけで、SORACOM Beam/Funnel/Harvest へのデータ送信が制御できるようになります。

従来は SORACOM Harvest への送信は harvest.soracom.io 、そして SORACOM Funnel への送信は funnel.soracom.io と、デバイス上での送信先切り替えが必要でしたが、Unified Endpoint により SORACOM プラットフォーム上で変更できるようになりました。

詳細はブログをご覧ください。