やりたかったこと
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)
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などからもアクセスできるので使いみち広がります!
以下の記事も併せて参考になるかと思います。