[小ネタ]Serverless FrameworkでLambdaを定期実行させる

2018.07.18

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

はじめに

Serverless Frameworkのドキュメントを何気なく読んでいたところ、 ふと便利そうな機能があったので取り上げてみます。

タイトルにあるように、Lambdaを定期実行させるための設定です。

手順

Serverless FrameworkでLambda Functionを作成し、その定義に定期実行の定義を追加します。 Lambdaの実装言語にはGolangを選択しました。

1. プロジェクト作成

$ serverless create -u https://github.com/serverless/serverless-golang/ -p go-lambda-scheduled

テンプレートとして作成されるmain.goに、fmt.PrintlnでCloudWatch Logsにメッセージを吐くようにします。

func Handler() (Response, error) {
	fmt.Println("hello!!") // これを追記
	return Response{
		Message: "Go Serverless v1.0! Your function executed successfully!",
	}, nil
}

2. serverless.ymlにスケジュールを追記

serverless.ymlのLambdaの定義に「events」としてスケジュールを設定します。今回はcron形式で設定しました。

functions:
  t-honda-hello:
    handler: bin/main
    events:
      - schedule: cron(0/1 * * * ? *)

3. ビルド

$ GOOS=linux go build -o bin/main

4. デプロイ

$ serverless deploy

結果確認

デプロイしたLambdaを見ると、以下のようにCloudWatch Eventsが設定されています。

CloudWatch Logsを見ると、以下のように定期的にメッセージが出力されています。

まとめ

Lambdaの定期実行という、よくありがちな要件が非常に簡単に実現できることが分かりました。 本記事が何かの役に立てば幸いです。

参考サイト

https://serverless.com/framework/docs/providers/aws/events/schedule/