Cloud Service
Amazon Data Firehose
ストリーミングデータをS3やRedshift、OpenSearch等へ準リアルタイムに配信し、必要なら変換も行うマネージドサービス。
- 1.流れ込むデータを溜めて自動でS3やRedshiftなどへ届けるマネージドな配送路。
- 2.サーバー管理は不要で、バッファのサイズや時間で準リアルタイムに配信する。
- 3.配信の途中でLambda変換やParquet等への形式変換、圧縮・暗号化もできる。
解決する課題
ログやイベント、IoTのテレメトリのように絶え間なく流れてくるデータを、S3やデータウェアハウスへ確実に貯めたい場面は多くあります。自前でコンシューマを書くと、バッファリング・リトライ・スケーリング・形式変換の面倒を全部抱え込むことになります。Amazon Data Firehoseはこの「配送」部分をマネージドに引き受けます。
- ストリーミングデータをS3/Redshift/OpenSearch等へ自動配信したい
- 配信のためのサーバーやコンシューマを運用したくない
- 配信の途中で形式変換(JSONからParquetなど)・圧縮・暗号化もまとめて行いたい
取り込んだ端からリアルタイムに自前処理する必要はなく、「少し溜めてから届けばよい」準リアルタイム用途に向きます。
主要概念と用語
- デリバリーストリーム(配信ストリーム): Firehoseの基本単位。データの入口と配信先(送信先)をひとつ定義したもの
- ソース(送信元): データの入口。直接PUT(SDK/エージェント経由)や、Kinesis Data Streamsを入口にする方式がある
- デスティネーション(送信先): 配信先。S3、Redshift、OpenSearch、各種サードパーティ先などを指定できる
- バッファリング: レコードを一定のサイズまたは一定の時間溜めてからまとめて配信する仕組み。どちらかの条件に達すると送信する
- データ変換: 配信前にLambda関数でレコードを加工する仕組み
- 形式変換: JSONを列指向のParquetやORCへ変換する機能(スキーマはデータカタログを参照)
- バックアップ: 変換失敗や配信失敗時に、元データや失敗分をS3へ退避する設定
仕様・制限・クォータ
- 配信はバッファのサイズまたは時間のどちらかに達したタイミングで行われ、厳密な秒単位のリアルタイムではなく準リアルタイム
- バッファのサイズ・時間には設定可能な範囲があり、リアルタイム性を上げるほど小さなオブジェクトが増えやすい
- 1配信ストリームあたりのスループットには上限があり、必要に応じて引き上げを申請できる
- レコード1件あたりのサイズや、まとめて送る際の上限など、リクエスト面のクォータが存在する
- 圧縮(gzip等)、保存時暗号化、配信前のLambda変換、Parquet/ORCへの形式変換に対応する
Firehoseはバッファに溜めてから配信するため、必ず多少の遅延が生じます。ミリ秒単位での即時処理が要るなら、Firehoseではなく取り込み側のストリーム処理を検討します。
内部の仕組み
Firehoseはソースから受け取ったレコードをバッファに蓄積し、設定したサイズか時間のいずれかの条件を満たすとデスティネーションへまとめて配信します。コンシューマやシャードをユーザーが管理する必要はなく、スループットに応じてマネージドにスケールします。
配信の流れの中で、任意で次の加工を挟めます。
- Lambdaによるデータ変換: 受け取ったレコードを関数で整形・フィルタしてから配信できる
- 形式変換: JSONレコードをParquet/ORCの列指向形式へ変換し、後段の分析を効率化できる
- 圧縮・暗号化: S3配信時に圧縮し、保存時暗号化を適用できる
配信や変換に失敗したレコードは、設定したS3のバックアップ先へ退避され、データを失わずに後から再処理できます。Redshift宛の配信は、いったんS3に置いてからロードする方式を取ります。
取り込みをKinesis Data Streamsで受け、その配信先のひとつとしてFirehoseを使う構成がよくあります。リアルタイム処理と、S3等への自動アーカイブを同じストリームから両立できます。
設計パターン / ベストプラクティス
- データレイクへの自動取り込み: ストリーミングログをFirehoseでS3へ集約し、AthenaやRedshift Spectrumで分析する
- 形式変換でクエリを安く速く: S3配信時にParquet/ORCへ変換しておくと、後段のスキャン量が減りコスト・性能が改善する
- バッファ設定のバランス: 時間を短くするとリアルタイム性は上がるが小さなファイルが増える。分析しやすいサイズになるよう調整する
- Lambda変換は冪等に: リトライで同じレコードが再投入される可能性を踏まえ、変換処理は繰り返しに強く作る
- 失敗時バックアップを必ず設定: 変換・配信失敗分をS3へ退避し、データ欠損を防ぐ
運用・監視
- 配信の成否やスループットはCloudWatchメトリクスで監視する(配信レコード数、配信先別の成功・失敗バイト数など)
- 配信エラーやLambda変換エラーはCloudWatch Logsへ出力でき、原因調査に使う
- 配信が滞る場合は、スループットのクォータ超過や配信先(S3権限、Redshiftロード、OpenSearchの拒否)側の問題を疑う
- バックアップ先S3に失敗レコードが溜まっていないかを定期的に確認する
コスト
- 基本は取り込んだデータ量に応じた従量課金で、待機中の固定費は小さい
- 形式変換(Parquet/ORC化)やデータ取り込みの加工には追加の料金要素が発生し得る
- 配信先のストレージ料金(S3など)やLambda変換の実行料金は別途かかる
- 圧縮や形式変換で後段のストレージ・スキャン量を減らせば、トータルコストの最適化につながる
セキュリティ
- アクセス制御はIAMで行い、Firehoseが配信先へ書き込むためのロール権限を最小限に絞る
- 保存時暗号化はKMSで管理した鍵を利用でき、転送時はTLSで保護される
- VPC内のOpenSearch等へ配信する場合は、プライベート経路での配信に対応する
- 操作はCloudTrailで監査でき、誰がいつ設定を変更したかを追跡できる
Well-Architected の観点
- 運用上の優秀性: コンシューマやスケーリングを自前運用せず、配信をマネージドに任せられる
- コスト最適化: 従量課金で待機コストが小さく、形式変換・圧縮で後段コストも下げられる
- 信頼性: リトライと失敗時のS3バックアップでデータ欠損を防ぐ
- パフォーマンス効率: バッファ設定で準リアルタイム性とファイルサイズのバランスを取れる
試験で問われるポイント
- 「ストリーミングデータをS3/Redshift/OpenSearchへ自動配信、運用不要」→ Data Firehose
- リアルタイム取り込み・自前処理は Kinesis Data Streams、自動配信・最小運用は Firehose
- 配信前に Lambda変換 や Parquet/ORCへの形式変換・圧縮ができる
- バッファの「サイズまたは時間」で配信される準リアルタイムであり、ミリ秒級の即時性はない
関連サービス・比較
取り込み用の Amazon Kinesis Data Streams とよく比較されます。届いた端から自前で処理したいのか、溜めて自動で配信したいのかで選びます。
| 観点 | Data Firehose | Kinesis Data Streams |
|---|---|---|
| 主な役割 | 送信先への自動配信 | リアルタイム取り込み |
| 運用 | マネージド(シャード管理不要) | シャード/容量を管理 |
| 処理方式 | バッファして準リアルタイム配信 | 届いた端から自前で処理 |
| 再読み込み | 原則できない(配送が役割) | 保持期間内に複数コンシューマで再読込可 |
| 向く用途 | S3等へ貯める・形式変換 | リアルタイム分析・複数処理系 |
ハンズオン / CLI例
# 直接PUT型のデリバリーストリームをS3宛で作成
aws firehose create-delivery-stream \
--delivery-stream-name web-logs \
--delivery-stream-type DirectPut \
--s3-destination-configuration \
RoleARN=arn:aws:iam::111122223333:role/firehose-delivery-role,BucketARN=arn:aws:s3:::my-data-lake
# レコードを1件投入(準リアルタイムでS3へ配信される)
aws firehose put-record \
--delivery-stream-name web-logs \
--record Data="$(echo -n '{"status":200,"path":"/"}' | base64)"
AWS Service
Amazon Data Firehoseを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
分析
比較で見る軸
クラウド: AWS / カテゴリ: 分析 / 難易度: basic
導入後に効く点
サーバー管理は不要で、バッファのサイズや時間で準リアルタイムに配信する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 分析
- 難易度
- basic
- 関連資格
- DEA-C01
- 設計柱
- operational
判断チェックリスト
- 自社の用途が「分析 / operational」に近いか確認する。
- 強みである「流れ込むデータを溜めて自動でS3やRedshiftなどへ届けるマネージドな配送路。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。