#やりたかったこと
AWS IoTを入り口にKinesis Firehose経由でAmazon S3にファイルを保管する仕組みを作りました。ノーコーディングなので、だいたい1時間くらいで実装できます。
本当はRaspberry Piあたりもやろうかと思ったのですが、時間がないので省略しました。
AWS IoTのMQTT Clientというテストツールを使うとAmazon S3に以下のようにファイルができます。
#仕組み
今回の連携図はこんな感じです。
**AWSのサービス間は連携が優れています。この辺のサービスを作った結果の感想をマイクロサービス否定派が変節した経験に書いています。
初心者が疑問に思うのは「Kinesis Firehoseいるの?」**です。私も最初はその状態でした。
Kinesis FirehoseがないとIoT情報を集約することができず、Amazon S3に生成されるファイル数が異常に増えてしまいます。
例えば、100台のマシンから1分ごとにリクエストを受けた場合の1時間のファイル数は以下のとおりになります。
Kinesis Firehoseなし:6000ファイル(100 * 60 = 6000)
Kinesis Firehoseあり:20ファイル(3分でサマリする0設定にした場合:60 / 3 = 20)
#設定1. Amazon S3
まず、Amazon S3から設定していきます。バケットを作るだけの簡単な作業です。
1.「バケットを作成」ボタンを押します。
2.バケット名入力とリージョン選択だけです。
#設定2. Kinesis Firehose
####1. Create Delivery Stream
まずは「Create Delivery Stream」ボタンを押します。
####2. Destination
次にDestinationをAmazon S3にして先のステップで登録したバケット名を指定します。
####3. Configuration
最後は細かい設定です。ほとんどはデフォルト値のままにして、「Buffer interval」だけ60(秒)にしました。この設定により、60秒間隔でAWS IoTからの情報を集約してAmazon S3にファイルを生成します。
#設定3. AWS IoT
####1. Create a thing(1/2)
まずは「Create a thing」ボタンを押して"a thing"を作ることから始めます。
####2. Create a thing(2/2)
次に"a thing"の情報を入力して登録します。
####3. Create a rule(1/2)
"a thing"に続いてルールを登録するため「Create a rule」ボタンを押します。
####4. Create a rule(2/2)
ルールの情報を入力していきます。「Choose an action」で"Amazon Kinesis Firehose"を選択して、先のステップで登録したDelivery Streamを入力します。"Amazon Kinesis Firehose"のリージョンとAWS IoTのリージョンが一緒でないとプルダウンメニューに出てこないので注意してください。
#さいごに
これでAWS IoT→Amazon S3につながりました。Amazon S3はSparkやMapReduceなどからもアクセスできるので使いみち広がります!
以下の記事も併せて参考になるかと思います。