無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

AWS Step Functionsを使用した注文処理ワークフローがあります。あるタスクステートでDynamoDBのPutItemオペレーションを実行しますが、トラフィックスパイク時にProvisionedThroughputExceededExceptionが発生してステートマシン実行が失敗します。アプリケーションコードを変更せずワークフロー定義のみの変更で解決したい場合、最も適切な方法はどれですか?

A
DynamoDBタスクステートのASL定義にRetry設定を追加し、ErrorEqualsに「DynamoDB.ProvisionedThroughputExceededException」を指定してIntervalSeconds・BackoffRate・MaxAttemptsで指数バックオフを構成する
✓ 正解
ASLのRetryフィールドにErrorEqualsで特定のエラーを指定し、指数バックオフのパラメータを設定することで、ステートマシン定義の変更のみでトランジェントエラーへの自動再試行を実装できる。アプリケーションコード変更不要で要件を満たす最もシンプルな方法。
B
ステートマシンの失敗実行をキャプチャするSQSデッドレターキューをStep Functionsに設定し、SQSメッセージをトリガーとするLambda関数で失敗した実行を自動的に再起動する仕組みを構築する
Step FunctionsにSQSデッドレターキューを直接設定する標準機能はなく、失敗実行の再起動にはカスタムLambda関数が必要。追加コードの実装と複数コンポーネントの管理が必要になり、「コードを変更せず」という要件に反する。
C
DynamoDBへの呼び出しを新しいLambda関数でラップしてProvisionedThroughputExceededExceptionをtry-catchで捕捉し、内部で再試行ロジックを実装した後にStep Functionsへ成功レスポンスを返すよう変更する
Lambda関数でラップするにはアプリケーションコードと新規Lambda関数を実装する必要があり、「アプリケーションコードを変更せず」という制約に反する。ASLのRetry設定というより直接的な解決策があるため不適切。
D
Standard WorkflowをExpress Workflowに変更することで、At-least-once実行保証と組み込み自動再試行機能を利用してDynamoDBスロットリングエラーを透過的に回避する
Express WorkflowはAt-least-once実行保証を持つが、トランジェントエラーへの組み込み自動再試行機能は持たない。Standard/Expressどちらでも、ProvisionedThroughputExceededExceptionへの再試行にはRetry設定を手動で定義する必要がある点は同じ。

解説

Step FunctionsのAmazon States Language(ASL)ではタスクステートにRetryフィールドを定義でき、ErrorEqualsで対象エラーを指定して自動再試行を構成できる。IntervalSeconds(初回待機秒数)・BackoffRate(指数バックオフ係数)・MaxAttempts(最大試行回数)を設定することで、ProvisionedThroughputExceededException発生時に指数バックオフで再試行し、一時的なスロットリングを透過的に処理できる。ワークフロー定義(ASL)の変更のみで実現でき、アプリケーションコードは一切不要。 選択肢BのSQSデッドレターキューはStep Functionsの標準機能ではなく、失敗した実行の再起動には追加のLambda関数とコード実装が伴い、「コードを変更せず」という制約に反する。 選択肢CのLambdaラッパーは新規Lambda関数の作成とコード実装が必要で、「アプリケーションコードを変更せず」という制約に反する。 選択肢DのExpress Workflowへの変更は自動再試行機能を提供しない。Standard/Expressの違いは実行時間上限・べき等性・監査ログ保存期間などであり、スロットリングエラーへの再試行にはRetry設定が必要な点は変わらない。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る