AWS Step Functions で状態 (実行イベント) が変更されたときに呼び出す Lambda 関数を設定するにはどうすればよいですか?

最終更新日: 2021 年 4 月 5 日

AWS Step Functions で状態 (実行イベント) が変更されたときには、必ず AWS Lambda 関数が呼び出されるようにしたいと考えています。どうすればよいですか?

解決方法

: 以下の手順では、Amazon EventBridge イベントルールを使用して、Step Functions で状態が変化するたびに Lambda 関数を呼び出す方法について説明します。手順を実行する際には、必ず以下のことを行ってください。

  • Lambda 関数の呼び出しに使用するイベントの変更がサポートされている API アクションであることを確認します。
  • 同じ AWS リージョンで、Step Functions のステートマシン、Lambda 関数、および EventBridge イベントルールを作成します。

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

1.    Step Functions 用の AWS Identity and Access Management (IAM) ロールを作成します。IAM ロールを作成するときは、次の操作を行います。
ご自身のユースケースに必要なアクションを実行するための、IAM ロールを付与します。
lambda:InvokeFunction のアクションが、ステートマシンに Lambda 関数を呼び出させることを許可します。
注: マネージドポリシーである AWSLambdaRole には、Lambda 関数を呼び出すために必要なアクセス権限が含まれています。

2.    Amazon CloudWatch にログをアップロードするためのアクセス権限を関数に付与する Lambda 実行ロールを作成します。
注: マネージドポリシーの AWSLambdaBasicExecutionRole が、CloudWatch にログをアップロードするための、基本的なアクセス権限を付与します。

Step Functions ステートマシンを作成します。

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

詳細については、AWS Step Functions とは何ですか? をご参照ください。

受信したイベントを出力するように設定された Lambda 関数を作成する

1.    Lambda コンソールで関数を作成します。[Execution role] で、Lambda のために作成したロールを選択します。

2.    Lambda コンソールで、コードエディタを使用して関数コードを更新し、実行時に関数が受信したイベントを出力するようにします。

受信したイベントを出力するように Lambda 関数に指示する Python コードの例

import json

def lambda_handler(event, context):
print("Received event: " + json.dumps(event)) return {
'statusCode': 200,
'body': json.dumps("Hello")
}

詳細については、Python による Lambda 関数のビルドをご参照ください。

Step Functions で状態が変化するたびに Lambda 関数を呼び出す EventBridge イベントルールを作成する

1.    [EventBridge コンソール] を開きます。

2.    左ナビゲーションペインの [Events] の下にある [Rules] をクリックします。

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

4.    [Name] (名前) に、ルールの名前を入力します。

5.    [Define pattern] (パターンを定義) で、[Event Pattern] (イベントパターン) を選択します。

6.    [Event matching pattern] (イベント一致パターン) で、[Pre-defined pattern by service] (サービスごとの事前定義パターン) を選択します。

7.    [Service provider] (サービスプロバイダー) で、[AWS] を選択します。

8.    [Service Name] (サービス名) で、[Step Functions] を選択します。

9.    [Event Type] (イベントタイプ) で、[Step Functions Execution Status Change] (Step Functions の実行ステータスを変更) を選択します。

注: [All Events] (すべてのイベント) を選択し、Step Functions にルールを開始させることもできます。あるいは、[AWS API Call via CloudTrail] (CloudTrail 経由の AWS API 呼び出し) を選択し、StartExecution のような特定の Step Functions API 呼び出しイベントでルールを開始することもできます。詳細については、CloudTrail 経由で配信されたイベントをご参照ください。

10.    ステータス、Amazon リソースネーム (ARN) ステートマシン、およびイベントを開始させる実行 ARN を選択します。各タイプのトリガーに [Any] (指定なし) を選択するか、[Specific] (特定) で各トリガーに特定のステータスか ARN を指定します。

11.    [Select targets] (ターゲットを選択) で、[Lambda function] (Lambda 関数) がターゲットタイプとなっていることを確認します。

12.    [Function] (関数) で、作成した Lambda 関数を選択します。

13.    [Create rule] (ルールの作成) を選択します。

詳細については、Amazon EventBridge イベントおよびStep Functions の実行ステータスの変更の場合における EventBridge をご参照ください。

設定をテストする

1.    Step Functions コンソールで、ステートマシンを新たに実行します

2.    CloudWatch コンソール の左ナビゲーションペインで、[Logs] をクリックします。

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

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

注: 新しい実行が開始された後、ログストリームが表示されるまでに数分かかる場合があります。