ラズパイからAWSに画像を転送して通知させる

こんにちは。呉屋です。
ラズパイの基本的なことが分かってきたので、AWSと連携して色々やっていこうと思います。
今回はラズパイで撮影した画像をAWSに転送して、通知させるものを作ってみました。

構成図

ラズパイからCLIを使って、S3に転送して通知する構成とします。
処理の流れは、以下のとおりです。

①ラズパイで画像を撮影する。
②CLIを使って、S3に転送する。
③画像が保存されたら、SNSでメール通知する。

AWS構成図

利用サービス

サービスの概要と用途です。

・CLI (AWS Command Line Interface)

 コマンドを実行して AWSとやり取りするためのサービスです。
 S3に画像を転送するために利用します。

・S3 (Amazon Simple Storage Service)

 ストレージサービスです。
 画像の保存場所として利用します。

・SNS(Amazon Simple Notification Service)

 Eメール・SMSなどで通知可能なメッセージングサービスです。
 S3に保存された際、通知するために利用します。

・IAM(AWS Identity and Access Management)

 サービスやリソースへのアクセスを管理するサービスです。
 セキュリティを強化するために利用します。

作ってみる

各サービスを設定していき、組み合わせていきます。
一つずつ見ていきましょう~!

IAM

ラズパイで使用するIAMポリシーを作成します。
権限は、指定したS3バケットへの転送のみです。
必要最低限の権限にしましょう。

IAM

次にIAMユーザーを作成して、先ほど作ったIAMポリシーを紐づけます。
”アクセスキー”と”シークレットキー”を確認しておきましょう。
CLIで必要となる重要なものです。

IAM

SNS

メール通知の設定を行います。
初めにアクセスポイントとなるトピックを作成します。
通知の件名を設定します。

SNS

次に通知先やプロトコルを定義するサブスクリプションを作成します。
SMS、HTTP(S)、Lambdaなどが選択可能で、今回は"Eメール"としました。

SNS

以上の設定を行うと、指定した通知先に確認メールが届きますので、認証URLをクリックして完了です。

S3

転送先のバケットを作成します。

S3

バケットポリシーで、以下の制限を行います。

 ①特定のIAMのみとするユーザー制限
 ②S3は、転送(PUT)のみとするアクション制限
 ③S3は、専用バケットのみとするバケット制限
 ④特定のラズパイのみアクセス可とするIP制限

S3

次にSNS連携のために通知設定を行います。
S3バケットに、拡張子".jpg"ファイルが"PUT(保存)"されたときにイベントが発生するようにします。

S3

最後に、SNSと紐づけます。

S3

CLI

いよいよ最後です。ラズパイにCLIをインストールします。

詳しくはこちらを参照下さい。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html

ラズパイにIAMユーザーの”アクセスキー”と”シークレットキー”の認証情報を設定します。

CLI

テストしてみる

準備が整ったので、テストしてみましょう~!

画像撮影コマンドを実行します。
サイズ、ファイルパスなどもオプションで指定します。

CLI

S3転送コマンドを実行します。

CLI

S3を見てみます。

S3

転送OKです!

メールを確認してみます。
指定した件名・送信元のIPアドレス・バケット名・ファイル名が記載されていました。
しかし、分かりづらいので、メールに特化するなら「SES」というサービスがいいと分かりました。

SNS

以上で完了となります。

今後の課題

作りたいものは、できたのですが、いくつか課題が出てきました。

①IoTとAWSの連携方法は、CLI以外を検討する

 CLIを利用する場合、IoT端末(ラズパイ)にIAMユーザーのキー情報を設定しました。
 この情報はとても重要で、プログラムによるAWSの操作ができるため、保管には注意する必要があります。
 他システムへの影響を抑えるために、必要最低限の機能やアクセス制限など行いましたが、もっといい方法はないか検討していきます。

 最近、IoTサービスが拡充しており、"AWS IoT Core"というもので連携が容易にできるようです。
 次回はこれに挑戦したいと思います。

②熱検知センサーを利用する

 プログラムを組んで定期実行をしてみましたが、不要な画像も転送されるので、やっかいでした(笑)
 何か検知した際に、転送するように"熱検知センサー"も組み合わせていきたいと思います。

③保存されている画像を分かりやすくする

 マネージメントコンソールからだと、どんなものが撮影されたのか分かりづらいですね。
 Webページで一覧化するように改善しようと思います。

今後もIoTとAWS連携を検証して、記事にしていきます(^o^)/