2023年6月17日(3日前✨)にリリースされた AWS EventBridge Terraform module の最新バージョン v2.3.0 で Amazon EventBridge Scheduler がサポートされた🎉 モジュールを使えば多少ではあるけど記述量を抑えることができて,特に IAM Role まわりは楽になる.プルリクエスト自体は3月に出てたから取り込まれるまでちょっと長かった感じ💨
リリース情報 🔗 github.com
プルリクエスト 🔗 github.com
構成
今回は1週間前にブログにまとめた「Amazon EventBridge Scheduler から Amazon ECS Task を定期実行する構成」を AWS EventBridge Terraform module で構築してみる❗️
tf ファイル
最初に完成形の tf ファイルを載せておく❗️前回の記事と同じく Amazon EventBridge Scheduler にフォーカスするために Amazon VPC 関連(サブネットやセキュリティグループなど)と Amazon ECS Task 関連は準備できている前提として値をベタ書きしている.実際に組み込むときには変数などに置き換えてもらえればと👌
module "eventbridge" { source = "terraform-aws-modules/eventbridge/aws" create_bus = false create_schedules = true create_role = true role_name = "scheduler-role" attach_ecs_policy = true ecs_target_arns = [ "arn:aws:ecs:ap-northeast-1:000000000000:task-definition/hello-world:*", "arn:aws:ecs:ap-northeast-1:000000000000:task-definition/hello-world" ] schedules = { scheduler = { schedule_expression = "cron(0/10 * ? * MON-FRI *)" timezone = "Asia/Tokyo" arn = "arn:aws:ecs:ap-northeast-1:000000000000:cluster/cluster" ecs_parameters = { task_definition_arn = "arn:aws:ecs:ap-northeast-1:000000000000:task-definition/hello-world:1" launch_type = "FARGATE" platform_version = "LATEST" network_configuration = { subnets = ["subnet-xxxxxxxxxxxxxxxxx", "subnet-xxxxxxxxxxxxxxxxx"] security_groups = ["sg-xxxxxxxxxxxxxxxxx"] } } } } }
アーキテクチャ図
ポイント1 : IAM Role(実行ロール)
Amazon EventBridge Scheduler の IAM Role を作るためには create_role
と attach_ecs_policy
に true
を指定しつつ,ecs_target_arns
に実行を許可する Amazon ECS Task の ARN を指定する.また IAM Role 名はデフォルトだと default
になってしまって微妙なので role_name
も一緒に指定しておくと良いと思う.
最終的に作られるインラインポリシーは以下のようになる❗️iam:PassRole
の Condition
はコンソールで設定するときに自動的に作られるポリシーとは少し違う.
AWS EventBridge Terraform module を使うと,特に IAM Role まわりは記述量を減らせる👏
{ "Statement": [ { "Action": "ecs:RunTask", "Effect": "Allow", "Resource": [ "arn:aws:ecs:ap-northeast-1:000000000000:task-definition/hello-world:*", "arn:aws:ecs:ap-northeast-1:000000000000:task-definition/hello-world" ], "Sid": "ECSAccess" }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": "*", "Sid": "PassRole" } ], "Version": "2012-10-17" }
ポイント2 : Amazon EventBridge Scheduler
Amazon EventBridge Scheduler を使うときは create_schedules
に true
を指定しつつ,あとは schedules
にスケジューリング設定と Amazon ECS 設定をすればよくて,このあたりの設定は aws_scheduler_schedule を使うのとほぼ同じだった.ちなみに AWS EventBridge Terraform module の variables.tf
を読むと schedules
は map(any)
で定義されていた📝
variable "schedules" { description = "A map of objects with EventBridge Schedule definitions." type = map(any) default = {} }
terraform apply
を実行すると
期待通りに Amazon EventBridge Scheduler を構築できた❗️