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

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

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

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

詳細については、「」を参照してください。関数エラーの処理()AWS Lambda開発者ガイド

注記

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

ステップ 1: Lambda 用の IAM ロールを作成する

AWS Lambda と AWS Step Functions はどちらもコードを実行して AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、Lambda 関数とStep Functions にこれらのリソースへのアクセスを付与する必要があります。

Lambda では、AWS Identity and Access Management(IAM) ロールは、Step Functions では、&IAM ロールを割り当てる必要があります。これは、ステートマシンを作成する際に IAM ロールを割り当てる必要があるのと同じ方法です。

  1. [] にサインインします。IAM コンソールを選択し、ロール,ロールの作成

  2. リポジトリの []信頼されたエンティティの種類を選択ページのAWSservice[] で、Lambda[] リストから [] を選択し、[] を選択します。次へ: アクセス許可.

    注記

    ロールは、Lambda にロールの使用を許可する信頼関係によって自動的に提供されます。

  3. リポジトリの []アクセス許可ポリシーをアタッチするページで [] を選択します。次へ: 確認.

  4. リポジトリの []確認ページで、MyLambdaRoleforロール名を選択してから、[] を選択します。ロールの作成

ロールのリストで、IAM ロールが表示されます。

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

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

重要

あなたのLambda 関数が同じAWSアカウントとAWSステートマシンとしてのリージョン。

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

    [Create a function] を選択します。

  2. [Blueprints] セクションで、フィルターに「step-functions」と入力し、[step-functions-error] 設計図を選択します。

  3. 基本的な情報セクションで、Lambda 関数を構成します。

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

    2. [Role (ロール)] で、[既存のロールを選択] を選択します。

    3. を使用する場合既存のロール] で、先ほど作成した Lambda ロール

      注記

      作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまにあと数分かかる場合があります。

  4. 次のコードがLambda 関数コードペインに表示されます。

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

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

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

    Lambda 関数が作成されたら、次の例に示すように、ページの右上隅に表示されているその Amazon リソースネーム (ARN) を記録します。

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction

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

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

  1. [FailFunction] ページで、[Test] を選択します。

  2. テストイベントの構成ダイアログボックスで、FailFunctionforイベント名を選択してから、[] を選択します。作成

  3. リポジトリの []FailFunctionページ、TestLambda 関数を使用します。

    テストの結果 (シミュレートしたエラー) がページの下部に表示されます。

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

の使用Step Functions コンソールを使用するステートマシンを作成するには、TaskステートにCatchfield. Lambda 関数への参照をTask状態。Lambda 関数が呼び出され、実行中に失敗します。Step Functions は再試行間のエクスポネンシャルパックオフを使用して、関数を 2 回再試行します。

  1. を開くStep Functions コンソールを選択し、ステートマシンを作成する

  2. リポジトリの []ステートマシンの作成ページで [] を選択します。テンプレートから始めるを選択してから、[] を選択します。エラーの捕捉

  3. [タイプ] で、[標準] を選択します。

  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 State言語を使用したステートマシンの説明です。CreateAccount という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure」を参照してください。

    Retry フィールドの構文の詳細については、「再試行とキャッチの使用例」を参照してください。

    注記

    Lambda での未処理のエラーはLambda.Unknownをエラー出力で返します。これには、メモリ不足エラーと関数のタイムアウトが含まれます。あなたは上で一致することができますLambda.Unknown,States.ALL, またはStates.TaskFailedを使用してこれらのエラーを処理します。Lambda が最大呼び出し回数に達すると、エラーはLambda.TooManyRequestsException。Lambda の詳細については、HandledおよびUnhandledエラーの詳細については、FunctionError()AWS Lambda開発者ガイド

  5. グラフをビジュアルワークフローペインを使用して、Amazon States Language コードでステートマシンが正しく記述されていることを確認します。

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

  6. [Next] を選択します。

  7. 「」と入力します。名前にステートマシンを割り当てるか、デフォルト名Catchfailure

  8. 選択既存のロールを選択する,マイラムダロールドロップダウンリストで [] を選択します。

  9. [Create state machine (ステートマシンの作成)] をクリックします。

ステップ 5: 新しい実行の開始

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

  1. リポジトリの []CatchStateMachineページで [] を選択します。実行を開始します

    [New execution (新しい実行)] ページが表示されます。

  2. (省略可能) 実行を識別しやすくするために、実行名を入力ボックスに移動するとそのように表示されます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

    注記

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

  3. [Start Execution] を選択します。

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

  4. [Execution Details] (実行の詳細) セクションで、[Output] (出力) セクションを展開して、ワークフローの出力を表示します。

    
                            実行出力
  5. カスタムエラーメッセージを表示するには、[CreateAccountVisual workflow] (ビジュアルワークフロー) で [] を選択して、[Output] (出力) セクションを展開します。

    
                            エラー出力
    注記

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