Веб-Сервисы Amazon — Aws Ecs Green/Blue С Codepipeline: Elb Не Удалось Обновить Из-За Следующей Ошибки: Основная Целевая Группа Набора Задач Должна Находиться За Прослушивателем

  • Автор темы KOT2003
  • Обновлено
  • 19, Oct 2024
  • #1

Я часами пытался запустить базовый CodePipeline с ECS Green/Blue. Мы создаем прототип, поэтому на данный момент все находится в одном репозитории, и

resource "aws_ecs_cluster" "cluster" {

name = var.name

configuration {

execute_command_configuration {

kms_key_id = aws_kms_key.keys.arn

logging    = "OVERRIDE"

log_configuration {

cloud_watch_encryption_enabled = true

cloud_watch_log_group_name     = aws_cloudwatch_log_group.logs.name

}

}

}
}

resource "aws_ecs_task_definition" "api" {

family                   = "api"

memory                   = 512

cpu                      = 256

requires_compatibilities = ["FARGATE"]

network_mode             = "awsvpc"

execution_role_arn       = aws_iam_role.ecs-task-service.arn

container_definitions = jsonencode([

{

name      = var.name,

image     = "${aws_ecr_repository.repo.repository_url}:latest"

essential = true

portMappings = [

{

"containerPort" = 8080,

"hostPort"      = 8080

}

],

environment = [],

log_options = {

awslogs-region        = var.region

awslogs-group         = var.name

awslogs-stream-prefix = "ecs-service"

}

}

])
}

resource "aws_ecs_service" "api" {

name            = var.name

cluster         = aws_ecs_cluster.cluster.id

task_definition = aws_ecs_task_definition.api.arn

launch_type     = "FARGATE"

desired_count   = 1

depends_on      = [aws_lb_listener.green, aws_lb_listener.blue, aws_iam_role_policy.ecs-service-base-policy]

deployment_controller {

type = "CODE_DEPLOY"

}

load_balancer {

target_group_arn = aws_lb_target_group.blue.arn

container_name   = var.name

container_port   = 8080

}

network_configuration {

subnets = [aws_default_subnet.default_az1.id, aws_default_subnet.default_az2.id, aws_default_subnet.default_az3.id]

security_groups = [

aws_security_group.ecs.id

]

assign_public_ip = false

}

lifecycle {

ignore_changes = [

load_balancer,

desired_count,

task_definition

]

}
}
,
resource "aws_codedeploy_app" "app" {

compute_platform = "ECS"

name             = var.name
}

resource "aws_codedeploy_deployment_group" "group" {

app_name               = var.name

deployment_config_name = "CodeDeployDefault.ECSAllAtOnce"

deployment_group_name  = "${var.name}-group-1"

service_role_arn       = aws_iam_role.codedeploy-service.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"

}

}

deployment_style {

deployment_option = "WITH_TRAFFIC_CONTROL"

deployment_type   = "BLUE_GREEN"

}

ecs_service {

cluster_name = aws_ecs_cluster.cluster.name

service_name = aws_ecs_service.api.name

}

load_balancer_info {

target_group_pair_info {

prod_traffic_route {

listener_arns = [aws_lb_listener.green.arn]

}

test_traffic_route {

listener_arns = [aws_lb_listener.blue.arn]

}

target_group {

name = aws_lb_target_group.blue.name

}

target_group {

name = aws_lb_target_group.green.name

}

}

}
}
,
resource "aws_lb" "lb" {

name               = "${var.name}-lb"

internal           = false

load_balancer_type = "application"

subnets            = [aws_default_subnet.default_az1.id, aws_default_subnet.default_az2.id]

security_groups    = [aws_security_group.blue_green.id]
}

resource "aws_lb_target_group" "blue" {

name        = "${var.name}-blue"

port        = 80

target_type = "ip"

protocol    = "HTTP"

vpc_id      = aws_default_vpc.default.id

depends_on = [

aws_lb.lb

]

health_check {

path                = "/"

protocol            = "HTTP"

matcher             = "200"

interval            = "10"

timeout             = "5"

unhealthy_threshold = "3"

healthy_threshold   = "3"

}

tags = {

Name = var.name

}
}

resource "aws_lb_target_group" "green" {

name        = "${var.name}-green"

port        = 80

target_type = "ip"

protocol    = "HTTP"

vpc_id      = aws_default_vpc.default.id

depends_on = [

aws_lb.lb

]

health_check {

path                = "/"

protocol            = "HTTP"

matcher             = "200"

interval            = "10"

timeout             = "5"

unhealthy_threshold = "3"

healthy_threshold   = "3"

}

tags = {

Name = var.name

}
}

resource "aws_lb_listener" "green" {

load_balancer_arn = aws_lb.lb.arn

port              = "80"

protocol          = "HTTP"

default_action {

type             = "forward"

target_group_arn = aws_lb_target_group.green.arn

}

depends_on = [aws_lb_target_group.green]
}

resource "aws_lb_listener" "blue" {

load_balancer_arn = aws_lb.lb.arn

port              = "8080"

protocol          = "HTTP"

default_action {

type             = "forward"

target_group_arn = aws_lb_target_group.blue.arn

}

depends_on = [aws_lb_target_group.blue]
}
are all in a subfolder. I'm getting the following error:

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener arn:aws:elasticloadbalancing:eu-west-1:123:listener/app/api-lb/123/123

Это стандартный конвейер:

  1. КодКоммит
  2. Сборка кода
  3. Развертывание кода в ECS

Зафиксируйте и постройте работу, и я передаю артефакты на последний шаг. Однако развертывание завершается с ошибкой, упомянутой выше.

Я понятия не имею, что именно такое «целевая группа основного набора задач». Обе целевые группы являются позади слушателя.

Я знаю, что для этого есть модули Terraform, но мне хотелось изменить/расширить их после того, как они заработают, поэтому я решил начать с нуля. Просмотрел дюжину разных статей, но не могу понять, что не так с моей конфигурацией ECS.

Я создал репо со всеми файлами здесь, вот соответствующие конфигурации lb, ecs и CodeDeploy:

фунт:

appspec.yaml

развертывание кода

taskdef.json

экс:

Dockerfile

Есть какие-нибудь намеки на то, что я делаю неправильно? Спасибо!

#amazon-web-services #terraform #amazon-ecs #aws-codepipeline

KOT2003


Рег
22 Jun, 2004

Тем
76

Постов
192

Баллов
592
  • 25, Oct 2024
  • #2

Основная проблема заключалась в ошибке разрешения IAM. После щелчка по стеку "задачи" в кластере не запускались из-за отсутствия разрешений/ролей.

 

Elendial


Рег
29 May, 2011

Тем
65

Постов
210

Баллов
535
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно