タダです.
前回書いた記事の続編です.前回の記事ではAurora Serverless V2 ACU の変更を EventBridge Scheduler で変更する内容でしたが,手動変更の例でした.その後 Terraform でコード化したためその備忘録としてこの記事にまとめます.
結論
IAM ロール及びポリシーのコードは以下のとおりです.
data "aws_region" "current" {} data "aws_caller_identity" "current" {} data "aws_iam_policy_document" "scheduler_assume_role" { statement { effect = "Allow" principals { type = "Service" identifiers = ["scheduler.amazonaws.com"] } actions = ["sts:AssumeRole"] } } data "aws_iam_policy_document" "rds_modify_cluster" { statement { effect = "Allow" actions = ["rds:ModifyDBCluster"] resources = [ "arn:aws:rds:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:cluster:${var.aurora_cluster_name}" ] } } resource "aws_iam_role" "scheduler_role" { name = "aurora-acu-schedule-role" assume_role_policy = data.aws_iam_policy_document.scheduler_assume_role.json } resource "aws_iam_role_policy" "rds_modify_role_policy" { name = "aurora-acu-schedule-role-policy" policy = data.aws_iam_policy_document.rds_modify_cluster.json }
そして EventBridge Scheduler のリソースは以下のように作りました.例のスケジューラーは平日の7時にスケールアップして,平日17時にスケールダウンするよう実行されます.
resource "aws_scheduler_schedule" "scale_up" { name = "aurora-acu-scale-up-scheduler" group_name = "default" state = "ENABLED" schedule_expression = "cron(0 7 ? * MON-FRI *)" schedule_expression_timezone = "Asia/Tokyo" flexible_time_window { mode = "OFF" } target { arn = "arn:aws:scheduler:::aws-sdk:rds:modifyDBCluster" role_arn = aws_iam_role.scheduler_role.arn input = jsonencode({ DbClusterIdentifier = var.aurora_cluster_name ServerlessV2ScalingConfiguration = { MinCapacity = 2.0 MaxCapacity = 4.0 } }) } } resource "aws_scheduler_schedule" "scale_down" { name = "aurora-acu-scale-down-scheduler" group_name = "default" state = "ENABLED" schedule_expression = "cron(0 17 ? * MON-FRI *)" schedule_expression_timezone = "Asia/Tokyo" flexible_time_window { mode = "OFF" } target { arn = "arn:aws:scheduler:::aws-sdk:rds:modifyDBCluster" role_arn = aws_iam_role.scheduler_role.arn input = jsonencode({ DbClusterIdentifier = var.aurora_cluster_name ServerlessV2ScalingConfiguration = { MinCapacity = 1.0 MaxCapacity = 2.0 } }) } }
まとめ
前回の手動実行した Aurora Serverless V2 の ACU 調整を Terraform のコード化する機会があったのでまとめました.