AWSアカウントのセットアップ
AWSの各サービスを利用するためには、無料のアカウント登録を行います。事前に支払いのためのクレジットカードと認証のための電話を準備しましょう。具体的な手順は次のページを参照してください。
AWS アカウント作成の流れ|アマゾン ウェブ サービス(AWS日本語)
また今回は、日本国内では最寄りのリージョンとなる「AWS東京リージョン」を利用します。また、AWSを継続して利用する場合は、セキュリティ対策としてIAMユーザー(制限ユーザー)の利用とMFA(多要素認証)の設定をお奨めします。
Amazon DynamoDBのセットアップ
Amazon DynamoDBは、AWS独自のNoSQLデータベースのマネージドサービスです。拡張性の高さが特徴で、扱うデータが増えた場合にも容易に対応できます。今回はセンサーデータを保存するためのテーブルをAmazon DynamoDB(以下、DynamoDB)作成します。
DynamoDBのWeb管理画面にアクセスして、「東京リージョン」を選択し、[Create Table(テーブルの作成)]ボタンをクリックします。
![テーブル作成画面を表示](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_02.png)
[テーブル名]に「iot_light」、[パーティションキー]に「id」、データ型は既定値(文字列)のまま、[ソートキーの追加]のチェックをオンにします。するとテキストボックスが追加されるので、そこに「date」と入力し、データ型は既定値(文字列)のままにします。DynamoDBでは、テーブル作成時にキー以外のカラムを設定する必要はありません。
![Dynamoに作成するテーブルの定義](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_03.png)
テーブル設定は[デフォルト設定の使用]にチェックが入っていることを確認し、[作成]をクリックしてテーブルを作成します。
しばらく待ち、作成中の表示が消えれば作成完了です。
![作成されたDynamoDBテーブル](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_04.png)
AWS IoTのセットアップ
AWS IoTは、IoTデバイスのバックエンドを提供するマネージドサービスです。今回はRaspberry Piから送信されるセンサーデータを受信し、DynamoDBに保存する処理をAWS IoTで行います。
AWS IoTのWeb管理画面にアクセスし、[Get started]をクリックします。
![AWS IoTの画面](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_05.png)
デバイス作成画面では、任意のデバイス名を入力し、[Create]をクリックしてデバイスを作成します。なお、AWS IoTではデバイスのことをthingと呼びます。今回はデバイス(thing)名を「sensor1」としました。
![デバイス(thing)の作成](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_06.png)
デバイスsensor1が作成されたので、[View thing]をクリックしてプロパティを表示します。
![thingのプロパティ表示](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_07.png)
右下の[Connect a device]をクリックします。
![デバイス接続画面の表示](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_08.png)
AWS IoTにデータを送信するためのプロトコルには、HTTPSとMQTTの2つが利用できます。今回はMQTTを使用します。MQTTを使用するためには、X509証明書とポリシーを作成する必要があります。また、AWS IoTに接続するデバイスでは、AWS IoT Device SDKという専用のSDKを利用することができますが、今回は汎用のMQTTライブラリを利用します。任意のSDK(今回は「NodeJS」)を選択し、[Generate Certificate and Policy]をクリックします。
![X509証明書の作成](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_09.png)
作成された3つのX509証明書ファイルをダウンロードします。[Download Public Key]、[Download Private Key]、[Download Certificate]の3つのリンクをクリックすると、それぞれのファイルをダウンロードできます。ダウンロードが終わったら[Confirm and Start Connecting]をクリックします。
![X509証明書のダウンロード](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_10.png)
AWS IoT Node.js SDKでのコード例が表示されますが、今回は汎用のMQTT Node.jsモジュールを利用するため、このコードは使用しません。ただし、SORACOM BeamでAWS IoTの接続ホスト名を設定するため、
host
の値をどこかにコピーしておきましょう。それから[Return to Thing Detail]をクリックします。
![接続ホスト名の確認](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_11.png)
続いて、メッセージの転送ルールを作成します。転送ルールでは、SQLのようなクエリ構文で、転送する条件や転送データの加工が可能です。詳細はAWS IoTのドキュメントを参照してください。[Create a Rule]をクリックします。
![転送ルールの作成](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_12.png)
[Name]には任意のルール名(今回は「rule1」)を入力します。
![ルール名の入力](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_13.png)
[Rule Query Statement]は自動入力されるのでそのままにし、[Attribute](転送する属性)には「*」、[Topic Filter](対象トピック)は「topic/grove」(ラズパイのコードに合わせる)、[Condition](転送する条件)は空のまま、[Choose an action]は「Insert message into a database table(DynamoDB)」を選択します。
![ルールの対象メッセージの指定](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_14.png)
[Table Name]は、先ほど作成したDynamoDBテーブル「iot_light」を選択し、[Hash Key Value]には「${id}」、[Range Key Value]には「${date}」を入力して、[Create a new role]リンクをクリックします。
![ルールのDynamoDB転送設定](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_15.png)
AWS IoTからDynamoDBにアクセスするための権限追加画面が表示されるので、[許可]ボタンをクリックします。
![権限の追加](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_16.png)
元の画面に戻ると、[Role Name]に作成したIAMロールが設定されています。[Add Action]をクリックします。
![権限の確認](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_17.png)
DynamoDB Action(DynamoDBへの転送設定)が表示されるので、[Create]をクリックしてルールを作成します。
![ルールの作成](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_18.png)
これでAWS IoTの設定は完了です!
![ルール作成完了](http://cz-cdn.shoeisha.jp/static/images/article/9015/soracom2_19.png)