はじめに
AWSサービス上で地図画像を作成できるようにしたので、次は地図画像に乗せるデータをAWSサービスに取り込みたい。
…ということで、SORACOMのGPSマルチユニットで取得した気温データをAWSサービス上に取り込むことにする。
構成
SORACOM Funnelサービスを利用し、GPSマルチユニットの情報をIoTCore経由でTimestreamに送信する。
使用するデータベースはDynamoDBとTimestreamで迷ったのだが、まだ使ったことのないサービスを使いたいという単純な理由でTimestreamを選択。
手順
1.GPSマルチユニットがデータを取得・送信していることの確認
2.Timestreamデータベースの作成
3.Funnelを利用するための準備
4.Funnelのセットアップ
5.IoTCoreの設定
手順1.GPSマルチユニットがデータを取得・送信していることの確認
まずGPSマルチユニットのデータがSORACOMのサービスまで到達していなければ元も子もないので、SORACOMのユーザコンソールでデータが届いていることを確認する。
ついでにデータの内容も確認して、Timestreamにどのデータを登録するかを検討しておく。
・SORACOMユーザコンソールで、左上のメニューマークをクリック
・GPSマルチユニット一覧画面で、データの確認をしたいマルチユニットを選択して「SORACOM Harvest Data」をクリック。
・Harvest Dataの画面にデータが表示されることを確認する。
・GPSマルチユニットから送信されるデータの種類の確認
Harvest Dataで、GPSマルチユニットから送信されているデータの種類を確認しておく。
公式ガイドの「送信されるデータフォーマット」を参照しつつ確認すると、下記データが安定して取れている様子。
プロパティ | 内容 |
---|---|
lat | 緯度 |
lon | 経度 |
bat | 電池残量 |
rs | 電波強度 |
temp | 温度 |
humi | 湿度 |
type | 送信種別 |
加速度が取得できていないのは、移動していないので仕方ない(今回は必要ないし)。
取れているデータのうち、今回は地図上に温度データを表現したいので、緯度・経度・温度(ついでに湿度も取っておこう)が必要になる。
手順2.Timestreamデータベースの作成
次はAWSのマネジメントコンソールでTimestreamデータベースを作成する。
・Timestreamの画面で、「データベースを作成」をクリック。
・「標準データベース」を選択してデータベースの名前を入力して「データベースの作成」をクリック。
※暗号化キーは自動的に作られる。作成後、KMSコンソールでAWSマネージド型キー一覧を確認すると、aws/timestreamが作成されている。
・データベース一覧画面で、作成されたデータベース名をクリック。
・データベースの概要画面で、「テーブル」>「テーブルを作成」をクリック。
・それぞれ設定を入力して「テーブルを作成」をクリック。
今回設定した値は以下。(テーブル名は任意なので省略)
マグネティックストレージの書き込みをONにすると、保持期間より過去のデータも書き込めるとのことだが、今回は必要ないのでOFFで作成する。
項目 | 設定値 |
---|---|
メモリストアの保持期間 | 12時間 |
マグネティックストアの保持期間 | 1月 |
マグネティックストレージの書き込み | チェックなし |
手順3.Funnelを利用するための準備
・事前にSORACOMユーザコンソールで、Funnelを利用するIoT SIMのカバレッジタイプを確認する。
SORACOMユーザコンソールの上部に「日本」とあれば日本カバレッジ、「グローバル」とあればグローバルカバレッジとなる。
・IoTCoreへのメッセージをPublishするためのIAMロールを作成する。
AWSマネジメントコンソールでIAMのロール一覧画面へ移動し、「ロールを作成」をクリック。
・信頼されたエンティティタイプに「AWSアカウント」を選択、AWSアカウントは「別のAWSアカウント」を選択し、先に確認したカバレッジタイプが日本であればアカウントID欄に「762707677580」、グローバルであれば「950858143650」を入力する。
・画面下部の「外部IDを要求する」にチェックを入れ、外部ID欄に任意の文字列を入力して「次へ」をクリック。
※ここで入力した外部IDは、これ以降、[External-ID] で表記する。
・許可を追加画面が表示されるので、「ポリシーを作成」をクリック。
・ポリシーの作成画面のビジュアルエディタで、サービスにIoTを選択し、フィルタアクションに「Publish」と入力して"Publish"にチェックを入れる。
・「リソース」>「指定」を選択し、「ARNの追加」をクリック。
・ARNの追加画面が開くので、Region、Account、Topic nameを入力する。
ここではRegion:「すべて」にチェック、Account:自分のアカウントID、Topic name:"topic-pyGMT/*"を入力した。
※ここで入力したトピック名(この例では"topic-pyGMT")を、以降、[topic_name] として表現する。
・「追加」をクリックしてポリシーの作成画面に戻り、「次のステップ:タグ」>「次のステップ:確認」の順にクリック。
・ポリシーの確認画面でポリシーの名前を入力し、「ポリシーの作成」をクリック。
・ポリシー画面を閉じて、許可を追加画面に戻る。
・更新ボタンをクリックしてポリシー一覧を更新し、先ほど作成したポリシーの名前で検索する。
・検索で表示されたポリシーにチェックを入れ、「次へ」をクリック。
・任意のロール名を入力し、「ロールを作成」をクリック。
ロール一覧画面に戻るので、作成したロール名で検索し、作成されたロールのARNを確認・メモしておく。
※以降、このロールARNを [role_arn] で表記する。
・AWS IoTのコンソールに移動して、左メニューの「設定」をクリック。
・デバイスデータのエンドポイントの「エンドポイント」をメモする。
※ここでメモしたエンドポイントは、これ以降、[device_endpoint] で表記する。
手順4.Funnelのセットアップ
・SORACOMユーザコンソールで、画面右上のメールアドレス欄をクリック。
・SAMユーザー一覧画面が表示されるので、左メニューの「認証情報ストア」を選択し、認証情報一覧画面の「認証情報を登録」をクリック。
・認証情報を登録画面で、以下の情報を入力する。
項目 | 設定値 |
---|---|
認証情報ID | 任意の文字列を入力 |
種別 | 「AWS IAM ロール認証情報」を選択 |
ロールARN | [role_arn]を入力 |
外部ID | [External-ID]を入力 |
・Funnelを有効化する。
SORACOMユーザコンソールの画面左上のメニューボタンをクリックし、表示されたメニューの「SIMグループ」を選択する。
・SIMグループ一覧画面で該当のSIMグループを選択し、「SORACOM Funnel 設定」をクリックする。
※該当のSIMグループがない場合は公式のグループ設定を参照。
・表示されたスイッチをクリックしてONにする。
・各項目を設定し、「保存」をクリック。
TimestreamにSIM IDを登録させるため、「SIM IDを追加」はONにする。
項目 | 設定値 |
---|---|
転送先サービス | 「AWS IoT」を選択 |
転送先 URL | 「[device_endpoint]/[topic_name]/#{imsi}」を入力 |
認証情報 | 先の手順で登録した認証情報を選択 |
送信データ形式 | 「JSON」を選択 |
SIM ID を追加 | ON |
・AWS側へデータが連携されることを確認する。
AWSマネジメントコンソールのAWS IoT画面へ移動し、左メニューから「MQTTテストクライアント」を選択する。
・「トピックのフィルター」欄に「[topic_name]/#」と入力し(今回の例では"topic-pyGMT/#"となる)、「サブスクライブ」をクリック。
・SORACOM側からデータが送信されるまでしばらく待つ。サブスクリプション欄に送られてきたデータが表示されればFunnelの設定はOK。
手順5.IoTCoreの設定
・マネジメントコンソールのAWS IoT画面の左メニューで「ルール」を選択し、表示されたルール一覧画面で「ルールの作成」をクリック。
・ルール作成画面が開く。ルール名は任意のものを入力し、「次へ」をクリック。
・SQLステートメントに、緯度・経度・温度・湿度を取得するクエリを入力して「次へ」をクリック。
SELECT payloads.lat, payloads.lon, payloads.temp, payloads.humi FROM '[topic_name]/#'
・ルールアクションをアタッチ画面で、ルールアクションに「Timestream table」を選択し、作成しておいたTimestreamデータベース名、テーブル名を選択する。
・ディメンション欄には以下のように入力する。
また、「新しいロールを作成」をクリックして、作成するロール名を入力する。
ディメンション名 | ディメンション値 |
---|---|
timestamp | ${timestamp} |
simId | ${simId} |
・ここまで設定したら「次へ」をクリックし、確認画面で「作成」をクリック。
・AWSマネジメントコンソールでTimestreamの画面へ移動し、左メニューで「クエリエディタ」を選択。
・テーブルに対して全件検索をかける。
SELECT * FROM "[データベース名]"."[テーブル名]"
参考リンク
(SORACOM公式ドキュメント)AWS IoT アダプターを使用する
AWS IoTをつかってSORACOM GPSマルチユニットからAmazon Timestreamへ温湿度データを送信してみた