Kinesis Data Firehoseを使ってみた

Amazon Kinesis Data Firehose

https://aws.amazon.com/jp/kinesis/data-firehose/

> Amazon Kinesis Data Firehose は、ストリーミングデータを確実にキャプチャおよび変換し、データレイク、データストア、および分析サービスに配信する、抽出、変換、ロード (ETL) サービスです。

大量のデータをS3に送る要件があったため、Kinesis Data Firehoseを検証してみた。

# 概要
たくさんのデータがくるので、それをさっさとS3に放り投げたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/5ec79bbe-46b2-5533-064f-0db28676d823.png)

# 前提
- S3バケットは作成済み。
- EC2インスタンスも作成済み。


# 配信ストリームを作る。
KDFを選び、配信ストリーム作成をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/1a3d8232-2d93-290e-ffa0-d392297337e5.png)

ソースはDirectPut、配信先はS3を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/726b1092-563a-0020-d64b-dc762619fcea.png)

配信ストリーム名などをよしなに決める。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/5acea593-d4e5-fe1f-0863-f8b86464c8bf.png)

配信先として、S3バケットを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/e9a0d397-f161-9b91-6037-1878876f0265.png)

バッファサイズを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/65540db8-665b-e8e3-315e-45537b8e81a1.png)
あまりバッファしないで、S3にバケツリレーでさっさと流してほしいので、最小の60秒に指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/51a67cf9-124f-a621-9e34-4beaa844a91d.png)

データの加工をするかを選択。gzipやzipにすることができる。今回は特にないのでdisable。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/ab9a3f89-cf63-8134-9061-f82c4216f3ab.png)


データを暗号化するかの選択。暗号化はしないのでdisable。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/4ea97205-00ec-79a8-8cb7-11b96edba569.png)

Create・・・でストリームを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/4dbf48c8-81fc-e3c3-880e-a22c56a17793.png)

# Kinesisエージェントインストール
- Kinesis エージェントを使用して Amazon Kinesis データストリームへの書き込み：エージェントのダウンロードとインストール
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/writing-with-agents.html#download-install

OS種別に応じてインストールする。
以下はRHELの場合。
```shell-session
$ sudo yum install https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn2.noarch.rpm 
```
自動起動に指定。
```shell-session
$ sudo systemctl enable aws-kinesis-agent.service
```
サービスを起動。
```shell-session
$ sudo systemctl start aws-kinesis-agent.service
```
サービスの起動確認。
```shell-session
$ sudo systemctl status aws-kinesis-agent.service
```
設定ファイルを確認。
```shell-session
$ sudo ls -l /etc/aws-kinesis/agent.json
```
設定ファイルデフォルト版をコピー。
```shell-session
$ sudo cp -p /etc/aws-kinesis/agent.json /etc/aws-kinesis/agent.json.default
```
設定ファイルを編集。
```shell-session
$ sudo vi /etc/aws-kinesis/agent.json
```

```json:/etc/aws-kinesis/agent.json
{
  "cloudwatch.emitMetrics": false,
  "kinesis.endpoint": "",
  "firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com",

  "flows": [
    {
      "filePattern": "READFILE",
      "deliveryStream": "KDF-STREAMNAME"
    }
  ]
}
```
"filePattern": "READFILE"のREADFILEは、読み取ってS3送るデータのファイルを指定。
"deliveryStream": "KDF-STREAMNAME"は、先ほど作ったKDFの配信ストリーム名を指定。ARNなどではなく、名前でOK。
"firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com"
はEC2インスタンスのリージョンに応じた名前に変更する。これでファイルを保存する。
<br>

設定ファイルを再読み込みさせるため、サービスの再起動。
```shell-session
$ sudo systemctl restart aws-kinesis-agent.service
$ sudo systemctl status aws-kinesis-agent.service
```
これでKinesisDataFirehoseでデータが送られるようになった。

# S3でデータが届いたか確認
S3を開くと、勝手に日付ディレクトリが切られて、ファイルが生成されている。
このファイルをダウンロードして開くと、EC2インスタンスでKinesisエージェントが読み取ったデータであることを確認できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/11d9c264-2506-a870-be1e-d4b30f02d63b.png)


超簡単にストリーミングデータ処理ができてしまった。。。クラウドはこういうところが本当に素晴らしい。