Q52 — AWS SAA-C03 第16章
第 52/100 問 | ← 第16章
Q1252. ある企業は、CSV形式の顧客データを保有しています。このデータはAmazon S3に保存されており、AWS Glue Data Catalogでカタログ化されています。また、同社には歴史的なコールセンターデータを格納するAmazon Redshiftクラスターがありますが、現在負荷が非常に高く、新たなデータをこのクラスターにロードしたくありません。企業は、Amazon S3上の顧客データとAmazon Redshift上の歴史的コールセンターデータを結合(JOIN)したいと考えています。この結合処理は、数時間かかる日次バッチプロセスとして実行されます。これらの要件を満たす中で、運用オーバーヘッドが最も少ないソリューションはどれですか?
- A. AWS Lambda関数を使用して、Amazon Redshiftから歴史的コールセンターデータをAmazon S3へUNLOADします。その後、AWS Glue ETLスクリプトを用いて、Amazon S3上に存在する顧客データと結合(JOIN)を行います。 ✓
- B. AWS CLIを使用して、Amazon Redshiftから歴史的コールセンターデータをAmazon EC2インスタンスへエクスポートします。その後、AWS Glue ETLスクリプトを用いて、Amazon S3上に存在する顧客データと結合(JOIN)を行います。
- C. Amazon S3上に存在する顧客データに対してAmazon Redshift Spectrumを用いた外部テーブルを作成し、Amazon Redshift上で歴史的コールセンターデータと結合(JOIN)を行います。
- D. Apache Sqoopを使用して、Amazon Redshiftから歴史的コールセンターデータをAmazon EMRクラスターへエクスポートします。その後、Apache Hiveを用いて、Amazon S3上に存在する顧客データと結合(JOIN)を行います。
正解: A. AWS Lambda関数を使用して、Amazon Redshiftから歴史的コールセンターデータをAmazon S3へUNLOADします。その後、AWS Glue ETLスクリプトを用いて、Amazon S3上に存在する顧客データと結合(JOIN)を行います。
解説
運用オーバーヘッドが最も少ない最適なソリューションは、選択肢Aです。これは、RedshiftデータをS3へUNLOADし、AWS Glue ETLスクリプトで結合処理を行うというアプローチです。以下に詳細な分析を示します。 【主な要件】 ・Redshiftクラスターへの新規データロードを回避(既に高負荷のため)。 ・Amazon S3上の顧客データとAmazon Redshift上の歴史的コールセンターデータを、日次バッチで結合(JOIN)する。 ・運用オーバーヘッドを最小限に抑える(手動エクスポートや複雑な構成を避ける)。 【各選択肢の検討】 A:LambdaによるRedshift → S3 UNLOAD+AWS Glueでの結合処理(最適) ・RedshiftのUNLOADコマンド(Lambda経由)により、スケーラブルかつ自動的にS3へデータをエクスポート可能。 ・AWS Glue ETL(PySpark)により、S3上の顧客データとUNLOADされたRedshiftデータを効率的に結合可能。 ・Redshiftへのデータロードは一切発生せず、すべてRedshift外で処理される。 ・完全サーバーレス(Lambda+Glue)であり、保守・管理コストが極めて低い。 B:CLIによるRedshift → EC2エクスポート+AWS Glueでの結合処理(高オーバーヘッド) ・EC2へのエクスポートには手動またはスクリプトによる対応が必要で、自動化が困難。 ・EC2インスタンスのスケーリング、パッチ適用など継続的な管理作業が発生。 ・S3ベースの処理に比べて非効率。 C:Redshift SpectrumによるS3データ参照+Redshift内での結合(要件違反) ・Redshift SpectrumはS3のデータをクエリ可能だが、結合(JOIN)自体はRedshiftクラスター内で実行されるため、既存の高負荷状態をさらに悪化させる可能性がある。 ・企業が明確に「Redshiftへの新規データロードを避けたい」としている点に反する(Spectrum利用でもRedshiftの計算リソースが使用される)。 D:SqoopによるRedshift → EMRエクスポート+Hiveでの結合(最も複雑・高オーバーヘッド) ・EMRクラスターの構成・スケーリング・チューニング・コスト管理など、多大な運用負担が発生。 ・SqoopおよびHiveの導入・保守は、サーバーレスのAWS Glueに比べて大幅に複雑。 ・日次バッチ処理には不適切な過剰設計。 【なぜ選択肢Aが最適か】 ・Redshiftへのデータロードが不要のため、パフォーマンス影響を完全に回避。 ・LambdaによるUNLOADとGlueによるETLは、CloudWatch Eventsなどにより完全自動化可能。 ・S3とGlueは自動スケーリングに対応しており、スケーラビリティとコスト効率に優れる。 ・EC2やEMRなどのインフラ管理が不要で、運用保守負荷が最小限。 【選択肢Aの実装ステップ例】 1. Lambda関数の設定:UNLOADコマンドを実行し、RedshiftテーブルをS3(Parquet/CSV形式)へエクスポート。CloudWatch Eventsで日次実行をスケジュール。 2. AWS Glue ETLジョブの設定:UNLOADされたRedshiftデータとS3上の顧客CSVデータを読み込み、PySparkで結合処理を実行。結果をS3などに出力。 3. モニタリングと最適化:Glueのメトリクスでジョブ実行状況を監視。パーティショニングや圧縮形式を調整してコスト削減。 最終回答:A このソリューションは、Redshiftへの負荷増加を回避しつつ、最小限の運用工数で要件を完全に満たします。