Functionsでパラメータをバリデーションする方法ステートマシン定義で存在しないパラメータを指定した場合、States.Runtimeエラーが発生し、処理が終了します。このエラーを防ぐために、Choiceステートを使用して、パラメータが存在するかを検証する方法を紹介します。Functions#AWS八木優成2022.08.12この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、ヤギです。Functionsのパラメータをバリデーションする方法です。Functionsは、アクション間でパラメータ指定して、受け渡すことができます。存在しないパラメータをASLで指定すると、States.Runtimeエラーが発生します。このエラーはリトライ、キャッチすることができず、ジョブが途中終了します。このStates.RuntimeエラーはStates.ALLでは検出されません。Catchでエラー通知を行なっていた場合、通知処理が実行されないため、ジョブの失敗に気づくことができません。このため、存在が保証出来ないパラメータをASLで指定する場合は、事前にパラメータが存在するかどうかのバリデーションが必要です。入力値$.lambdaInputをLambda関数に渡し、エラーが起きなければ正常終了、エラーが発生すればエラーハンドリングを行う、というシンプルなステートマシンを例に検証します。}}存在しないパラメータをASLで参照した場合このASLではLambdaに$.lambdaInputを渡しています。以下の入力値でステートマシンを実行した場合、$.lambdaInputが存在しないため、States.Runtimeエラーが発生します。here"}'CatchでStates.ALLを指定していますが、States.Runtimeエラーはキャッチされていません。Failureが実行されてない)公式ドキュメントでも言及されている通り、States.RuntimeはStates.ALLではキャッチされません。リトライ、キャッチ自体も行うことができません。エラーは再試行可能ではなく、常に実行が失敗します。エラーは検出されません。https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/concepts-error-handling.html#states-runtime-errorこのため、$.lambdaInputが存在するかを、事前に検証する必要があります。Choiceステートによるパラメータのバリデーション$.lambdaInputが存在することを保証するには、パラメータを利用するアクションの前に、Choiceステートを置き、パラメータが存在するかを確認します。}}これで$.lambdaInputが存在しない場合も、エラーハンドリングが可能になりました。実際に$.lambdaInputパラメータがない状態で実行してみると、想定通りエラー状態にステートマシンが遷移していることがわかります。まとめ存在しないパラメータをASLで参照するとStates.Runtimeエラーが発生します。このエラーはStates.ALLではキャッチすることができず、ステートマシンの実行失敗に気づけない可能性があります。存在が保証出来ないパラメータをASLで参照する場合は、Choiceステートで、パラメータが存在するかを確認するようにしましょう。