AWS初心者がFirehoseを使ってみたので感想


Fringe81アドベントカレンダー2019の20日目です。
tuaaasa a.k.a ちゃりがお送りします。

始めに述べておきますが、私は半年ほど前からAWSを使い始めた初心者です。

そんな私が先日業務内で、
AWS Kinesisの機能の一つであるKinesis Data Firehoseに触れました。
今回はその感想をまとめます。
CloudFormationを用いてデプロイしたので、合わせてそちらも話します。

Kiensis

https://aws.amazon.com/jp/kinesis/
より以下抜粋

ストリーミングデータをリアルタイムで収集、処理、分析することが簡単になる

また、完全マネージドサービスなので、ストリームデータをKinesisに任せちゃえばいい感じにやってくれます。

本題のFirehose

https://aws.amazon.com/jp/kinesis/data-firehose/
より以下抜粋

ストリーミングデータをデータレイクやデータストア、分析ツールに確実にロードする最も簡単な方法です。

今回私はRedshiftにロードしました。

嬉しいこと

完全マネージドサービスのおかげで、難しいことを考える必要がなかった

データロードの重複防止とかエラー時のリトライとか、煩わしいことをFirehoseがやってくれる点非常に助かりますね。
また、エラーログも残してくれるのもうれしいです。

つらいこと

Redshiftへのパブリックアクセスを可能にしてあげなければいけない

Amazon Redshift クラスターへの VPC アクセス

これですね。

不正データが1件でも入ってくると直近の正常なデータも全て欠損してしまう

FirehoseでRedshiftにロードする場合、

  1. 一旦S3にアップロード
  2. manifestという複数のデータを一つにまとめたデータの集合を作成
  3. manifestをCOPYコマンドでロード

という形をとっています。
これのおがげで不正データが含まれるmanifestはエラー対象となりロードされないのですね。

対処法

1回COPYコマンドあたり、1万件まではエラー処理させないオプションを追加することで正常なデータのみロードさせました。

ただ、1万1件目はエラーとなってしまうのと、
不正データの内容がFirehoseでロギングできないことには注意が必要です。

おまけ

CloudFormationで設定できない項目がある

RedshiftにロードするためのS3アップロードとは別に、
ストリームデータのバックアップができる。

現在()この機能をCloudFormationでは設定できない模様。(以下2019年10月15日に返答されたサポートメールの内容)

おわり

実際に稼働していないので、実績ができたらまた報告しようかなと思います。
ありがとうございました。

参考

CloudWatch LogsのログをprivateなVPCにあるRedshiftに投入
AWS Kinesis Firehoseでログ欠損しないために