Step Functions ステートマシンを使用してエラー条件を処理する - AWS Step Functions

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

Step Functions ステートマシンを使用してエラー条件を処理する

このチュートリアルでは、Catch フィールドを使用する AWS Step Functions ステートマシンを作成します。-Catch[] フィールドではAWS Lambda関数を使用して、エラーメッセージのタイプに基づいて条件付きロジックを使用して応答します。これは、関数エラー処理と呼ばれるテクニックです。

詳細については、AWS Lambda デベロッパーガイド関数エラーの処理を参照してください。

注記

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

ステップ 1: 失敗する Lambda 関数を作成します

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

重要

Lambda 関数がステートマシンと同じ AWS アカウントと AWS リージョンの下にあることを確認します。

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

    [関数の作成] を選択します。

  2. 選択設計図の使用「」と入力します。step-functionsフィルタに入力し、ステップ関数エラー設計図。

  3. [Configure] (設定) を選択します。

  4. [Basic information] (基本情報) セクションで、Lambda 関数を構成:

    1. [Name] (名前) に「FailFunction」と入力します。

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

  5. 次のコードが [Lambda function cod] (関数コード) ペインに表示されます。

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

    context オブジェクトはエラーメッセージ This is a custom error! を返します。

  6. [Create function] (関数の作成) を選択します。

    Lambda 関数が作成されたら、ページの右上隅に表示されている関数の Amazon リソースネーム (ARN) をコピーします。ARN をコピーするには、 
                                copy Amazon Resource Name
                            。ARN の例を以下に示します。

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  7. [Deploy‬] (デプロイ) をクリックします。

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

Lambda 関数をテストしてオペレーションを確認します。

  1. FailFunction ページで、[Test] (テスト) を選択します。

  2. [Configure test event] (テストイベントを設定) ダイアログボックスで、[Event name] (イベント名) に FailFunction と入力して、[Create] (作成) を選択します。

  3. リポジトリの []FailFunction[] ページでTest[Lambda 関数をテストします。

    テストの結果 (シミュレートしたエラー) が新しいタブに表示されます実行結果

ステップ 3: Catch フィールドを使用するステートマシンの作成

Step Functions コンソールにより、Task 状態で Catch フィールドを使用するステートマシンを作成します。Task ステートに Lambda 関数へのリファレンスを追加します。Lambda 関数が呼び出され、実行中に失敗します。Step Functions は、再試行間のエクスポネンシャルパックオフを使用して、関数を 2 回再試行します。

  1. Step Functions コンソールを開き、[Create a state machine] (ステートマシンの作成)] を選択します。

  2. リポジトリの []オーサリング方法の選択[] ページでワークフローをコードに記述する

  3. を使用する場合タイプの場合は、デフォルトの選択を保持します。つまり、Standard

  4. 定義[] ペインで、次のコードを貼り付けますが、の ARN を置き換えます先ほど作成した Lambda 関数Resourceフィールド。

    { "Comment": "A Catch example of the Amazon States Language using an AWS Lambda function", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback" }, { "ErrorEquals": ["States.TaskFailed"], "Next": "ReservedTypeFallback" }, { "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" } ], "End": true }, "CustomErrorFallback": { "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true }, "ReservedTypeFallback": { "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true }, "CatchAllFallback": { "Type": "Pass", "Result": "This is a fallback from any error code", "End": true } } }

    これは、Amazon ステートメント言語を使用したステートマシンの説明です。CreateAccount という名前の単一の Task 状態を定義します。詳細については、State Machine Structure を参照してください。

    Retry フィールドの構文の詳細については、Retry の使用例と Catch の使用例 を参照してください。

    注記

    Lambda での未処理のエラーは、エラー出力で Lambda.Unknown として報告されます。具体的には次のとおりです。 out-of-memory エラーと関数のタイムアウト。Lambda.UnknownStates.ALL、または States.TaskFailed を一致させて、こういったエラーに処理できます。Lambda が最大呼び出し数に達すると、エラーは Lambda.TooManyRequestsException となります。Lambda 関数のエラーの詳細については、「」を参照してください。エラー処理と自動再試行AWS Lambdaデベロッパーガイド

  5. [Visual Workflow] (ビジュアルワークフロー) ペインのグラフを使用して、Amazon ステートメント言語コードでステートマシンが正しく記述されていることをチェックします。

    グラフが表示されない場合は、[Visual Workflow] ペインの 
       refresh
    を選択します。

  6. [次へ] を選択します。

  7. 「」と入力します。[Name] (名前)[Name your state machine] (Catchfailure

  8. In (イン)アクセス許可で、新規ロールの作成

  9. Create State Machine(ステートマシンの作成)を選択します。

ステップ 4: 新しい実行のスタート

ステートマシンを作成した後、実行をスタートできます。

  1. リポジトリの []キャッチ失敗[] ページで実行開始

    -実行開始[] ダイアログボックスが表示されます。

  2. (オプション) 実行を識別するために、[Name] (実行名) を[Name] (名前)ボックスに移動するとそのように表示されます。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。

    注記

    Step Functions では、非 ASCII 文字を含むステートマシン、実行、およびアクティビティ名を作成できます。これらの非 ASCII 名は Amazon CloudWatch では機能しません。確実に追跡できるよう CloudWatch メトリクスの場合は、ASCII 文字のみを使用する名前を選択します。

  3. [Start Execution] (実行のスタート) を選択します。

    ステートマシンの新しい実行がスタートされ、実行中の実行が表示されている新しいページが表示されます。

  4. に移動します。実行出力[] タブで、ワークフローの出力を表示します。

    
                            実行出力
  5. カスタムエラーメッセージを表示するには、CreateAccountグラフインスペクターペインを選択し、ステップ出力[] タブ。

    
                            エラー出力
    注記

    状態入力とエラーを保持するには、ResultPath を使用します。「ResultPath を使用して、エラーと入力の両方を Catch に含める」を参照してください。