Step Functions で状態 (実行イベント) が変更されたときに Lambda を呼び出す方法を教えてください。

最終更新日: 2019 年 8 月 30 日

AWS Step Functions で状態 (実行イベント) が変更されるたびに AWS Lambda 関数を呼び出す必要があります。どうすればよいですか?

簡単な説明

Amazon CloudWatch Events ルールを使用して、Step Functions ステートマシンからの API 呼び出しイベント変更に応答する Lambda 関数をトリガーします。

解決方法

このセットアップ中に、以下の点を確認してください。

  • 関数のトリガーに使用するイベント変更は、サポートされている API アクションです。
  • 同じ AWS リージョンで Step Functions ステートマシン、Lambda 関数、および CloudWatch Events ルールを作成します。

Step Functions と Lambda の IAM ロールを作成する

1.    Step Functions の AWS Identity and Access Management (IAM) ロールを作成します。ユースケースに必要なアクションを実行するためのアクセス許可を IAM ロールに付与します。ステートマシンで Lambda 関数を呼び出すには、lambda:InvokeFunction のアクションを許可します。

注意: AWSLambdaRole の管理ポリシーは、Lambda 関数を呼び出すアクセス許可を付与します。

2.    Lambda 実行ロールを作成しますAWSLambdaBasicExecutionRole の管理ポリシーは、CloudWatch にログをアップロードするための基本的なアクセス許可を関数に付与します。

Step Functions ステートマシンを作成する

Step Functions コンソールでステートマシンを作成します。[実行のための IAM ロール] で、Step Functions のために作成した既存のロールを選択します。

Lambda 関数を作成および更新する

1.    Lambda コンソールで関数を作成します。[実行ロール] で、Lambda 用に作成した既存のロールを選択します。

2.    Lambda コンソールで、コードエディタを使用して関数コードを更新します。これにより、関数が実行されると、関数が受け取るイベントのみが出力されます。たとえば、Lambda 関数が Python を使用している場合、次のコードを使用できます。

import json
def lambda_handler(event, context):
    print("Received event: " + json.dumps(event))

CloudWatch Events ルールを作成する

作成したルールは、Step Functions イベントパターンを監視し、Lambda 関数を呼び出します。

1.    CloudWatch コンソールを開きます。

2.    左側のナビゲーションペインの [Events] で、[Rules] を選択します。

3.    [ルールの作成] をクリックします。

4.    [イベントソース] で、[イベントパターン] を選択します。

5.    [サービス名] で、[Step Functions] を選択します。

6.    [イベントの種類] で、[Step Functions の実行ステータスの変更] を選択します。

注意: Step Functions の [すべてのイベント] でルールをトリガーすることもできます。または、[AWS API Call via CloudTrail] を選択して、StartExecution などの特定の Step Functions API 呼び出しイベントのルールをトリガーできます。詳細については、AWS API Call Using AWS CloudTrail でトリガーする CloudWatch Events ルールの作成を参照してください。

7.    イベントをトリガーするステータス、ステートマシンの Amazon リソースネーム (ARN)、および実行 ARN を選択します。トリガーのタイプごとに [指定なし] を選択するか、それぞれの 特定の ステータスまたは ARN を特定できます。

8.    [ターゲット] で、[ターゲットの追加] を選択します。[Lambda 関数] がターゲットタイプであることを確認します。

9.    [関数] では、作成した Lambda 関数を選択します。

10.    [詳細設定] を選択します。

11.    [名前] にルールの名前を入力します。

12.    [状態] で、[有効] が選択されていることを確認します。

13.    [ルールの作成] をクリックします。

詳細については、イベントでトリガーする CloudWatch Events ルールの作成を参照してください。

セットアップをテストする

1.    Step Functions コンソールで、ステートマシンの新しい実行を開始します。

2.    CloudWatch コンソールの左にあるナビゲーションペインで [ログ] を選択します。

3.    Lambda 関数によって生成されたログストリームを選択します。

4.    ログストリームでイベントの詳細を確認します。

注意: 実行を開始してからログストリームが表示されるまでに数分かかる場合があります。