前回の記事でRaspberry Piで作成したIoTデバイスからAWS IoTにセンサーデータを送信する仕組みを作りました。
今回は、そのセンサーデータをKinesis Firehoseを使ってS3に格納してみましょう。AWS IoTからS3へのメッセージの格納は別にKinesis Firehoseを使う必要はないのですが、敢えてと言うことで・・・。
AWS IoTでルールの作成
まず、AWS IoTのACTからルールを作成します。
ルール作成
ルールの名前は、Status_Kinesis_Firehose
にしました。
AWS IoTに送信されたメッセージから、どのメッセージをルールの対象にするかは、SQL風の定義で指定できます。
ここでは、属性(項目)はすべてを示す*
、トピックフィルターには+/status
とします。
アクションの追加をクリックします。
アクションの指定
Kinesis Firehoseのアクションを指定します。
まだFirehoseのDelivery Streamがないので、作成を行います。
Firehose Delivery Streamの作成
Firehoseの画面が表示されるので、Create Delivery Streamボタンをクリックします。
Delivery Streamの作成はStep1〜5まで続くので、下記のとおりに進めます。
Step 1
Delivery Streamの名前を付けます。
Direct PUT or other sourcesを選択します。これを指定すると、AWS IoT以外にFirehose APIやKinesis Agentなどからも同じDelivery Streamを使用してデータを配信できます。
Step 2
Step 2はデフォルトのままで構いません。
Step 3
Step 3では、配信先を指定します。ここではS3を指定しますが、他にもRedshiftやElasticsearch、Splunkが指定できます。
S3の配信先として、バケットとPrefixを指定します。
Step 4
Step 4では、FirehoseからS3にアクセスするためのIAMロールを指定します。ここでは、新規のロールを作成しました。
Step 5
Step 5はレビュー画面です。設定内容を確認して、Create Delivery Streamボタンをクリックします。
アクションの設定
Firehose Delivery Streamの作成が終わったので、AWS IoTのルール作成画面に戻ってストリーム名を指定します。もちろん、いま作成したDelivery Streamの名前です。
Separatorは\n(改行)
を指定します。複数のメッセージをキャッシュしてS3に保存を行うので、メッセージ間のセパレータが必要です。改行を指定すると、1メッセージ1行のファイルになります。
AWS IoTからFirehoseにアクセスするためのIAMロールを指定します。新規ロールを作成して、それを指定しました。
アクションの指定が終わったら、最初のルール作成画面に戻りますので、ルールの作成ボタンをクリックします。
S3の確認
それでは、少し時間が経ってからS3のバケットを確認してみましょう。
指定したPrefix(status)の下に、年月日時のフォルダができて、ファイルが保存されています。
ファイルの中身を見てみると、このようにメッセージが保存されています。
これでセンサーデータのS3への保存は完了です。次回はAthenaを使ってアドホックな分析をしてみようと思います。