SAA-C03高パフォーマンスなアーキテクチャの設計HARD単一選択

ある企業が、Amazon Kinesis Data Streams からリアルタイムでデータを消費して Amazon S3 に保存し、さらに Amazon Redshift にもリアルタイムでロードしたい。S3 への保存は JSON → Parquet 変換を行いたい。追加の ETL コードを書かずに、最小限の設定でこれを実現する最も適切なソリューションはどれか。

  1. A. Amazon Data Firehose(旧 Kinesis Data Firehose)デリバリーストリームを 2 つ作成する。1 つは S3 を配信先として Dynamic Partitioning と Lambda 変換(または Apache Parquet 変換)を設定し、もう 1 つは Redshift を配信先として設定する。Kinesis Data Streams から両 Firehose に扇出(fan-out)する。
  2. B. AWS Glue Streaming ETL ジョブを使って Kinesis から S3(Parquet 変換)と Redshift に同時書き込みする。
  3. C. Lambda 関数で Kinesis データを消費し、S3 に Parquet 変換して保存し、Redshift COPY コマンドで定期的にロードする。
  4. D. Amazon EMR で Spark ストリーミングジョブを起動して Kinesis からデータを消費し、S3 と Redshift に書き込む。
解答と解説を見る

正解: A

Amazon Data Firehose は S3 配信時にデータ変換(JSON → Parquet/ORC)を AWS Lambda または組み込みの Parquet 変換で実行でき、Redshift 配信時は S3 を経由して Redshift COPY コマンドを自動実行する。1 本の Kinesis Data Streams を共通のソースとして、配信先の異なる Firehose 配信ストリームを 2 つ(S3 用と Redshift 用)作成し、それぞれにソースとして同じデータストリームを登録すれば、両方の配信先へデータが流れる。配信ストリーム側で扇出が難しい場合でも、Lambda コンシューマー経由で 2 つの Firehose に PutRecord する形でファンアウトできる。いずれも ETL コードの記述が最小限で済む。選択肢CのLambda による処理は Kinesis の全シャードに Lambda を設置して S3・Redshift への書き込みロジックを自前で実装する必要があり、コードが複雑になる。選択肢DのEMR Spark ストリーミングは高機能だが、EMR クラスターの管理が必要で最小限の設定という要件に合わない。選択肢BのGlue Streaming ETL も実現は可能だが、Glue ジョブの設定・管理や S3・Redshift への同時書き込みの作り込みが Firehose より複雑になりやすい。

▸ この試験を本気で演習する(全150問・無料)