前の記事で、AWS Lambdaで自作コードを実行するための手順がわかりました。この記事では、Lambda関数を定期実行します。
Q. Lambdaに乗せた関数を、定期的に実行するにはどうすればいいの? A. トリガーにCloudWatch Eventsを設定しよう
【Slack自動保存】サーバーレスでCronのように定期的にプログラムを実行しよう | 株式会社ココナラ通り、CloudWatch Eventsの設定を始めます。Lambdaの画面に「トリガー」というものがあります。
このトリガーを設定します。まだ私はトリガーを持っていないので左下の「トリガーを追加」から追加しましょう。たくさん出てきますが、ここに罠があります。CloudWatchで始まる名前にはCloudWatch Logsしかないからこれかな?と思いますが、違います。
よく読まないといけません。危ないですね。選んで追加すると、以下のような画面になるので以下のように入力していきます。はて、スケジュール式って所が難しそうですね。
cron式が使えるようなので「cron式」で検索し、ルールのスケジュール式 - Amazon CloudWatch Eventsを見つけます。
毎分、毎時、毎日、毎月、毎曜日、毎年実行して欲しいのでcron( * * * * )と入れたくなりましたが、よく読むと「[] を日および曜日フィールドの両方に使用することはできません。一方に使用する場合は、もう一方に [?] を使用する必要があります。」と書いてあるので曜日を?にしておきます。cron( * * * ? *)を入れ、追加します。
できてそうです。少し(数十秒)待ったらテストボタンを押してないのにSlackがスッコココ!と鳴りました。この文章を打っている間にもまたスッコココ!と鳴っています。定期実行に成功しました。
この調子では1円以下とは言え24時間無限にお金がかかり続けます。本来はメッセージがあるときだけの方がいいかもしれませんが、一応今回の目標は定期実行なのでここで終わります。lambdaのページをウロウロしていると[モニタリング]タブにCloudWatch メトリックスというダッシュボードがあり、どう動いているのかを確認できます。毎回1秒もかかっていませんし、料金表を見る限り高くても1日10円程度だと分かります。
散歩の結果、Pythonプログラムを定期的に実行するには、「AWS LambdaにPythonファイルを置いて、Lambda レイヤーにimportしたいパッケージをインストールしたzipファイルを置いて、CloudWatch Eventsをトリガーにすれればいい」なんて文が書けるようになりました。
能力4. 定期的に行動(処理)を実行するを獲得しました。
この記事では、575判定とかをしないで単に毎分Slack投稿するだけなので、次の記事では、組み合わせるだけっぽいですね!(フラグ)