PR

クラウドアプリケーションを構築してデータを送信しよう

2020年3月13日(金)
岡嵜 雄平

はじめに

前回はIoTシステムの概要と、M5Stackというデバイスへプログラムを書き込む手順を解説しました。ここまでで「センサーの値をM5Stackが読み出す」ところまで完成しています。

今回は、これをIoT化するためにクラウドアプリケーションを構築します。クラウドアプリケーションはM5Stackが送信したデータを受信して、データの蓄積やデータから何らかの判定をして然るべきアクションを実行します。

クラウドシステムの開発

AWSへの登録

クラウドアプリケーションを開発するためには、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のダッシュボードにアクセスし、「関数の作成」をクリックします。

Lambdaのダッシュボード

以下の通り入力します。

項目名 入力値
関数名 check_point
ランタイム Ruby 2.5

Lambda関数の作成

入力が完了したら「関数の作成」をクリックしてください。

環境変数の設定

Lambda関数で時刻を扱う場合、「環境変数」を利用してタイムゾーンを設定する必要があります。このシステムは日本国内での利用を想定しているので、タイムゾーンをAsia/Tokyoに設定します。

関数にアクセスし、先の手順で作成した関数名をクリックします。

「環境変数」を以下の通り追加します。

キー値
TZ Asia/Tokyo

入力が完了したら「保存」をクリックしてください。

プログラムのアップロード

M5Stackから送信されたデータを判定し、Slackへ通知するプログラムをアップロードします。プログラムはこちらからzipファイルをダウンロードしてご利用ください。

先ほどのcheck_point関数の画面にて、「コードエントリタイプ」を「.zipファイルをアップロード」に変更します。

コードエントリタイプを変更

続いて、「アップロード」をクリックします。

Lambda関数にプログラムをアップロード

先ほどダウンロードしたzipファイルを選択して「開く」をクリックすると、ソースコードがアップロードされます。アップロードが完了したら「保存」をクリックしてください。

Webhook URLの設定

ソースコード中のSlack::Notifier.new('')の部分には、Slackで発行したWebhook URLを入力する必要があります。

以下のURLを参考に、お使いのワークスペースでWebhook URLを発行して、設定ください。

SlackでのIncoming Webhookの利用

プログラムの解説

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にアクセスし、「開始方法」をクリックします。

IoT Core 開始方法

サイドメニューの「安全性」をクリックします。

IoT Coreの安全性

画面右上の「作成」をクリックします。

IoT Core証明書の作成

「1-Click 証明書作成(推奨)」の「証明書の作成」をクリックします。

1-Click証明書作成

証明書のダウンロードと有効化

作成した証明書をダウンロードして保存します。次に「有効化」を1回クリックし、証明書を有効化しておきましょう。その後「ポリシーをアタッチ」をクリックしてください。

証明書のダウンロード

ポリシーの作成、アタッチ

ポリシーは、操作権限の情報を持ちます。証明書にポリシーをアタッチすることで、その証明書に対してIoT Coreの操作権限を与えることができます。今回は、IoT Coreへの接続、データ送信の権限を与えます。

「新規ポリシーの作成」をクリックしてください。

新規ポリシーの作成画面へ移動

以下の通り入力し、「作成」をクリックしてください。

項目名 入力値
名前 check_point_policy
アクション iot:Connect,iot:Publish
リソースARN *
効果 許可

新規ポリシーの作成

サイドメニューの「安全性」をクリックし、先ほど作成した証明書をクリックしてください。

証明書詳細

「アクション」→「ポリシーのアタッチ」の順でクリックしてください。

ポリシーのアタッチ画面へ移動

「check_point_policy」にチェックを入れて、「アタッチ」をクリックしてください。

証明書にポリシーをアタッチ

  • 1
株式会社Fusic
mockmockの運用・開発を担当するエンジニア、AWS Certified Solutions Architect – Professional。山口県出身。高専卒業後、関西にて組込みソフトウェアの開発を数年間経験。その後、福岡へJターン転職。同時にWeb/IoTエンジニアにスキルチェンジした。プライベートでは2児の父。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています