翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions ステートマシンを使用してエラー条件を処理する
このチュートリアルでは、 AWS Step Functions Fallback 状態フィールドを持つステートマシンを作成します。Catch
AWS Lambda フィールドは関数を使用して、エラーメッセージタイプに基づいて条件付きロジックで応答します。これは、関数エラー処理と呼ばれるテクニックです。
詳細については、「AWS Lambda デベロッパーガイド」の「Node.js のAWS Lambda 関数エラー」を参照してください。
注記
また、タイムアウト時に再試行するステートマシンや、エラーやタイムアウトが発生したときに、Catch
を使用して特定の状態に移行するステートマシンを作成できます。これらのエラー処理方法の例については、Retry の使用例と Catch の使用例を参照してください。
このトピックの内容
ステップ 1: 失敗する Lambda 関数を作成する
Lambda 関数を使用してエラー条件をシミュレートします。
重要
Lambda AWS AWS 関数がステートマシンと同じアカウントとリージョンにあることを確認してください。
-
https://console.aws.amazon.com/lambda/ AWS Lambda でコンソールを開きます。
-
[関数を作成] を選択します。
-
[ブループリントを使う] を選択し、検索ボックスに
step-functions
を入力してから [カスタムエラーをスローする] ブループリントを選択します。 -
[関数名] に
FailFunction
と入力します。 -
[ロール] は、デフォルトの選択 ([基本的な Lambda アクセス許可で新しいロールを作成する]) のままにします。
-
次のコードが [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!
を返します。 -
[関数を作成] を選択します。
-
Lambda 関数が作成されたら、ページの右上隅に表示されている関数の Amazon リソースネーム (ARN) をコピーします。ARN をコピーするには、 をクリックします。ARN の例を次に示します。
arn:aws:lambda:us-east-1:123456789012:function:FailFunction
-
デプロイを選択します。
ステップ 2: Lambda 関数をテストする
Lambda 関数をテストしてオペレーションを確認します。
-
FailFunctionページで [テスト] タブを選択し、[テスト] を選択します。テストイベントを作成する必要はありません。
-
テスト結果 (シミュレートしたエラー) を確認するには、[実行結果] で、[詳細] を展開します。
ステップ 3: Catch フィールドを使用するステートマシンを作成する
Step Functions コンソールにより、タスク 状態で Catch
フィールドを使用するステートマシンを作成します。Task 状態に Lambda 関数へのリファレンスを追加します。ステートマシンは Lambda 関数を呼び出しますが、実行中に失敗します。Step Functions は、再試行間のエクスポネンシャルパックオフを使用して、関数を 2 回再試行します。
-
Step Functions コンソール
を開き、[Create a state machine] (ステートマシンの作成)] を選択します。 -
[テンプレートを選択] ダイアログボックスで [空白] を選択します。
-
[選択] を選びます。これにより、デザインモード で Workflow Studio が開きます。
-
[コード] を選択してコードエディタを開きます。コードエディタで、ワークフローの Amazon ステートメント言語 (ASL) 定義を記述して編集します。
-
次のコードを貼り付けます。ただし、
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.Unknown
、States.ALL
、またはStates.TaskFailed
を一致させて、こういったエラーに処理できます。Lambda が最大呼び出し数に達すると、エラーはLambda.TooManyRequestsException
となります。Lambda 関数のエラーの詳細については、「AWS Lambda デベロッパーガイド」の「エラー処理と自動再試行」を参照してください。 -
(オプション) グラフ可視化 では、ワークフローをリアルタイムでグラフィカルに視覚化して表示します。
-
ステートマシンの名前を指定します。そのためには、デフォルトのステートマシン名の横にある編集アイコンを選択します。MyStateMachine次に、[ステートマシンの設定] の [ステートマシン名] ボックスに名前を入力します。
このチュートリアルでは、
Catchfailure
と入力します。 -
(オプション) [ステートマシンの設定] で、ステートマシンのタイプや実行ロールなど、他のワークフロー設定を指定します。
このチュートリアルでは、[ステートマシンの設定] のデフォルト設定をすべてそのまま使用します。
-
[ロールの作成を確認] ダイアログボックスで、[確認] を選択して続行します。
[ロールの設定を表示] を選択して [ステートマシンの設定] に戻ることもできます。
注記
Step Functions が作成した IAM ロールを削除すると、Step Functions を後で再作成することはできません。同様に、ロールを変更すると (例えば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions でそれを元の設定に復元することはできません。
ステップ 4: ステートマシンを実行する
ステートマシンを作成した後、それを実行できます。
-
[ステートマシン] ページで [Catchfailure] を選択します。
-
[Catchfailure] ページで、[実行を開始] を選択します。[実行を開始] ダイアログが表示されます。
-
[実行を開始] ダイアログボックスで、以下の操作を行います。
-
(オプション) 実行を識別するには、[名前] ボックスに名前を指定します。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。
注記
Step Functions では、ステートマシン、実行、アクティビティの名前、および ASCII 以外の文字を含むラベルを作成できます。これらの非ASCII名は、Amazonでは機能しません。 CloudWatch CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択してください。
-
(オプション) [入力] ボックスに、JSON 形式の入力値を入力してワークフローを実行します。
-
[実行のスタート] を選択します。
-
Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。
実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「[実行の詳細] ページ - インターフェイスの概要」を参照してください。
たとえば、カスタムエラーメッセージを表示するには、CreateAccountグラフビューでステップを選択し、次に [出力] タブを選択します。
注記
状態入力とエラーを保持するには、
ResultPath
を使用します。「 ResultPath を使用して、エラーと入力の両方を に含める Catch」を参照してください。 -