タダです.
昨年末に EventBridge の新機能で EventBridge Scheduler がでました.この機能を使って Lambda にパラメーターを渡して実行してみます.
EventBridge Scheduler とは
EventBridge Scheduler では従来の EventBridge Rule と同様にスケジューリングできるのですが,タイムゾーン指定できるようになったため EventBridge Rule と違い UTC など考慮が不要になりました.
また,事前定義済みの AWS サービスごとの個別 API をスケジューリングできるのも特徴かと思います.画像のは EC2 の StopInstances
を実行することができるものになるため,以前は Lambda でコードを実行する必要がありしたが,EventBridge Scheduler で完結できるようになりました.
EventBridge Scheduler で実行する Lambda の準備
事前に EventBridge Scheduler で実行する Lambda を用意しておきます.Name
と hoge
というパラメータがきたらその値を出力するようにしています.
package main import ( "context" "fmt" "github.com/aws/aws-lambda-go/lambda" ) type Event struct { Name string `json:"name"` hoge string `json:"hoge"` } func handle(ctx context.Context, event Event) (string, error) { input := fmt.Sprintf("%s from EvnetBridge Schesuler", event.Name) fmt.Println(event.hoge) fmt.Println(input) return input, nil } func main() { lambda.Start(handle) }
Terraform で EventBridge Scheduler のリソース構築
EventBridge Scheduler を Terraform で構築します.1/2 17:30 JST
に実行する Event Scheduler と Lambda を実行にあたっての IAM リソースを作ります.
resource "aws_iam_role" "evnetbridge_scheduler" { name = "evnetbridge-scheduler-role" assume_role_policy = data.aws_iam_policy_document.eventbridge_scheduler_assume_policy.json inline_policy { name = "evnetbridge-scheduler-role-inline-policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "lambda:InvokeFunction", ] Effect = "Allow" Resource = "*" }, ] }) } } data "aws_iam_policy_document" "eventbridge_scheduler_assume_policy" { statement { effect = "Allow" actions = [ "sts:AssumeRole", ] principals { type = "Service" identifiers = [ "scheduler.amazonaws.com", ] } } } resource "aws_scheduler_schedule" "test_scheduler" { name = "test-scheduler" state = "ENABLED" schedule_expression = "cron(30 17 2 1 ? *)" schedule_expression_timezone = "Asia/Tokyo" flexible_time_window { mode = "OFF" } target { arn = "arn:aws:lambda:ap-northeast-1:1234567891011:function:test-lambda" role_arn = aws_iam_role.evnetbridge_scheduler.arn input = jsonencode({ "Name" = "event-schedule-test" "hoge" = "fuga" }) } }
リソース作成の確認
関連情報
Lambda の実行確認
1/2 17:30
の実行を確認したところ,正常に Lambda が起動してパラメータが渡ってきてログに出力されていました.
2023-01-02T08:30:19.505Z START RequestId: 8163b296-08e4-4ce6-9fd4-f91a622d9975 Version: $LATEST 2023-01-02T08:30:19.505Z fuga 2023-01-02T08:30:19.505Z test from EvnetBridge Schesuler 2023-01-02T08:30:19.507Z END RequestId: 8163b296-08e4-4ce6-9fd4-f91a622d9975 2023-01-02T08:30:19.507Z REPORT RequestId: 8163b296-08e4-4ce6-9fd4-f91a622d9975 Duration: 2.11 ms Billed Duration: 3 ms Memory Size: 512 MB Max Memory Used: 29 MB Init Duration: 82.45 ms
まとめ
EventBridge Scheduler でイベントの実行とパラメータを渡すことをしてみました.これまでは EventBridge Rule でやっていたことが今後は EventBridge Scheduler に変わっていきそうです.