[レポート] ペット追跡アプリケーションを作成してみるワークショップに参加しました #reinvent #FWM306

2022.12.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!ペット関連のお話にはすぐに飛びつくSHIOです。

ペットトラッカーアプリケーションを構築してみるワークショップに参加しました。こちらのワークショップ、どうしても参加したくてre:Invent前から楽しみにしておりました...!
ペット関連ということもありますが、私自身ペットトラッカーユーザだったので(持ってるし使ってた)使う側だけでなく、作ってみる側としてワークショップを通して経験できたら良いなーと思っていたからです。

前置きが長くなってしまいましたが、ワークショップの流れ&所感などをまとめていきます!

ワークショップ 概要

In this workshop, learn how to build a pet tracker application and how to add location functionalities, such as maps, assets, and trackers, to your application. Find out how to create and monitor geofences with Amazon Location Service. Also, discover how to deploy a serverless application that showcases AWS IoT integrations for geospatial use cases. Leave this workshop with a clear understanding of how to add maps and tracking features to applications and edge devices. You must bring your laptop to participate.

日本語verです。

このワークショップでは、ペット トラッカー アプリケーションを構築する方法と、地図、アセット、トラッカーなどの位置情報機能をアプリケーションに追加する方法を学びます。Amazon Location Service を使用してジオフェンスを作成および監視する方法をご覧ください。また、地理空間ユースケース向けの AWS IoT 統合を紹介するサーバーレスアプリケーションをデプロイする方法を発見してください。マップと追跡機能をアプリケーションとエッジ デバイスに追加する方法を明確に理解した上で、このワークショップを終了してください。参加するにはノートパソコンを持参する必要があります。

レポート

Agenda

今回のワークショップでは、Amazon Location Serviceについて学ぶことがメインです。
はじめにLocation Serviceの機能説明があり、Pet trackerのアーキテクチャを確認したあとに実際にワークショップをします。

Amazon Location Service、あまり馴染みがないサービスで実際に触るのは初めてなので楽しみです!

Amazon Location Servide features

簡単に主な機能についてまとめてみました。

【MAP】
- 位置情報の視覚化、位置情報に基づく多くのサービス機能の基盤

【Places】
- 検索機能をアプリケーションに統合
- 住所を緯度と経度の地理座標に変換(ジオコーディング)
- 座標を番地に変換(リバース ジオコーディング)

【Trackers】
- 追跡対応アプリケーションを実行しているデバイスの現在および過去の位置を取得
- トラッカーをジオフェンスにリンクしてデバイスからの位置情報の更新をジオフェンスに対して自動的に評価することができる
- ジオフェンスに対して保存or評価する前に移動していない位置の更新をフィルタリングすることで、コストを削減できる

【Routes】
- ルートを検索し、最新の道路とリアルタイムの交通情報に基づいて移動時間を見積もることができる - アプリケーションが任意の2地点間の移動時間、距離、道順を要求できるようにする機能
- ルート計画で使用するルートのマトリックスの時間と距離を計算する

【Geofences】
- デバイスがジオフェンスと呼ばれる定義済みの地理的境界に出入りすることを検出して対応する機能をアプリケーションに与えることができる
- ジオフェンス違反が検出されたときに、入口または出口イベントを Amazon EventBridge に自動的に送信する

Pet Tracker Application Architecture

こちらはPet Tracker Applicationのアーキテクチャです。
馴染みのないサービスがいくつかありますが、良い機会なのでしっかり学んでいきたいと思います。

ワークショップ

ワークショップは、AWS Workshop Studio にあるドキュメントを使用して行います。

FWM306 - How to build a pet tracker application with Amazon Location Service

*詳細はドキュメントに全部ありますが、下記簡単に流れをまとめて書いていきます。

ユースケース

今回のワークショップにおけるユーザストーリー形式のユースケースです。

  • ペットの世話に熱心なペットをお世話する人として、ペットの居場所をいつでも確認できるように屋外での足取りを記録しておきたい。

  • ペットが現在地からどのくらい離れているのか、危険回避のために把握したい。

  • ペットが迷子になったり、遠くに行ってしまわないように地図上にジオフェンスを設定して、そこにペットが入ったり出たりしたら通知をして欲しい。

1. Getting Started

使用するのはCloud9とのことで、アクセスします。

2. Rendering a Map

ペットの現在位置を示すマップをレンダリングします。

まずはマップを作成します。
AWS Location Service コンソールから、Maps -> Create map を実施します。

できました!

次に先ほど作ったマップをアプリに追加します。Cloud9で、用意されているApp.jsxを開き内容を変更していきます。

プレビューで確認すると、先ほどまで「Hello World!」が表示されていた場所にラスベガスのマップが表示されています。

このラスベガスのマップに"コントローラー"を追加します。
*コントローラー: ユーザがマップを操作したり、データを表示できるように追加するアドオンです。

