Step Functions ステートマシンでのエラー条件の処理 - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step Functions ステートマシンでのエラー条件の処理

このチュートリアルでは、カスタムエラーをスローするために構築された Lambda 関数の例を呼び出すタスク状態を持つ AWS Step Functions ステートマシンを作成します。

タスクは の 1 つでFallback 状態Catchフィールドを設定できます。統合によってエラーを受信すると、エラー名に基づいてキャッチフィールドによって次のステップが選択されます。

ステップ 1: エラーをスローする Lambda 関数を作成する

Lambda 関数を使用してエラー条件をシミュレートします。

  1. https://console.aws.amazon.com/lambda/ で AWS Lambda コンソールを開きます。

  2. [関数の作成] を選択してください。

  3. 「設計図を使用」、「 を検索Step Functions」、「カスタムエラーをスローする」を選択します。

  4. [関数名] に「ThrowErrorFunction」と入力します。

  5. [Role] で、[Create a new role with basic Lambda permissions] を選択します。

  6. [関数の作成] を選択してください。

    次のコードがコードペインに表示されます。

    export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };

ステップ 2: Lambda 関数をテストする

ステートマシンを作成する前に、Lambda 関数が呼び出されたCustomErrorときに をスローすることを確認します。

  1. [テスト] タブを選択します。

  2. 新しいイベントを作成し、デフォルトのイベント JSON を維持するを選択する

  3. テストを選択して、テストイベントで関数を呼び出します。

  4. 実行関数を展開して、スローされたエラーの詳細を確認します。

これで、Lambda 関数がカスタムエラーをスローする準備ができました。

次のステップでは、そのエラーをキャッチして再試行するようにステートマシンを設定します。

ステップ 3: ステートマシンを作成する

Step Functions コンソールを使用して、Catch設定Task ワークフロー状態で を使用するステートマシンを作成します。ステートマシンは Lambda 関数を呼び出します。Lambda 関数は、関数が呼び出されたときにエラーのスローをシミュレートするために構築されました。Step Functions は、再試行間のエクスポネンシャルバックオフを使用して関数を再試行します。

  1. Step Functions コンソールを開き、メニューからステートマシンを選択し、ステートマシンの作成を選択します。

  2. 空白から作成を選択し、ステートマシン名CatchErrorStateMachine と入力します。

  3. デフォルトのタイプ (標準) を受け入れ、続行を選択して Workflow Studio でステートマシンを編集します。

  4. コードを選択して ASL エディタに切り替え、コードを次のステートマシン定義に置き換えます。

    { "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account-id:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }

ステップ 4: ステートマシンを設定する

ステートマシンを実行する前に、前に作成した Lambda 関数に接続する必要があります。

  1. 設計モードに切り替えて、CreateAccount という名前の Lambda : Invoke タスク状態を選択します。

  2. 設定タブで、API 引数を探します。関数名 で、前に作成した Lambda 関数を選択します。

  3. 「作成」を選択し、ロールを確認し、「確認」を選択してステートマシンを作成します。

ステップ 5: ステートマシンを実行する

ステートマシンを作成して設定したら、ステートマシンを実行してフローを調べることができます。

  1. エディタで、Execute を選択します。

    または、ステートマシンリストから実行の開始を選択します。

  2. 実行の開始ダイアログボックスで、生成された ID を受け入れ、入力に次の JSON を入力します。

    { "Cause" : "Custom Function Error" }
  3. [実行のスタート] を選択します。

Step Functions コンソールは、実行の詳細ページと呼ばれる実行 ID というタイトルのページに移動します。ワークフローの進行時と完了後に実行結果を確認できます。

実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「実行の詳細の概要」を参照してください。

ステートマシンは Lambda 関数を呼び出し、 をスローしますCustomErrorグラフビューCreateAccount ステップを選択すると、状態出力が表示されます。ステートマシンの出力は次の図のようになります。

カスタムエラーをキャッチするワークフローのスクリーンショットの例。

おめでとうございます。

これで、Lambda 関数によってスローされたエラー条件をキャッチして処理できるステートマシンができました。このパターンを使用して、ワークフローに堅牢なエラー処理を実装できます。

注記

また、タイムアウト時に再試行するステートマシンや、エラーやタイムアウトが発生したときに、Catch を使用して特定の状態に移行するステートマシンを作成できます。これらのエラー処理方法の例については、Retry の使用例と Catch の使用例を参照してください。