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

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

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

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

詳細については、「」を参照してくださいAWS Lambda の Node.js の 関数エラー AWS Lambda デベロッパーガイド

注記

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

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

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

重要

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

  1. を開く AWS Lambda の コンソールhttps://console.aws.amazon.com/lambda/

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

  3. [ブループリントを使う] を選択し、検索ボックスに step-functions を入力してから [カスタムエラーをスローする] ブループリントを選択します。

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

  5. [ロール] は、デフォルトの選択 ([基本的な Lambda アクセス許可で新しいロールを作成する]) のままにします。

  6. 次のコードが [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! を返します。

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

  8. Lambda 関数を作成したら、ページの右上隅に表示される関数の Amazon リソースネーム (ARN) をコピーします。の例を次に示しますARN。

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  9. [デプロイ] を選択します。

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

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

  1. FailFunction ページで、テスト タブを選択し、テスト を選択します。テストイベントを作成する必要はありません。

  2. テスト結果 (シミュレートしたエラー) を確認するには、[実行結果] で、[詳細] を展開します。

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

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

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

  2. [テンプレートを選択] ダイアログボックスで [空白] を選択します。

  3. 選択 を選択して、 で Workflow Studio を開きますデザインモード

  4. [コード] を選択してコードエディタを開きます。コードエディタで、ワークフローの Amazon ステートメント言語 (ASL) 定義を記述および編集します。

  5. 次のコードを貼り付けますが、前に Resourceフィールドで作成した Lambda 関数ARNの を置き換えます。

    { "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 HandledUnhandledエラーの詳細については、FunctionError「」の「」を参照してください。 AWS Lambda デベロッパーガイド

  6. (オプション) グラフの視覚化 では、ワークフローをリアルタイムでグラフィカルに視覚化して表示します。

  7. ステートマシンの名前を指定します。これを行うには、デフォルトのステートマシン名 の横にある編集アイコンを選択しますMyStateMachine。次に、[ステートマシンの設定][ステートマシン名] ボックスに名前を入力します。

    このチュートリアルでは、Catchfailure と入力します。

  8. (オプション) [ステートマシンの設定] で、ステートマシンのタイプや実行ロールなど、他のワークフロー設定を指定します。

    このチュートリアルでは、[ステートマシンの設定] のデフォルト設定をすべてそのまま使用します。

  9. [ロールの作成を確認] ダイアログボックスで、[確認] を選択して続行します。

    [ロールの設定を表示] を選択して [ステートマシンの設定] に戻ることもできます。

    注記

    Step Functions が作成するIAMロールを削除した場合、Step Functions は後で再作成できません。同様に、ロールを変更した場合 (IAMポリシー内のプリンシパルから Step Functions を削除した場合など)、Step Functions は後で元の設定を復元できません。

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

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

  1. [ステートマシン] ページで [Catchfailure] を選択します。

  2. [Catchfailure] ページで、[実行を開始] を選択します。[実行を開始] ダイアログが表示されます。

  3. [実行を開始] ダイアログボックスで、以下の操作を行います。

    1. (オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。

      非ASCII名前とログ記録

      Step Functions は、 ASCII以外の文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。

    2. (オプション) 入力ボックスに、ワークフローを実行するための入力値を JSON形式で入力します。

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

    4. Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。

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

    例えば、カスタムエラーメッセージを表示するには、グラフビューCreateAccountステップを選択し、出力タブを選択します。

    実行からのエラーメッセージを含む出力のスクリーンショット例。
    注記

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