ユーザがマップをズームイン/アウトできるようにします。

できました!マップの左上にズームイン/アウトのボタンが追加されています。

3. Pet Simulator

次はIoTペットシミュレーターについてです。 シミュレーターは経度と緯度を受け取り、位置の更新をAWSのバックエンドに送信するスクリプトです。各ステップで、ペットを前の位置から数メートル移動させてペットが歩き回るようにシミュレートします。作業は引き続きCloud9を使います。

このステップ難しかったです。やることは、ペットのシミュレーションを開始するためにコマンドを実行するだけなのですがそれが起動せず(涙)エラーが出てしまって、なんとか起動したものの今度はIoT Coreに接続できず(涙)
AWSエンジニアの方に来てもらって何とかうまく接続成功しましたが、原因はよく分かりませんでした....。手順通りにやってたのですが...。??

Successfully connected to IoT Core
{
  "id": "pettracker",
  "timestamp": "2022-11-30T21:17:05.635Z",
  "lng": -115.17075280921091,
  "lat": 36.123106567612446
}

シミュレーターでこの様なメッセージを出力できればOK!
Step3のページ、すごく細かく説明が書いてあって勉強になるなあと思いました。

4. IoT Core Things & Rules

バックエンドへのロケーション更新を開始したので、AWS IoT Coreで更新を受信、ルーティングおよび処理します。

AWS IoT Coreコンソールから確認します。

シミュレーターが出力していた内容を確認できました!あとはIoTのバックエンドを確認し、"モノ"pettrackerがあることを確認します。

5. Tracking the Pet

ペットの位置を追跡するため、トラッカーを作成します。
AWS Location ServiceコンソールのTrackersからCreate trackerを実施してこのステップは終わりです。

6. Display Pet Position on Map

ペットの位置を地図上に表示させます。
AppSyncとGraphQLの説明のあと(がんばって読む)、アプリケーションの更新ステップにはいります。
App.jsxでTrackerControlをインポートするようにコードを書いて...

Start Trackingボタンが表示されればOKです!

7. Add Geofences

ジオフェンスを追加します。
AWS Location Servece -> Geofence collections を選択し Create します。
この時、"CloudWatchをターゲットとするEventBridgeルール"も一緒に作成します。

App.jsxにGeofencesControlを追加します。

ジオフェンスのボタンが追加されました!

マップ上でジオフェンスを作成するには、ジオフェンスボタンをクリックしてマップの追加したい場所でシングルクリックします。

ジオフェンスが定義されたエリアができました!

8. Be Notified if your Pet leaves

ペットがいなくなった場合に通知を受け取るための設定をします。

先ほど追加したジオフェンスにトラッカーをリンクします。
AWS Location Service -> Trackers -> 対象トラッカーを選択 -> Link Geofence Collection

すると...イベントのログがCkoudWatchに送信されているはずなのですが....私の場合空っぽでした...。
ひとつ前のセクションでジオフェンスを作成したときにEventBridgeがイベントをCloudWatchに送信するように指定していたのですが、何も表示されず。。

*本来はこう出力されるようです。
*こちらの画像はワークショップの手順から抜粋しました。

設定の見直しなどをしたのですが原因が分からず、時間も少なくなってきていたのでこの部分は諦めました。。。

9. Check Pet Distance

このステップではペットとの距離を確認します。

ペットとの距離を計算するために、AWS Location ServiceのRoute calculatorsを作成します。コンソール側の設定が完了したら次はアプリケーションの更新です。
App.jsxにDistanceControlコンポーネントをインポート&追加します。

そうすると、ペットとの距離を表示する新しいコントロールが表示されるはずなのですがうまくいかず。。。位置の追跡ができないので設定の見直しをしますがまたまた分からず。
AWSエンジニアの方に一緒に見てもらったのですが原因不明のままタイムオーバーとなってしまいました(涙)あと少しで終わりだったのに残念です。

*本当はこうなるはずでした。(ワークショップの手順書から抜粋しております。)

このレポートを書いていて気づいたのですけれど、ペットとの距離がうまく表示されなかったのは私のブラウザの位置情報がオフになってたからでは??と気づきました...。確認してみたらオフになってたので、これが原因の可能性が高いです。。

まとめ

ワークショップを通して、Amazon Location ServiceやIoTとの連携、Cloud9の使用方法など色々学ぶことができました。実際に手を動かすとやはり理解度が全然違いますね。ひとりだと難しい検証も、こういう機会にエキスパートの人に聞ける環境で行えるのは大変貴重なので挑戦してみて本当に良かったです。

また、このレポートを書く際に再度調べ直しながら書いているので、ワークショップ時によく分からなかったことなどが明確になってさらに勉強になりました!

また改めてペットトラッカーの構築にトライしてみようと思います。今度はCloudWatch Logsの箇所とペットとの距離の箇所、成功させたいです。

レポートは以上となります。
ここまで読んで頂きありがとうございました!