Как «православно» настроить Blue/Green deployment через terraform на aws?

Начнем с того что привело к этому обширному вопросу. Вот эта картинка:
1*7vUIT3fqmcyRIRBWM28YmA.png

В отличии от вишеуказаной схемы. На данный момент у меня вместо автоскейлинг групы заменяется launch конфигурация с новым ami образом. После деплоя новой инфры внезависимости от значения:
deregistration_delay = 300
Ресурса:
resource "aws_lb_target_group" "lb_tg_name" {
  name  = "${var.env_prefix}-lb-tg"
  vpc_id  = var.vpc_id
  port  = "80"
  protocol  = "HTTP"
  deregistration_delay = 300

  stickiness {
    type = "lb_cookie"
  }

  health_check {
                path = "/"
                port = "80"
                protocol = "HTTP"
                healthy_threshold = 3
                unhealthy_threshold = 3
                interval = 30
                timeout = 5
                matcher = "200-308"
  }

  tags = {
    Name       = "app-alb-tg"
    Env        = var.env_prefix
    CreatedBy  = var.created_by
  }
}


Таргет група тут же присваиет старой машине статус draining и выдает 503 код страницы. И это несмотря на то, что предыдущая машина (ec2) еще жива и способна отвечать на запросы.
Так мы "лежим" примерно с минуту пока не подымится новая машинка и сможет отвечать на запросы.

1) Куда копать чтобы все было плавно и без всяких 503?
2) Может нужно не launch конфигурацию менять, а еще и autoscaling групу как это сделать?
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Фишка из 2015 года от сотрудника Hashicorp. Нужно создавать ASG c lifecycle-ом на каждую LC и разруливать переключение трафика на балансировщике.
В Terraform можно делать вот так:
resource "aws_launch_configuration" "myapp" {
  name_prefix = "myapp_"
...
resource "aws_autoscaling_group" "myapp" {
  name = "myapp - ${aws_launch_configuration.myapp.name}"
  min_elb_capacity =  = "${var.myapp_asg_min_size}"
...
  lifecycle { create_before_destroy = true }

Пока количество инстансов в статусе InService не достигнет min_elb_capacity, они не будут прицеплены к балансировщику. Затем уже сам балансировщик по хелсчекам у себя должен поменять статус новым инстансам как InService и начнёт пускать на них трафик, в этот же момент TF начнёт удалять старую ASG.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы