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