【正解】D
【0からの解説】
この問題は、CloudWatch Logs のログを段階的に S3 へアーカイブする際の「正しい転送方法」と「正しいストレージクラスの遷移」を、コスト効率と要件の両面から選ぶものです。
まず「ログ(log events)を S3 に送る方法」を考えます。CloudWatch Logs のログイベントをほぼリアルタイムで別の宛先に転送する公式の仕組みは「サブスクリプションフィルター (subscription filter)」です。一方「メトリクスストリーム (metric stream)」は、ログではなく CloudWatch メトリクス(数値)をストリーミングするための機能なので、ログイベントを S3 に保存する用途には不適切です。よって A・B(メトリクスストリーム使用)は誤りです。
次に「転送先への配信サービス」です。Amazon Data Firehose(旧 Kinesis Data Firehose)はフルマネージドで、バッファリング・S3 への自動配信・スケーリングまで面倒を見てくれるため、運用負荷とコストの両面で有利です。一方 Kinesis Data Streams は生のストリームであり、S3 へ書き込むコンシューマを別途用意・運用する必要があり、サブスクリプションフィルターの宛先としても追加の作り込みが要ります。よってマネージドな Firehose を使う D が有利です。
最後に「ストレージクラスの遷移」です。要件は、(a) 90 日まで低レイテンシ → 90 日後に S3 Standard-IA(即時アクセス可・低コスト)へ移行、(b) 180 日後は取得がまれでレイテンシ不問 → 最も安価なアーカイブクラスへ移行、です。180 日後にレイテンシが重要でないなら、取り出しに時間はかかるが最安の S3 Glacier Deep Archive が最もコスト効率的です。
また「データ保護」の観点でも、S3 Standard-IA は複数 AZ にまたがって冗長化されており、One Zone-IA(単一 AZ)より耐久性が高い点で D が適切です。
以上より、サブスクリプションフィルター+Firehose+S3 Standard-IA(90日)→Glacier Deep Archive(180日) の D が正解です。
【誤りの選択肢】
A:ログイベントの転送に「メトリクスストリーム」を使う点が誤り(メトリクス用であり、ログには使えません)。また配信に Kinesis Data Streams を使うため自前のコンシューマが必要で運用負荷が高くなります。
B:A 同様「メトリクスストリーム」を使う点が誤りです。さらに 90 日後の移行先が S3 One Zone-IA(単一 AZ)で、データ保護要件に対して耐久性が劣ります。
C:転送方法(サブスクリプションフィルター)は正しいものの、配信に Kinesis Data Streams を使うため S3 へ書き込むコンシューマの自前運用が必要で、Firehose より運用負荷が高くなります。また 180 日後の移行先が Glacier Instant Retrieval で、レイテンシ不問の要件に対しては Deep Archive の方が安価でコスト効率が劣ります。
【参考】
CloudWatch Logs サブスクリプションフィルターS3 ストレージクラスS3 ライフサイクル設定によるオブジェクトの移行