Q68 — AWS DOP-C02 第3章
第 68/100 問 | ← 第3章
ある企業が、レコード処理を行う定常的なアプリケーションを実行しています。アプリケーションのコンポーネントは、Auto Scalingグループ内のAmazon EC2インスタンス上で動作します。各レコードの処理は、ステップごとの順次操作であり、それぞれが5分以内に完了する必要があります。 現在のシステムの制限は、いずれかのステップが失敗した場合、アプリケーション全体が最初からレコードを再処理することです。企業は、アーキテクチャを更新して、失敗したステップのみを再処理できるようにしたいと考えています。 これらの要件を満たす最も効率的なビジネスソリューションは何ですか?
- A. レコードをAmazon S3に書き込むWebアプリケーションを作成します。S3イベント通知をAmazon Simple Notification Service (Amazon SNS)トピックに発行します。EC2インスタンスを使用してAmazon SNSをポーリングし、処理を開始します。中間結果をAmazon S3に保存します。
- B. アプリケーション内でロジックを実装して処理ステップを実行します。アプリケーションコードをコンテナで実行するように変換し、AWS Fargateでコンテナインスタンスを管理します。コンテナを、自身を呼び出してステップ間の状態を渡すように設定します。
- C. レコードをAmazon Kinesis Data Streamsに送信するWebアプリケーションを作成します。Kinesis Data StreamsおよびAWS Lambda関数を活用して処理を非同期化します。
- D. レコードをAWS Step Functionsに送信するWebアプリケーションを作成します。処理をStep FunctionsのタスクとAWS Lambda関数に分割します。 ✓
正解: D. レコードをAWS Step Functionsに送信するWebアプリケーションを作成します。処理をStep FunctionsのタスクとAWS Lambda関数に分割します。
解説
AWS Step Functionsは、分散型アプリケーションのコンポーネントを編成するためのワークフローサービスであり、Lambdaなどの複数のAWSサービスをステップ化されたタスクとして編成し、エラー処理および再試行機能を提供します。本問では、ステップの失敗時に全体ではなく失敗したステップのみを再試行することが求められています。選択肢Dは、Step Functionsを用いて各処理ステップを独立したタスクとして分割し、Lambda関数で実行することで、ステートマシンがタスクの状態を自動的に追跡し、失敗したステップを個別に再試行可能にします。中間状態は永続化され、復旧ポイントも明確になります。他の選択肢(AはS3/SNSによる状態管理が手動、Bはコンテナ自呼び出しによる管理が複雑、Cはストリーム処理に特化しておりステップ編成をサポートしない)は、ステップ単位のエラー回復をネイティブにサポートしていません。AWS公式ドキュメントによると、Step Functionsは多段階・有状態・エラー処理が必要なシナリオに最適であり、タスク状態は自動的に保存され、障害箇所での正確な復旧が可能です。