対象読者
本記事は、次の方を対象にしています。
- AWS(IAM/SNS)の基本的な操作ができる方
- 基本的なLinuxコマンドが分かる方
- Raspberry Pi 3のセットアップができる方
AWS IoTによるデバイス連携環境の構築
AWSには、IoTデバイスと連携するためのAWS IoTというサービスがあります。本記事では、AWS IoTを使ったデバイス連携環境の構築手順を説明します。
AWS IoTとは
AWS IoTは、Raspberry PiやArduinoはじめ、さまざまなメッセージブローカーを基盤とするハードウエアデバイスやモバイルアプリケーションと、AWSのサービスを接続して、デバイスの認証やデータに基づき任意の処理を行うためのサービスです。2015年10月にローンチされ、現在は東京リージョンでも利用できます。
AWS IoTの主な特徴はつぎのとおりです。
認証と暗号化
AWS IoTは、デバイスの認証と暗号化が提供されています。証明書に対するロールやポリシーの選択を一元管理でき、デバイスやアプリケーションによるアクセスを認証したり、取り消したりできます。証明書を持たない許可されていないデバイスからの通信は受け付けません。
ルールエンジンによるサービスの呼び出し
AWS IoTでは、デバイスから送信されたデータを収集/処理し、データに基づいたアクションを実行するアプリケーションを、マネジメントコンソール上での設定だけで容易に構築できます。
ルールエンジンは、あらかじめ定義したルールに基づいて、以下のAWSサービスなどを呼び出せます。
- AWS Lambda:リクエスト発生などのタイミングで任意のプログラムを動かすイベンドドリブン型サービス
- Amazon Kinesis:リアルタイムストリーミングデータとの連携サービス
- Amazon S3:冗長化されたデータストレージサービス
- Amazon Machine Learning:機械学習のためのサービス
- Amazon DynamoDB:NoSQLデータベースサービスを構築/運用するサービス
さらに、AWS LambdaやAmazon SNS(プッシュ通知サービス)を使えば、AWS外部のエンドポイントを呼びだすことも可能です。ルールは、SQLに似た構文で作成します。たとえば、あるデバイスから送信された温度のデータがしきい値を越えたときに、AWS Lambdaにデータを送信する、などを定義できます。
AWS IoTデバイスSDKの提供
AWS IoTは、ハードウエアデバイスやモバイルアプリケーションからAWSに接続するためのSDKを提供しています。AWS IoTデバイスSDKを使えば、デバイスとAWS IoTとの間でMQTT/HTTP/WebSocketsプロトコルを介した接続やデバイス認証/メッセージ交換ができます。執筆時では、C/JavaScript/Arduino用のSDKが提供されています。
AWS IoTを使った環境構築(1)
デバイス(Raspberry Pi)からMQTTプロトコルで、AWS IoTを介してAWS SNSを呼びだし、Eメールを送信するための環境設定を行います。全体の構成は次の図のとおりです。

[1]AWS IoTの起動
AWS IoTを使うには、マネジメントコンソールから[AWS IoT]をクリックします。

AWS IoTの画面で、[Get started]をクリックします。

[2]Thingの作成
はじめにRaspberry Piからの接続を受け付ける、Thingを作成します。(1)[Create a Thing]をクリックし、(2)[Name]に識別するための名前を入力します。ここでは、「raspi」とし、(3)[Create]ボタンをクリックします。
