マップ状態を使用して Lambda を複数回呼び出す - AWS Step Functions

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

マップ状態を使用して Lambda を複数回呼び出す

このチュートリアルでは、ステートマシンの入力に基づき、Map 状態を使用して AWS Lambda 関数を複数回呼び出す方法について説明します。

Lambda を使用するStep Functions ステートマシンを作成する チュートリアルでは、Lambda 関数を呼び出すステートマシンを作成する手順について説明します。このチュートリアルを完了済みである場合は、[Step 4] (ステップ 4) に進み、前に作成した AWS Identity and Access Management (IAM) ロールと Lambda 関数を使用してください。

ステップ 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. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで [Roles] (ロール) を選択します。次に、[Create role] (ロールの作成) を選択します。

  3. [AWS Service] ( のサービス) ロールタイプを選択してから、Lambda を選択します。

  4. ユースケースに [Lambda] を選択します。ユースケースは、サービスに必要な信頼ポリシーを含めるように定義されています。続いて、[次へ] を選択します。アクセス許可.

  5. ロールにアタッチするアクセス許可ポリシーを 1 つ以上選択します (例: AWSLambdaBasicExecutionRole)。AWS Lambda アクセス許可モデルを参照してください。

    ロールに許可するアクセス権限を割り当てるポリシーの横にあるボックスを選択し、次へ: 確認.

  6. [Role name] (ロール名) に入力します。

  7. (オプション) [Role description] (ロールの説明) で、サービスにリンクされた新しいロールの説明を編集します。

  8. ロールを確認し、[Create role] (ロールの作成) を選択します。

ステップ 2: Lambda 関数を作成します

使用する Lambda 関数は入力 (名前) を受信し、入力値を含めた挨拶を返します。

重要

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

  1. を開くLambda コンソールを選択し、関数の作成

  2. [Blueprints] (ブループリント) セクションで、[Author from scratch] (一から作る) を選択します。

  3. [Basic information] (ベーシックな情報) セクションで、Lambda 関数を構成:

    1. [Function name] (関数名) に HelloFunction と入力します。

    2. [Runtime] (ランタイム) で [Node.js 12.x] を選択します。

    3. [Role] (ロール) で、[Choose an existing role] (既存のロールを選択) を選択します。

    4. [Existing role] (既存のロール) で、前に作成した Lambda ロールを選択します。

      注記

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

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

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

      arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
  4. Lambda 関数の次のコードを関数コードの セクションHelloFunctionページで.

    exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!"); };

    このコードは、関数に渡された event オブジェクトから提供された入力データの who フィールドを使用して、挨拶をアセンブルします。後で新しい実行をスタートするときに、この関数の入力データを追加します。callback メソッドによって、関数からアセンブルされた挨拶が返されます。

  5. [Save] (保存) を選択します。

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

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

  1. [Select a test events] (テストイベントの選択) で [Configure test event] (テストイベントの設定) を選択します。[Event name] (イベント名) で、HelloFunction と入力します。

  2. データ例を以下に置き換えます。

    { "who": "AWS Step Functions" }

    "who" エントリは Lambda 関数の event.who フィールドに対応し、挨拶を完了させます。関数を Step Functions タスクとして実行するときも同じ入力データを使用します。

  3. [Create] (作成) を選択します。

  4. リポジトリの []HelloFunctionページ、Test新しいデータを使用して Lambda 関数を使用します。

    テストの結果がページの上部に表示されます。[Details] (詳細) を展開して出力を表示します。

ステップ 4: ステートマシンの作成

Step Functions コンソールで、Map 状態を使用してステートマシンを作成します。Lambda をリファレンスして Task 状態を追加します。Lambda 関数は、ステートマシンの入力に基づいて、Map 状態の反復処理ごとに呼び出されます。

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

  2. [Define state machine] (ステートマシンの定義) ページで、[Author with code snippets] (コードスニペットで作成) を選択します。[Type] (タイプ) で、[Standard] (標準) を選択します。[Name] (名前) を入力します (例: MapLambda)。

    注記

    ステートマシン、実行、アクティビティ名は 1 ~ 80 文字で、アカウントと AWS リージョンが一意である必要があり、以下のものを含めることはできません。

    • 空白

    • ワイルドカード文字 (? *)

    • 角かっこ (< > { } [ ])

    • 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")

    • 制御文字 (\\u0000 - \\u001f または \\u007f - \\u009f)

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

  3. [State machine definition] (ステートマシンの定義) ペインで、[Lambda function that you created earlier] (前に作成した Lambda 関数) の ARN を使用して以下のステートマシンの定義を追加します。

    { "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "Iterator": { "StartAt": "CallLambda", "States": { "CallLambda": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }, "End": true } } }

    これは、Amazon ステートメント言語を使用したステートマシンの説明です。Lambda 関数を呼び出す Task 状態 (CallLambda) を含む ExampleMapState という名前の Map 状態を定義します。詳細については、State Machine Structure を参照してください。

    注記

    Task 状態の Retry を設定することもできます。ベストプラクティスとして、本番稼働用コードが Lambda サービス例外 (Lambda.ServiceException および Lambda.SdkClientException) を処理できることを確認します。詳細については、以下を参照してください。

    [Next] (次へ) を選択します。

  4. IAM ロールを作成または入力:

    • Step Functions の IAM ロールを作成するには、[Create an IAM role for me] (自分用 IAM ロールを作成する) を選択し、あなたのロールの [Name] (名前) を入力します。

    • ステートマシン用に正しい許可のある IAM ロールを以前に作成したのであれば、[Choose an existing IAM role] (既存のIAM ロールを選択する) を選択します。リストからロールを選択するか、そのロールの ARN を指定します。

    注記

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

  5. [Next] (次へ) を選択します。

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

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

  1. リポジトリの []LambdaStateマシン[] ページで、実行の開始

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

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

    注記

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

  3. 実行入力領域で、サンプルデータを以下で置き換えます。

    [ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]

    Map 状態は、入力内のこれらの項目ごとに CallLambda タスク状態を反復して実行します。"who" は、挨拶する相手の名前を取得するために Lambda 関数で使用するキー名です。

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

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

  5. 実行結果を表示するには、[Execution Details] (実行の詳細)の [Output] (出力) セクションを展開します。

    [ "Hello, bob!", "Hello, meg!", "Hello, joe!" ]

    Lambda 関数の各実行の出力は、ステートマシンの出力に結合されます。

Map の使用方法の詳細については、以下を参照してください。