[クラウド活用パターン辞典〜Amazon Web Servicesを使い倒す!〜]
「AWS IoT」でソリューションを実現する:第9回
2017年7月3日(月)清野 剛史(クラスメソッドAWS事業部ソリューションアーキテクト)
本連載ではこれまで、主にWebシステムやポータルサイトを想定し、AWS(Amazon Web Services)上での開発や運用管理のコツについて考えてきた。今回は少し視点を変えて、最終顧客や社会とつながるための仕組みであるIoT(Internet of Things:モノのインターネット)のソリューションをAWS上で、いかに実現できるかについて見てみよう。
「IoT(モノのインターネット)」と言えば、読者は何をイメージするだろうか。飲み頃を教えてくれる水筒や、雨が降りそうなら傘をもっていくように光でうながす傘立てなど、エンタテインメント性が高いグッズをイメージするかもしれない。だが昨今のIoTは、既にバズワードの域を超え実用段階に入っている。
例えば、RFIDタグを取り付けユーザーの動線を分析し商品棚をユーザーニーズに合わせた順に入れ替える、定点カメラでラインの様子を撮影し人の動きを分析することで工具等の置き場所を作業効率が最も高まるように決める、ボタン1つで会議室の予約から最終退出者のチェックまでを行うなどである。
こうしたIoTを使った仕組みは、長年「こうなったら楽なのに」と感じていた不満を解消する、まさに“ソリューション”だ。製造/小売りといった業種別から一般的なビジネスまで、多くの場面に取り入れれば直ぐに結果を出せることだろう。
ただ問題は、そんなIoTソリューションを、どうやって自社に取り入れるかという点だ。AWS(Amazon Web Services)がIoT向けに用意しているサービスは「AWS IoT」である。だが、基本的な仕組みを知らないと、その使用に二の足を踏むサービスとも言える。以下では、AWS IoTの使い方を中心にIoTソリューションを構築するポイントを考えていく。
まずはデバイスとクラウド間のセキュリティを考慮する
IoTの処理内容は大きく(1)データの収集と(2)デバイスの操作の2つに分けられる。データの収集とは、設置したセンサー群が検出したデータをクラウドまで運ぶ技術。デバイスの操作は、それらのセンサー群やゲートウェイに対してクラウドから信号を送り遠隔で操作する技術を指す。
これらの環境を構築するには,当然ながらデバイスとクラウドを双方向に結ぶ必要がある。だがIoTは基本的に「なりすまし」や「ハッキング」などが容易な分野だと指摘されている。見知らぬ端末から意図的なデータを挿入されないようにするには、デバイスとクラウド間のセキュリティに充分に配慮しなければならない。デバイスとクラウドのセキュリティについてAWS IoTは「X.509証明書」を通じて担保する。
ここでのポイントは「デバイスごとに異なる証明書を振り当てる」ことだ。証明書を通じた通信はラッピングされているため、デバイスごとの証明書の違いを特段意識することは少ない。そのため、何万台単位でデバイスを管理するようなソリューションの場合、ついつい証明書入りのイメージをコピーして済ませたくなってしまう。だが、この証明書はデバイスからAWSに向かう通信の“キモ”とも言えるものだ。
例えば、小さなデバイスであればデバイスごと盗難に合う、または紛失するといったケースが考えられる。そうなった時、盗難にあったデバイスの証明書が他に数万台あるデバイスと同じであれば、すべての証明書を入れ替えなければならない。個別に証明書を発行しておけば、その証明書をクラウドから拒否してしまえば安全を確保できる(図1)。証明書は、マネージメントコンソールからもAWS CLIからもワンクリックで発行できるので、多少面倒くさくてもスクリプトなどで個別の証明書を発行することをお薦めする。
拡大画像表示
デバイスとクラウドがつながれば、いよいよデータを送信する。まずは、データを送信するためのプロトコルを覚えておこう。IoTからクラウドにあげるデータプロトコルは大きく「http」と「mqtt」の2種類がある。httpはWebなどでも扱われているのでお馴染みだろう。ただhttpはヘッダ部分が大きく、回線が細くなりがちなIoTでは無駄なパケットが多くなる。
そこでhttpに代わるプロトコルになるがmqttだ。mqttはヘッダがわずか数バイトしかなく非常に軽いため、IoTのように、なるべく少ないパケットで済ませたい場合に有用だ。ただしmqttには送れるデータ量に「最大256MB、通常20MB前後」という制限があるため、大きなデータを扱う場合にはhttpへの切り替えも検討する必要がある。
クラウドからセンサーを操作・管理する
次にセンサーをクラウドから操作する方法について考えてみよう。IoTにおいて、データ送信が確立した後に実現したいことの最大事項が、この「デバイスをメンテナンスするために遠隔操作したい」というものである。
デバイスの遠隔操作は幅広い用途に使われる。具体的には、デバイスのファームアップデートや再起動処理などのメンテナンス作業、緊急時に作業デバイスを中止させるといった緊急処理、センサーで取得した気温・湿度データから空調機の設定を変更するといった自動処理などである。
これらの遠隔操作をAWS IoTで実行するには、「shadow」という仕組みを使う。最大の特徴は「オフラインになっても操作手段が変わらないこと」にある。shadowはまずクラウド上にデバイス上と同じフォーマットのJSONを作る。JSON内には「desired」「reported」「delta」の3種類の項目がある。desiredがクラウドからの指示内容を、reportedが現在のデバイスの状態を、deltaはdesiredとreportedとの差分をそれぞれ表す。
何かを操作したい場合は、クラウド上のdesiredを変更する。変更されたJSONはmqttプロトコルを使ってデバイス上にレプリケートされる。デバイス上ではdeltaの部分を見ながら処理する。処理の完了後はreportedを更新しクラウドと再びレプリケートするとdeltaの部分がなくなる。
こうした手順を踏むため、デバイスがネットワークから切断されていたとしても、クラウド上のJSONを変更して指示するという内容は変わらない。デバイスがオンラインになるまでShadowはクラウド上で保持・待機され、オンラインになった時点でレプリケートが開始される(図2)。
拡大画像表示
逆に、回線が不安定な環境ではオフラインになりやすいため、緊急操作がデバイスまで伝わらないということが考えられる。そのような場合は、最近GA(General Available:一般利用可能)になった新サービス「Amazon Greengrass」を使用すると良いだろう。
Greengrassは、上記で示したShadowやmqttの仕組みをそのままデバイス内部にコンテナとして持てる。「Lambda」までローカルにおける。これでオフラインになってもコンテナ内のリソースから異常値を検出し判断できるため、緊急操作までのすべてをデバイス内で実行できることになる(図3)。Greengrassは、これからのIoTのキーワードとなる「エッジコンピューティング」に欠かせないサービスになるので是非、覚えておこう。
拡大画像表示
会員登録(無料)が必要です
- 1
- 2
- 次へ >
- AWSのAIサービスを使って自動化を進める【最終回】(2017/08/07)
- AWSにおけるシステム障害通知を自動化する【第10回】(2017/07/24)
- AWSでの環境構築の自動化と開発環境の管理【第8回】(2017/06/19)
- AWSにおける認証の仕組みを活用する【第7回】(2017/06/05)
- 既存システムをAWSに載せ替える:第6回(2017/05/22)
AWS / Kinesis / エッジコンピューティング