DEA / ドメイン1 データの取り込みと変換

重要な内容

Amazon Data Firehose

は、ストリーミングデータを受け取り、一定量または一定時間ためてから (バッファリング)、、、、 テーブルなどへ配信するフルマネージドのサービスです。コンシューマーのコードを書かずに「ストリームを保存先へ届ける」部分を任せられます。旧称は Data Firehose です。

Point
  • Firehose は「消防ホース」です。大量の水 (データ) を目的地へ流し込むイメージです。
  • 旧称の Kinesis Data Firehose で問題文や選択肢に出ることがあります。同じサービスです。
  • 和訳

概要

概要の図 失敗したレコード ソースDirect PUT・Kinesis Data Streams・MSK Data Firehoseバッファリング Lambda で変換任意 形式変換JSON → Parquet/ORC Amazon S3 RedshiftS3 経由の COPY OpenSearch Iceberg テーブル S3 のバックアップ

はサーバーの管理もの管理も不要で、流量に合わせて自動で拡張します。受け取ったデータはバッファにため、サイズか時間のどちらかの条件を満たした時点で配信します。そのため、結果が届くまでに数秒〜数分の遅れがあり、ニアリアルタイムの配信サービスと位置づけます。

試験では、配信先、バッファの設定、変換と形式変換、、失敗したレコードの扱いを判断します。


主要技術

①ソースと配信先

ソース内容
Direct PUTアプリケーションや AWS サービス ( Logs、、IoT など) が直接書き込む
既存のストリームを読み、配信する
のトピックを読み、配信する
配信先特徴
最も基本の配信先。形式変換とが使える
いったん S3 へ書き、 が でロードする
/ OpenSearch Serverlessログ検索や可視化
テーブルS3 上の Iceberg テーブル ( を含む) へ書き込む。レコードの内容で書き込むテーブルを振り分けられる
、Splunk、Snowflake などサードパーティやカスタムの配信先

⚠️ 頻出: 「ストリーミングデータを、コードを書かず、運用負荷を最小にして S3 (または Redshift) へ保存」は Data Firehose です。


②バッファリング ⚠️ 頻出

バッファサイズ (MB) とバッファ間隔 (秒) を設定し、先に満たした方で配信します。

配信先バッファサイズ (既定)バッファ間隔 (既定)
1〜128 MB (5)0〜900 秒 (300)
テーブル1〜128 MB (5)0〜900 秒 (300)
1〜128 MB (5)0〜900 秒 (300)
1〜100 MB (5)0〜900 秒 (300)
1〜64 MB (5)0〜900 秒 (60)
調整効果代わりに起きること
間隔を短くする (0 秒はゼロバッファリング)配信までの遅れが小さくなるが増え、S3 の PUT の料金と後段のクエリの負荷が増える
サイズと間隔を大きくする大きなファイルになり、 などのクエリが効率的になる配信までの遅れが大きくなる

ゼロバッファリングは、S3 のバックアップ先とでは使えません。間隔を 60 秒未満にすると、S3 へのマルチパートアップロードになり、PUT の料金が増えます。


③Lambda によるデータ変換

はバッファしたレコードを 関数へ渡し、変換した結果を受け取って配信できます。関数は各レコードに recordId と結果 (Ok、Dropped、ProcessingFailed) を付けて返します。

使いどころ例
形式の変換CSV や独自形式のログを にする (形式変換の前処理)
項目の加工のマスキング、不要な項目の削除、項目の追加
フィルター条件に合わないレコードを Dropped にして捨てる

ProcessingFailed になったレコードは、 のエラー出力プレフィックスへ書き出されます。


④形式変換 (JSON → Parquet / ORC) ⚠️ 頻出

は、 の入力を または (列指向の形式) に変換して へ書き込めます。

必要な要素内容
デシリアライザー入力の JSON を読む。OpenX JSON SerDe か Apache Hive JSON SerDe
スキーマ Data Catalog のテーブル定義を参照する
シリアライザーParquet SerDe か ORC SerDe

入力が CSV など JSON 以外なら、先に 変換で JSON にしてから形式変換を使います。スキーマに定義していない項目は、変換後のデータに含まれません。

⚠️ 頻出: 「ストリーミングの JSON を で安く速く問い合わせたい」は、Firehose の形式変換で Parquet にし、Glue Data Catalog のスキーマを使う構成です。CSV が入力なら Lambda 変換を前に挟みます。


⑤動的パーティショニング ⚠️ 頻出

は、レコードの中の値 (例: customer_id、event_date) をキーにして、 のプレフィックスを分けて配信する機能です。 や でパーティションを絞り込めるため、スキャン量とコストが下がります。

キーの取り出し方内容
インライン解析 のレコードから jq の式でキーを取り出す
JSON 以外の形式や複雑な計算が必要なときに、関数でキーを作る

S3 のプレフィックスには !{partitionKeyFromQuery:customer_id} のような式を書きます。

制約内容
アクティブなパーティション数 ストリームあたり 500 まで (申請で 2,500 まで)。超えたレコードはエラー出力プレフィックスへ
遅れ多段のバッファリングのため、設定したバッファ時間の 1.5 倍程度かかることがある
ゼロバッファリング使えない

パーティション数が多すぎる (例: ユーザー ID ごと) と上限に達し、も増えます。カーディナリティ (値の種類の数) が適度なキー (日付、地域、テナント) を選びます。


⑥失敗したレコードとバックアップ

機能内容
ソースレコードのバックアップ/ が配信先のとき、変換前の元データを S3 へ保存できる
失敗データのみ/全データのバックアップ や が配信先のとき、失敗分だけか全部を S3 へ保存
エラー出力プレフィックス変換の失敗、の失敗、パーティション数の超過などのレコードを書き出す
再試行期間配信先が一時的に使えないとき、設定した期間は再試行する

Redshift への配信では、S3 への書き込みは成功したが が失敗した場合、S3 に残ったファイルの一覧 (マニフェスト) から後で手動でロードできます。


⑦圧縮と暗号化

項目選択肢
への圧縮GZIP、Snappy、Zip、Hadoop 互換 Snappy、なし ( が配信先のときは GZIP のみ)
ストリームのサーバー側暗号化 ()、S3 の

形式変換で にする場合は、Parquet の中で列ごとに圧縮されます。


試験対策

①判断マトリクス

問題文のキーワード選ぶ機能・サービス
ストリームを // へ、コード不要・運用最小
ミリ秒〜1秒の遅れで処理Firehose ではなく + /
が多すぎるバッファサイズと間隔を大きくする
配信の遅れを小さくバッファ間隔を短く (0 秒はゼロバッファリング)
を にして S3 へ形式変換 + Data Catalog のスキーマ
CSV を Parquet にして S3 へLambda で JSON に変換 → 形式変換
レコードの値ごとに S3 のプレフィックスを分ける
を除いてから保存Lambda によるデータ変換
配信に失敗したデータを失いたくないS3 のバックアップ、エラー出力プレフィックス
ストリームを テーブルへ直接書くFirehose の Iceberg 配信先

②よくある誤答

  • にリプレイや複数コンシューマーの読み取りを期待すること。それは の役割です。
  • Firehose をミリ秒単位のリアルタイム処理に使うこと。バッファリングのため遅れが出ます。
  • 形式変換が CSV を直接読めると考えること。入力は で、CSV は で前処理します。
  • のキーにユーザー ID のような値の種類が非常に多い項目を使うこと。パーティション数の上限に達します。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください