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

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」にチェックを入れて、「アタッチ」をクリックしてください。

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

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

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

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