モノとAWSを連携させて本気で遊んでみた事例

エンジニアが本気で作ったIoTパタパタ

一見するとAWSとは何も関係なさそう。でも実は裏ではAWSを使っていた。というのはよくあることです。

写真に写っているのは、エンジニアに作ってもらった展示会用のゲーセン風筐体ですが、実はAWSと連携して動くようになっています。

具体的な要素でいえば、
・起動・停止リクエストを受け付ける「Amazon API Gateway」「AWS Lambda」
・パタパタを回しているラズパイとAWSのインタフェースとして「AWS IoT Core」
・カメラで撮影した画像を解析する「Amazon Rekognition」
などのサービスで構成されています。

この記事では、エンジニアが本気でモノとAWSを連携させてみた構成についてご紹介していきます。

解説を始める前に、パタパタって何?ということを説明した方が良いかもしれません。

パタパタとはいったい?

そもそもこれは何

ゲーセン風筐体の動く様子

ゲーセン風筐体が実際にどのように動くのかを言葉で説明するのは大変なので、次の動画をみてください。

クラウドといえども実際は物理的なハードウェアが存在しています。故障や長期利用などで、物理的なハードウェアを撤去するときに、その上で稼働するEC2インスタンスを別のハードウェアに移動させる必要があります。そのために再起動が必要になります。

全体構成としては、このようになっています。以降では特定部分に絞って説明していきます。

AWS環境構成図

アクセス集中時に発生する事象

モーターの制御はラズパイで

いきなりAWS関係ない部分からの説明になりますが、モーター制御はラズパイで制御しています。

パタパタ自体がもともとは手回しを想定されているので、モーターで回せるように部品交換が必要になります。「KOBE風ジオラマ」ではギアとギアを咬み合わせる仕組みで実装しましたが、ゲーセン風筐体ではベルト式へ変更しています。ベルト式にすることで、静音、設置の簡易性向上などを見込むことが可能です。

ラズパイには、パタパタ以外にもカメラとディスプレイが接続されており、Wi-Fiを経由してAWS IoT Coreと接続しています。

WEBインタフェースはサーバレスな構成

WEBインタフェースはサーバレスな構成

パタパタ回転の起動・停止はWEBインタフェースから実施が可能になっています。構成図を見てわかる通り、サーバーレスな構成で実装しています。

まずブラウザに表示する管理画面は、S3へ保存したHTMLをCloudFront経由で配信しています。

管理画面の「START」ボタンを押すとREST APIのリクエストを実行し、API Gatewayを通じてIoT Coreへ「START」の指令を発行します。同様にパタパタを止める時は「STOP」ボタンを、待機画面へ戻す場合は「AUTO」ボタンを押す形になります。

パタパタとAWSの連携にはIoT

パタパタとAWSの連携にはIoT

WEBのインタフェースとラズパイの間には 「AWS IoT Core」を挟んでいます。

ラズパイからIoT Coreへ常時接続を行い、LambdaからはIoT Coreが提供するMQTTトピックに情報をPublishすると、トピックをSubscribeしているラズパイにメッセージが送信される仕組みです。

IoT Coreを入れることで、次のようなメリットが発生します。

・ 複数のパタパタを同時制御できる(いまは1台)
・ リアルタイムに操作可能
・ 周辺のAWSサービスとシームレスに連携が可能

セキュリティ面に注目すると、ラズパイから直接AWSを操作するためにはラズパイ上にアクセスキーを置いておく必要が生じ、好ましい実装にはなりません。ラズパイからLambdaなどのAWSリソースの実行をIoTアクションにオフロードすることで、IAM権限をすべてAWS上のIAMロールで管理してラズパイ自身では何のIAM権限も有していない点でセキュリティ的にメリットがあります。

画像解析はRekognitionを使ってサーバレスに

画像解析はRekognitionを使ってサーバレスに

パタパタが止まるとカメラで撮影をして、IoT Coreを経由してLambdaに処理が移ります。Lambdaでは、Rekognitionを使って画像解析を行い、撮影された画像に対応するメッセージを写真に追加してモニターへ表示する仕組みになっています。ると、トピックをSubscribeしているラズパイにメッセージが送信される仕組みです。

展示会ではどこにパタパタを配置するかが不確定要素としてあるため、撮影された画像からパタパタ部分を特定する必要があります。Rekognitionでは、あらかじめパタパタの画像データを学習させることで、撮影画像からパタパタ部分を特定させることができました。大人数の画像から、特定の人物をピックアップするなどに使えそうな機能ですね。

パタパタが特定できたら、表示されている面に応じたメッセージを画像へ追加(画像編集)して画像をラズパイに送るように制御しています。Rekognitionでは独自の基準で認識するように学習させることも出来る上、学習用のプログラムなどを用意することなく簡単に画像認識モデルを構築できます。

CloudWatchでトラブルを監視、メールやSlackへの通知も実現

CloudWatchでトラブルを監視

「カメラのピントが合わずに画像の特定ができない」「IoT Coreに接続されていない」などいくつか想定されるトラブルがありました。そのようなトラブルが発生したときに、すぐに検知・対応できるように、「AWS IoT Events」を使って、SNSやCloudWatchへ情報をプッシュする仕組みを構築しました。

CloudWatchでトラブルを監視

「カメラのピントが合わずに画像の特定ができない」「IoT Coreに接続されていない」などいくつか想定されるトラブルがありました。そのようなトラブルが発生したときに、すぐに検知・対応できるように、「AWS IoT Events」を使って、SNSやCloudWatchへ情報をプッシュする仕組みを構築しました。

SNSからはメールやSlackへ情報を飛ばすことで迅速に人が異常を検知することが出来ます。CloudWatchへログを保存しておくことで、検知後のトラブルシュートなどに活用します。

モノとAWSを連携させて本気で遊んでみた事例ということで、サーバーレスで様々なサービスを利用した展示物を作ることができました。約1か月弱かつ業務の合間を縫っての実装だったので、もっと良い方法があったかもしれませんが、短期間でもオモシロいものが作れるのがAWSの良いところでもあると思います。

AWSを使って何か面白いことをしたい!という相談もお待ちしております