Перейти к содержанию

Описание примера кода Terraform

Ниже приведено описание частей кода для запуска и автомасштабирования ноды Валарм. Остальная часть кода описывает сервис Wordpress.

Настройка запуска ноды Валарм

Настройки запуска описаны в файле main.tf в объекте wallarm_launch_config. В приведенном примере выполняются следующие действия с нодой Валарм:

  1. Создание файлов /etc/nginx/key.pem и /etc/nginx/cert.pem с самоподписанным сертификатом SSL и приватным ключом. Для использования в боевой среде необходимо заменить данные реальными значениями.

  2. Создание файла /etc/nginx/sites-available/default с настройкой ресурсов, которые защищены нодой. В приведенном примере файл содержит следующие настройки:

    • Блоки с конфигурацией HTTP и HTTPS в качестве прокси‑серверов для всех входящих запросов
    • Блок /healthcheck с описанием эндпоинта для проверки работоспособности сервиса: всегда возвращает HTTP‑статус 200
    • Проксирование всех входящих HTTP и HTTPS запросов на DNS экземпляра ELB Wordpress, который описан в переменной ${aws_elb.wp_elb.dns_name}
  3. Запуск набора команд, описанных в блоке runcmd, для настройки ноды:

    • Создание новой ноды в Облаке Валарм
    • Тестирование конфигурации и запуск экземпляра NGINX

Настройка автомасштабирования ноды Валарм

Настройки автомасштабирования описаны в следующем объекте файла main.tf:

resource "aws_autoscaling_group" "wallarm_waf_asg" {
  lifecycle { create_before_destroy = true }

  name                 = "tf-wallarm-demo-waf-asg-${aws_launch_configuration.wallarm_launch_config.name}"
  launch_configuration = "${aws_launch_configuration.wallarm_launch_config.name}"
  min_size             = "2"
  max_size             = "5"
  min_elb_capacity     = "2"
  availability_zones   = [var.az_a]
  vpc_zone_identifier  = ["${aws_subnet.public_a.id}"]
  target_group_arns = [ "${aws_lb_target_group.wallarm_asg_target_http.arn}", "${aws_lb_target_group.wallarm_asg_target_https.arn}"
  ]

  enabled_metrics = [
    "GroupMinSize",
    "GroupMaxSize",
    "GroupDesiredCapacity",
    "GroupInServiceInstances",
    "GroupTotalInstances"
  ]
  metrics_granularity = "1Minute"

  tag {
      key                 = "Name"
      value               = "tf-wallarm-demo-waf-node"
      propagate_at_launch = true
    }
}
  • Для автомасштабирования ресурсов ASG в зависимости от нагрузки на ЦП, требуются включенные метрики CloudWatch (параметр enabled_metrics). Если вы используете фиксированное количество нод Валарм, эта часть может быть опущена.

  • Объекты wallarm_policy_up, wallarm_policy_down и соответствующие метрики CloudWatch определяют пороговые значения и периоды использования ЦП при автомасштабировании ресурсов ASG.

  • Объект lifecycle { create_before_destroy = true } определяет порядок действий при изменении конфигурации кластера с нодой Валарм. В приведенном примере Terraform создает новый набор Launch Configuration и объектов ASG; проверяет, что новые ноды определены соответствующим балансировщиком нагрузки как доступные по показателю min_elb_capacity; удаляет предыдущие набор Launch Configuration и ресурсы ASG. Подход гарантирует, что запуск новой конфигурации ноды не прервет поток трафика.

К началу