クラウドアプリケーションを構築してデータを送信しよう
はじめに
前回はIoTシステムの概要と、M5Stackというデバイスへプログラムを書き込む手順を解説しました。ここまでで「センサーの値をM5Stackが読み出す」ところまで完成しています。
今回は、これをIoT化するためにクラウドアプリケーションを構築します。クラウドアプリケーションはM5Stackが送信したデータを受信して、データの蓄積やデータから何らかの判定をして然るべきアクションを実行します。
クラウドシステムの開発
AWSへの登録
クラウドアプリケーションを開発するためには、AWSアカウントを作成する必要があります。
AWSアカウントを作成するには、クレジットカードの登録が必須です。本記事で利用するサービス(IoT Core, Lambda, DynamoDB)はいずれも無料利用枠が設けられているサービスですが、利用状況に依って料金が発生する可能性がありますので、ご注意ください。
アプリケーションの構成
今回構築するクラウドアプリケーションの構成図を、下図に示します。
M5Stackはセンサーから読み出した値ををIoT Coreへ送信します。この時、IoT Coreで発行した証明書を使って送信元を認証します。
IoT Coreは設定に基づき、LambdaとDynamoDBへデータを中継します。Lambdaはデータの内容を判定し、人を検知したときのみSlackへ通知します。DynamoDBはデータをそのままテーブルに格納します。今回は、Lambdaを利用したSlack通知のみ実装します。
Lambda
今回、M5Stackから送信されたデータを判定し、センサーが人を検知したときのみSlackに通知するプログラムを動かす環境として、Lambdaを使います。
関数の作成
Lambdaのダッシュボードにアクセスし、「関数の作成」をクリックします。
以下の通り入力します。
項目名 | 入力値 |
---|---|
関数名 | check_point |
ランタイム | Ruby 2.5 |
入力が完了したら「関数の作成」をクリックしてください。
環境変数の設定
Lambda関数で時刻を扱う場合、「環境変数」を利用してタイムゾーンを設定する必要があります。このシステムは日本国内での利用を想定しているので、タイムゾーンをAsia/Tokyo
に設定します。
関数にアクセスし、先の手順で作成した関数名をクリックします。
「環境変数」を以下の通り追加します。
キー値 | 値 |
---|---|
TZ | Asia/Tokyo |
入力が完了したら「保存」をクリックしてください。
プログラムのアップロード
M5Stackから送信されたデータを判定し、Slackへ通知するプログラムをアップロードします。プログラムはこちらからzipファイルをダウンロードしてご利用ください。
先ほどのcheck_point関数の画面にて、「コードエントリタイプ」を「.zipファイルをアップロード」に変更します。
続いて、「アップロード」をクリックします。
先ほどダウンロードしたzipファイルを選択して「開く」をクリックすると、ソースコードがアップロードされます。アップロードが完了したら「保存」をクリックしてください。
Webhook URLの設定
ソースコード中のSlack::Notifier.new('
の部分には、Slackで発行したWebhook URLを入力する必要があります。
以下のURLを参考に、お使いのワークスペースでWebhook URLを発行して、設定ください。
プログラムの解説
Lambda関数のプログラムは非常にシンプルです。
関数の引数event
にIoT Coreが受信したデータの情報がHashとして格納されています。これをevent['detected']
のように参照することで、センサの値を判別できます。
センサの値が0でない場合、人を検知したとみなしてSlackのIncoming Webhookへメッセージを通知しています。
require 'json' require 'slack-notifier' def lambda_handler(event:, context:) return if event['detected'].to_i == 0 notifier = Slack::Notifier.new('<Webhook URL>') # TODO: <Webhook URL>を書き換えてください notifier.ping("#{Time.now}: 人が通過しました") end
IoT Core(証明書の発行とポリシーのアタッチ)
IoT CoreはM5Stackから送信したデータを受信して、DynamoDBやLambdaへ中継するために使用します。IoT Coreには、第3者から送信されたデータによって誤動作しないよう、デバイス認証の仕組みが用意されています。事前に発行しておいた証明書をデバイスに持たせ、その証明書を使用して送信されたデータのみ処理します。
証明書を発行する
IoT Coreにアクセスし、「開始方法」をクリックします。
サイドメニューの「安全性」をクリックします。
画面右上の「作成」をクリックします。
「1-Click 証明書作成(推奨)」の「証明書の作成」をクリックします。
証明書のダウンロードと有効化
作成した証明書をダウンロードして保存します。次に「有効化」を1回クリックし、証明書を有効化しておきましょう。その後「ポリシーをアタッチ」をクリックしてください。
ポリシーの作成、アタッチ
ポリシーは、操作権限の情報を持ちます。証明書にポリシーをアタッチすることで、その証明書に対してIoT Coreの操作権限を与えることができます。今回は、IoT Coreへの接続、データ送信の権限を与えます。
「新規ポリシーの作成」をクリックしてください。
以下の通り入力し、「作成」をクリックしてください。
項目名 | 入力値 |
---|---|
名前 | check_point_policy |
アクション | iot:Connect,iot:Publish |
リソースARN | * |
効果 | 許可 |
サイドメニューの「安全性」をクリックし、先ほど作成した証明書をクリックしてください。
「アクション」→「ポリシーのアタッチ」の順でクリックしてください。
「check_point_policy」にチェックを入れて、「アタッチ」をクリックしてください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- IoTシステムの概要を知り、実際にデバイスを動かしてみよう
- データをDynamoDBへ保存&mockmockによるIoTシステムのテスト方法
- PagerDutyのアプリ連携(Slack/JIRA/Custom Incident Action)
- Slackを独自アプリケーションで拡張する
- サーバーレスな事例が次々登場―ServerlessConf Tokyo 2016レポート
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- PagerDuty Tips(Terraform/オンコール通知/インシデント分析)
- マイクロソフトが新Kinect発表、次世代版HoloLensにも活用?
- チェック・ポイント、最新脅威情報に基づくマネージドセキュリティサービスを提供開始
- 「K8sGPT」の未来と生成AIを用いたKubernetes運用の最前線