Step Functionsをcronで定期的に実行する【CloudWatch Events】

2017.06.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

皆さんLambdaしていますか?

今Step FunctionsとLambdaでURLの更新チェックを行う仕組みを作っていますが、デイリーで実行するためにCloudWatch Eventsからcronで実行する設定を行います。

Step Functionsの作成過程は下記をご参照下さい。

Step FunctionsにLambdaからデータを渡してみた

ちなみに、Step Functionsリリース当初ではCloudWatch Eventsから呼び出せないのでLambdaから実行していたようです。

AWS Step Functionsを定期的に実行するLambda関数をServerless Frameworkでデプロイする #reinvent

設定してみた

あっさり終わります。設定時間は3分かからないくらいです。

CloudWatchを開いて、「ルール」から「ルールの作成」を選択します。

001_rule

イベントソースで「スケジュール」「Cron式」を選択します。

Cron式には「0 0 * * ? *」と入れましたが、これは日本時間AM09:00で毎日実行する設定です。

02_event

CloudWatch EventsでのCron式は「分 時間 日 月 曜日 年」の並びで設定するので、大体曜日は「?」になります。

デイリーでの実行なので、分と時間だけ値を入れます。

GMTでの設定になるので、日本時間AM08:00なら「0 23 * * ? *」、AM00:00なら「0 15 * * ? *」になります。

cronの参考など詳しくはこちらを参照してください。

ターゲットでは「ターゲットの追加」を押した後「Step Functions ステートマシン」を選択し、作成したStep Functionsのステートマシン名を選択し、「設定の詳細」を押します。

ロールはデフォルトで作成してくれるのでそのままで問題ありません。

03_state

「名前」を入力して「ルールの作成」を押します。

04_name

作成が完了しました。

05_success

実行後はStep Functionsの画面で下記のように実行されていることが確認できます。

入力sourceが「aws.events」となっています。※実行時間は都合上上記の設定とは異なります

07_exe

さいごに

CloudWatch Eventsを利用すれば、簡単にStep Functionsの定期実行が実装できました。

cronで直接Lambdaを実行してもいいですが、フローが別れたりするものはマイクロサービスとして分割して、Step Functionsで管理するのもいいですよね。