EventBridgeを使用してStep Functionsを定期的に実行する

EventBridgeを使用してStep Functionsを定期的に実行する

EventBridgeを使用してStep Functionsを定期的に実行する

EventBridgeを使用することで、Step Functionsステートマシンを定期的に実行することができます。

AWS Step Functionsステートマシンは、イベントパターンに応じて、または Amazon を使用してスケジュールに従って実行できます EventBridge。

を使用して定期的にステートマシンの実行をスタートする EventBridge

本ページでは、CloudFormationを使用して、Step Functionsステートマシンを定期的に実行する方法を確認します。

構築する環境

Diagram of using EventBridge to execute Step Functions periodically.

Step Functionsの1つのステートマシンと、その内部に2つのステートを作成します。
ステート内で、Lambda関数を実行することとします。
関数は以下の働きを行います。

  • Lambda関数1:現在日時情報を取得します。
  • Lambda関数2:日時情報からUNIX時間を計算して返します。

関数のランタイム環境はPython3.8とします。

EventBridgeルールを作成して、このステートマシンを定期的に実行します。
具体的には、5分に1回ステートマシンを実行するように設定します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-fa/tree/main/120

テンプレートファイルのポイント解説

本ページは、Step Functionsステートマシンを定期的に実行する方法を中心に取り上げます。

Step Functionsステートマシンの作成方法については、以下のページをご確認ください。

https://awstut.com/2022/06/18/introduction-to-step-functions-with-cfn

EventBridgeルール

Resources:
  Rule1:
    Type: AWS::Events::Rule
    Properties:
      Name: !Sub "${Prefix}-EventsRule"
      ScheduleExpression: rate(5 minutes)
      State: ENABLED
      Targets:
        - Arn: !Ref StateMachineArn
          Id: !Ref StateMachineName
          RoleArn: !GetAtt EventsRuleRole.Arn
Code language: YAML (yaml)

ScheduleExpressionプロパティで、いつステートマシンを実行するかを指定します。
今回5分ごとに実行するように設定します。

スケジュールの記法はcron式とrate式が選択できますが、今回は後者で記載します。
詳細な記述方法については、以下のページをご確認ください。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html#RateExpressions

Targetsプロパティで実行する対象リソース指定します。
今回はステートマシンを対象としますから、これのARNや後述のIAMロールを指定します。

IAMロールを作成します。
EventBridgeルールを使用して、Step Functionsステートマシンを定期的に実行するということは、EventBridgeが代理でステートマシンを実行する形になります。
ですからEventBridge用IAMロールを作成し、ステートマシンを実行するための権限を与えます。

Resources:
  EventsRuleRole:
    Type: AWS::IAM::Role
    DeletionPolicy: Delete
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action: sts:AssumeRole
            Principal:
              Service: events.amazonaws.com
      Policies:
        - PolicyName: !Sub "${Prefix}-StartStateMachineExecutionPolicy"
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action: states:StartExecution
                Resource: !Ref StateMachineArn
Code language: YAML (yaml)

与える権限ですが、リソースとしてステートマシンを指定した上で、states:StartExecutionアクションを許可します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

https://awstut.com/2021/12/02/cloudformation-nested-stacks

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • Step Functionsステートマシン:fa-120
  • Lambda関数1:fa-120-function-01
  • Lambda関数2:fa-120-function-02
  • EventBridgeルール:fa-120-EventsRule

AWS Management Consoleから作成されたリソースを確認します。

ステートマシンを確認します。

Detail of Step Functions 1.

正常に作成されています。
ステートマシンが2つのLambda関数で構成されていることがわかります。

EventBridgeルールを確認します。

Detail of EventBridge 1.
Detail of EventBridge 2.

EventBridgeルールが作成されています。
5分ごとに上述のステートマシンを実行する内容です。

動作確認

準備が整いましたので、ステートマシンの実行状況を見守ります。

しばらく待つと、自動的にステートマシンが実行されます。

Detail of Step Functions 2.
Detail of Step Functions 3.

自動的に実行されて、正常に完了しました。

さらにしばらく待機します。

Detail of Step Functions 4.

5分おきにステートマシンが実行されました。

このようにEventBridgeルールを使用することによって、Step Functionsステートマシンを自動的に実行することができます。

まとめ

CloudFormationを使用して、Step Functionsステートマシンを定期的に実行する方法を確認しました。