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

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

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

簡単な説明

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

解決方法

ここでの設定を行う際は次の事項に注意します。

  • 関数をトリガーさせるイベント変更はサポートされた API アクションです。
  • Step Functions ステートマシン、Lambda 関数、CloudWatch イベントはすべて、同じ AWS リージョンに存在する必要があります。

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 role for executions] で、Step Functions のために作成したロールを選択します。

Lambda 関数の作成と更新

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

2.    Lambda コンソールコードエディターを使用し、実行時に受診したイベントを表示できるように関数コードを更新します。たとえば、Python で記述した Lambda 関数の場合は、次のようなコードになります。

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

CloudWatch Events ルールの作成

ルールを作成し、Step Functions イベントパターンの監視と、Lambda 関数の呼び出しを行わせます。

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

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

3.    [Create rule] を選択します。

4.    [Event source] の下にある [Event Pattern] をクリックします。

5.    [Service Name] で、[Step Functions] を選択します。

6.    [Event Type] で、[Step Functions Execution Status Change] を選択します。

注: [All Events] を選択し、Step Functions にルールをトリガーさせることもできます。あるいは、[AWS API Call via CloudTrail] を選択し、StartExecution のような特定の Step Functions API 呼び出しイベントでルールをトリガーすることもできます。詳細については「 AWS CloudTrail を使用して AWS API コールでトリガーする CloudWatch イベント ルールの作成」をご参照ください。

7.    イベントをトリガーさせる、ステータス、Amazon Resource Names (ARNs) ステートマシン、実行 ARN を選択します。各タイプのトリガーに [Any] を選択するか、[Specific] で特定のステータスか各 ARN を指定します。

8.    [Targets] の下にある [Add target] をクリックします。[Lambda function] が希望通りになっていることを確認します。

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

10.    [Configure details] を選択します。

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

12.    [State] で、[Enabled] がオンになっていることを確認します。

13.    [Create rule] をクリックします。

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

設定をテストする

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

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

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

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

注:実行開始してから、ログストリームが表示されるまでは数分間かかります。