前回、手動で設定したものが Terraformから設定できるようになっていたので、Let’s Try!!
.oO( Terraform is SUGOI
環境
- Terraform 1.52
- 既存ECS環境構築済み
ECS側の追記
ect.tfのdeployment_controller
に type = "CODE_DEPLOY"
を追記
...(省略)
resource "aws_ecs_service" "test-service" {
name = "test-service"
cluster = "${aws_ecs_cluster.test-cluster.id}"
task_definition = "${aws_ecs_task_definition.test-task-definition.arn}"
desired_count = 2
launch_type = "FARGATE"
health_check_grace_period_seconds = "3600"
deployment_maximum_percent = 200
deployment_minimum_healthy_percent = 100
# ★★ ここから ★★★
deployment_controller {
type = "CODE_DEPLOY"
}
# ★★★ ここまで ★★★
load_balancer {
target_group_arn = "${aws_alb_target_group.test-alb-tg.arn}"
container_name = "hoge-container",
container_port = 80
}
network_configuration {
subnets = ["${lookup(var.alb, "${terraform.workspace}.subnet_ids_AZ_a")}", "${lookup(var.alb, "${terraform.workspace}.subnet_ids_AZ_c")}"]
security_groups = ["${aws_security_group.SG-TEST.id}"]
assign_public_ip = "true"
}
}
...(省略)
CodeDeployの設定追加
新たにcodedeploy.tfを作成した
#★★★
の箇所は環境に合わせて変えてもらえればと思います
# CodeDeploy
#//----------------------------------------
#// アプリケーション
#//----------------------------------------
resource "aws_codedeploy_app" "app" {
compute_platform = "ECS"
name = "AppECS-Test" #★★★
}
#//----------------------------------------
#// デプロイグループ
#//----------------------------------------
resource "aws_codedeploy_deployment_group" "group" {
app_name = "${aws_codedeploy_app.app.name}"
deployment_config_name = "CodeDeployDefault.ECSAllAtOnce"
deployment_group_name = "DgpECS-Test" #★★★
service_role_arn = "arn:aws:iam::[アカウントID]:role/ecsCodeDeployRole" #★★★前回の記事で作成したRoleのARN
auto_rollback_configuration {
enabled = true
events = ["DEPLOYMENT_FAILURE"]
}
blue_green_deployment_config {
deployment_ready_option {
action_on_timeout = "CONTINUE_DEPLOYMENT"
}
terminate_blue_instances_on_deployment_success {
action = "TERMINATE"
termination_wait_time_in_minutes = 120 #★★★古いタスクの削除待機時間
}
}
deployment_style {
deployment_option = "WITH_TRAFFIC_CONTROL"
deployment_type = "BLUE_GREEN"
}
ecs_service {
cluster_name = "${aws_ecs_cluster.test-cluster.name}" #★★★
service_name = "${aws_ecs_service.test-service.name}" #★★★
}
load_balancer_info {
target_group_pair_info {
prod_traffic_route {
listener_arns = ["${aws_alb_listener.test-alb-listener.arn}"] #★★★
}
target_group {
name = "${aws_alb_target_group.test-alb-tg-blue.name}" #★★★
}
target_group {
name = "${aws_alb_target_group.test-alb-tg-green.name}" #★★★
}
}
}
}
試す
Terraform実行直後のECS画面はこんなカンジ(サービス>デプロイ)
Codedeployを起動させる
- タスク定義の内容は特に変えずリビジョンのみ更新
- サービス更新から最新のタスク定義を参照するよう更新。(リビジョンの設定以外は変更なし)
サービス > デプロイ画面に戻るとCodeDeployの表示がされています
DeploymentIDをクリックするとCodeDeployの画面に遷移します。
ステップ3 の待機時間も Terraformで指定した時間(120分)になっていることが確認できます。
おわり
手動での設定を行わなくてもコードで完結できるのでGood