チュートリアル 4: 並列で実行する複数のタスクを定義する - AWS Step Functions

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

チュートリアル 4: 並列で実行する複数のタスクを定義する

ここまで、ワークフローを順番に実行する方法を学習してきました。一方で、Parallel 状態を使用すれば、2 つ以上のステップを並列で実行できます。Parallel 状態があると、インタープリタは各分岐を同時に実行します。

Parallel 状態内の分岐は、どちらも同じ入力を受け取りますが、各分岐はそれぞれ固有の入力部分を処理します。Step Functions では、各分岐の実行が完了するまで待機してから次のステップに進みます。

このチュートリアルでは、並列状態を使用して、申請者の ID と住所を同時に確認します。

ステップ 1: Lambda 関数を作成して必要な確認を行う

このクレジットカード申請ワークフローでは、並列状態内で 2 つの Lambda 関数を呼び出して、申請者の ID と住所を確認します。これらの確認は、並列状態を使用して同時に実行します。ステートマシンが実行を完了するのは、並列分岐の両方が実行を完了した後に限ります。

[check-identity] と [check-address] の確認の Lambda 関数を作成するには
  1. 新しいタブまたはウィンドウで Lambda コンソールを開き、check-identitycheck-address いうタイトルの 2 つのNode.js 16.x Lambda 関数を作成します。コンソールを使用した Lambda 関数の作成については、「AWS Lambda デベロッパーガイド」の「コンソールで Lambda の関数の作成」を参照してください。

  2. [check-identity] 関数ページを開き、[コードソース] 領域の既存のコードを次のコードに置き換えます。

    const ssnRegex = /^\d{3}-?\d{2}-?\d{4}$/; const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; class ValidationError extends Error { constructor(message) { super(message); this.name = "CustomValidationError"; } } exports.handler = async (event) => { const { ssn, email } = event; console.log(`SSN: ${ssn} and email: ${email}`); const approved = ssnRegex.test(ssn) && emailRegex.test(email); if (!approved) { throw new ValidationError("Check Identity Validation Failed"); } return { statusCode: 200, body: JSON.stringify({ approved, message: `Identity validation ${approved ? 'passed' : 'failed'}` }) } };
  3. [check-address] 関数ページを開き、[コードソース] 領域の既存のコードを次のコードに置き換えます。

    class ValidationError extends Error { constructor(message) { super(message); this.name = "CustomAddressValidationError"; } } exports.handler = async event => { const { street, city, state, zip } = event; console.log(`Address information: ${street}, ${city}, ${state} - ${zip}`); const approved = [street, city, state, zip].every(i => i?.trim().length > 0); if (!approved) { throw new ValidationError("Check Address Validation Failed"); } return { statusCode: 200, body: JSON.stringify({ approved, message: `Address validation ${ approved ? 'passed' : 'failed'}` }) } };
  4. 両方の Lambda 関数で、[関数の概要]セクションから、それぞれの Amazon リソースネーム (ARN) をコピーし、テキストファイルに保存します。[申請者の ID と住所の確認] 状態のサービス統合を指定する場合は、関数の ARN が必要になります。ARN の例を次に示します。

    arn:aws:lambda:us-east-2:123456789012:function:HelloWorld

ステップ 2: ワークフローの更新 - 並列で実行するタスクを追加する

Step Functions コンソールで、ワークフローを更新して、ステップ 1 で作成した [check-identity] Lambda 関数と [check-address] Lambda 関数とのサービス統合を指定します。

ワークフローに並列タスクを追加するには
  1. チュートリアル 1: ステートマシンのプロトタイプを作成する で作成したワークフロープロトタイプを含む、Step Functions コンソールウィンドウを開きます。

  2. [ID の検証] 状態を選択し、[構成]タブで次の操作を行います。

    1. [統合タイプ] は、デフォルトの [最適化] のままにします。

      注記

      Step Functions を使用すると、他の AWS のサービス と統合して、ワークフロー内でそれらを調整できます。サービス統合とタイプの詳細については、「AWS Step Functions 他のサービスとの併用」を参照してください。

    2. [関数名] には、ドロップダウンリストから [check-identity] Lambda 関数を選択します。

    3. [ペイロード] には、[ペイロードを入力] を選択し、サンプルのペイロードを次のものに置き換えます。

      { "email": "janedoe@example.com", "ssn": "012-00-0000" }
  3. [住所の確認] 状態を選択し、[構成]タブで次の操作を行います。

    1. [統合タイプ] は、デフォルトの [最適化] のままにします。

    2. [関数名] には、ドロップダウンリストから [check-address] Lambda 関数を選択します。

    3. [ペイロード] には、[ペイロードを入力] を選択し、サンプルのペイロードを次のものに置き換えます。

      { "street": "123 Any St", "city": "Any Town", "state": "AT", "zip": "01000" }
  4. [次へ] をクリックします。