Serverless Frameworkのserverless-step-functions pluginで起動トリガーにEventBridgeスケジューラが使用できるようになっていました

2023.11.15

データアナリティクス事業本部のueharaです。

いつの間にかServerless Frameworkのserverless-step-functions pluginで、StepFunctionsの起動トリガーにEventBridgeスケジューラが使用できるようになっていましたので、今回はそちらをご紹介したいと思います。

これまでのスケジュール起動について

これまでのServerless Frameworkを利用したStepFunctionsのスケジュール起動では、EventBridge Ruleにおける「イベントスケジュール」による設定しかできませんでした。

これが、serverless-step-functions pluginの2023年9月の3.15.0リリースによる機能追加と、2023年10月の3.17.0リリースによるバグFixを経てEventBridgeスケジューラによるトリガーが利用ができるようになりました。

名前が似ていてややこしいですが、EventBridge RuleのイベントスケジュールとEventBridgeスケジューラによる違いは以下のブログで紹介されています。

個人的に、Ruleの方で使いにくいなと思っていたのは以下の2点でした。

  • タイムゾーンの指定ができない
  • ルール数のサービスクォータがデフォルトで300と少ない

EventBridgeスケジューラであれば上記2点の問題はクリアされるので、本アップデートは嬉しい限りです。

利用方法

EventBridgeスケジューラを使用したい場合、 method"scheduler" として、serverless.ymlで以下のように指定することで実現できます。

serverless.yml

stepFunctions:
  stateMachines:
    SfTest:
      name: <SF Name>
      role: <SF Role ARN>
      events:
        - schedule:
            method: "scheduler"
            name: <EventBridge Scheduler Name>
            role: <EventBridge Role ARN>
            rate:
              - cron(30 * * * ? *) # 毎時30分に起動
            enabled: true
            timezone: "Asia/Tokyo"
      definition:
        ...

実際に利用してデプロイしてみたところ、以下の通りEventBridgeスケジューラによるStepFunctionsの実行設定が確認できました。

補足

EventBridge Ruleの方で利用するIAMロールで許可するプリンシパルは events.amazonaws.com ですが、EventBridgeスケジューラで利用するIAMロールで許可するプリンシパルは scheduler.amazonaws.com となることに注意しましょう。

最後に

今回は、Serverless Frameworkのserverless-step-functions pluginで起動トリガーにEventBridgeスケジューラが使用できるようになっていたので、その利用方法をご紹介しました。

参考になりましたら幸いです。

追記

commitログを眺めていないと気付かないアップデートだったので、利用方法についてドキュメント更新のプルリクエストを出しておきました。(マージ済み)

参考文献