Учимся развертывать Terraform Autoscaling Groups быстро

Вы устали от мониторинга нагрузки на ваших экземплярах AWS и объема трафика, который они получают? Почему бы не автоматизировать все, развернув Группы автомасштабирования с помощью Terraform? Автомасштабирование позволяет части серверов спать во время низкой нагрузки и добавлять больше серверов во время высокой нагрузки, экономя на электроэнергии для компаний.

В этом руководстве вы узнаете, как создавать и запускать конфигурацию Terraform для создания групп автомасштабирования и развертывать их с помощью Terraform.

Читайте дальше и достигайте нулевого времени простоя на ваших экземплярах!

Предварительные требования

Этот пост будет пошаговым руководством. Если вы хотите идти в ногу, убедитесь, что у вас есть следующее:

  • Учетная запись Amazon Web Service (AWS).
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, consider using Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – В этом руководстве используется Terraform v1.1.5, работающий на Ubuntu 20.04 LTS, но любая операционная система с Terraform должна работать.

Создание конфигурации Terraform для группы автомасштабирования AWS

Перед выполнением команд Terraform для создания и развертывания инфраструктуры необходимо создать файлы конфигурации Terraform. Вы создадите конфигурацию Terraform для создания группы масштабирования AWS в своей учетной записи AWS.

1. Войдите на свою машину с использованием любого клиента SSH.

2. Затем создайте папку с именем ~/terraform-autoscaling-demo, затем измените (cd) рабочий каталог на эту папку. В этой папке будут содержаться все файлы конфигурации, с которыми вы будете работать в этом руководстве.

mkdir ~/terraform-autoscaling-demo
cd ~/terraform-autoscaling-demo

3. Откройте ваш любимый редактор кода, скопируйте/вставьте следующую конфигурацию и сохраните файл как main.tf в ~/terraform-autoscaling-demo каталоге. Этот файл main.tf является конфигурацией Terraform для группы масштабирования.

Приведенный ниже код создает конфигурацию запуска масштабирования (web_config) и предоставляет группу масштабирования (autoscalegroup). Группа масштабирования также поставляется со своими компонентами (aws_autoscaling_schedule и aws_autoscaling_policy).

# Создание конфигурации масштабирования, содержащей сведения об экземпляре AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Определение имени конфигурации запуска масштабирования
  name          = "web_config"
# Определение идентификатора образа экземпляра AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Определение типа экземпляра AWS EC2
  instance_type = "t2.micro"
# Определение ключа, который будет использоваться для доступа к экземпляру AWS EC2
  key_name = "automateinfra"
}

# Создание группы масштабирования в зоне доступности us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Определение зоны доступности, в которой будет запущен экземпляр AWS EC2
  availability_zones        = ["us-east-1a"]
# Указание имени группы масштабирования
  name                      = "autoscalegroup"
# Определение максимального количества экземпляров AWS EC2 при масштабировании
  max_size                  = 2
# Определение минимального количества экземпляров AWS EC2 при масштабировании
  min_size                  = 1
# Период ожидания - это время, после которого экземпляр AWS EC2 начинает обслуживание перед проверкой состояния здоровья.
  health_check_grace_period = 30
# Масштабирование будет происходить на основе состояния здоровья экземпляра AWS EC2, определенного в тревоге AWS Cloudwatch
  health_check_type         = "EC2"
# force_delete удаляет группу автомасштабирования без ожидания завершения всех экземпляров в пуле
  force_delete              = true
# Определение политики завершения, где сначала будет заменен самый старый экземпляр
  termination_policies      = ["OldestInstance"]
# Группа масштабирования зависит от конфигурации запуска масштабирования из-за конфигураций экземпляра AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Создание расписания масштабирования группы масштабирования

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# Минимальный размер группы автомасштабирования
  min_size               = 1
# Максимальный размер группы автомасштабирования
  max_size               = 2
# Desired_capacity - количество работающих экземпляров EC2 в группе автомасштабирования
  desired_capacity       = 1
# Определение времени начала автомасштабирования, если вы считаете, что трафик может достигнуть пика в это время.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Создание политики автомасштабирования группы масштабирования
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# Количество экземпляров, на которое следует масштабировать.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# Время (в секундах) после завершения масштабирования и начала следующего масштабирования.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Создание тревоги AWS Cloudwatch, которая будет автомасштабировать экземпляр AWS EC2 на основе использования процессора.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Определение имени тревоги AWS Cloudwatch
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Определение имени метрики, по которой будет происходить масштабирование (на основе процессора)
  metric_name = "CPUUtilization"
# Пространство имен для связанной с тревогой метрики
  namespace = "AWS/EC2"
# После срабатывания тревоги AWS Cloudwatch она будет ожидать 60 секунд, а затем будет производить автомасштабирование
  period = "60"
  statistic = "Average"
# Порог использования ЦП установлен на 10 процентов
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Создайте еще один файл в ~/terraform-autoscaling-demo с именем provider.tf, и заполните его следующим содержимым. Файл provider.tf определяет провайдеры, такие как AWS, Oracle, Azure и так далее. Этот файл конфигурации позволяет связать Terraform с правильными облачными службами.

В данном руководстве будут созданы ресурсы в регионе us-east-1. Но вы можете найти список регионов, которые поддерживает AWS.

provider "aws" {
   region = "us-east-1"
 }

5. Наконец, выполните команду tree ниже, чтобы проверить наличие всех необходимых файлов в вашей папке проекта (~/terraform-autoscaling-demo).

Verifying the Required Files for Building AWS Autoscaling Group in AWS Cloud

Создание группы автомасштабирования AWS с использованием конфигурации Terraform

Теперь, когда у вас правильно настроены файл конфигурации Terraform и файлы переменных, пришло время инициировать Terraform и создать группу автомасштабирования AWS.

Для предоставления группы автомасштабирования AWS, как и для всех других конфигураций Terraform, Terraform использует три команды последовательно (terraform init, terraform plan и terraform apply).

1. Запустите команду terraform init в каталоге ~/terraform-autoscaling-demo. Команда инициализирует плагины и провайдеры, необходимые для работы с ресурсами.

terraform init

Если всё прошло успешно, вы увидите сообщение, которое говорит о том, что Terraform был успешно инициализирован в выводе, как показано ниже.

Initializing Terraform

2. Затем выполните команду terraform plan, чтобы убедиться, что синтаксис файлов конфигурации правильный и дает вам чертёж ресурсов, которые будут предоставлены в вашей инфраструктуре.

terraform plan

Если успешно, вы увидите сообщение, которое показывает план, подобный приведенному ниже.

Executing the Terraform Plan

3. Наконец, выполните команду terraform apply, чтобы снять обучающие колёса и вызвать Terraform для создания группы AWS AutoScaling.

Команда указывает Terraform’у прочитать каждую конфигурацию (*.tf) в текущем каталоге для компиляции состояния, отправленного в AWS. Затем Terraform создает группу AWS Autoscaling и другие компоненты.

Дополнительной платы за AWS Auto Scaling не взимается. Вы платите только за ресурсы AWS, необходимые для запуска ваших приложений.

Applying the Terraform Configuration to Build Autoscaling Group

Проверка группы AWS Autoscaling в облаке AWS

На данный момент вы должны были создать группу AWS Autoscaling и связанные компоненты с помощью Terraform. Но как вы узнаете, что они существуют в вашем облаке AWS? Проверьте группу Autoscaling путем ручной проверки в консоли управления AWS.

1. Откройте ваш любимый веб-браузер и войдите в Консоль управления AWS.

2. На главной странице консоли нажмите на поле поиска, найдите и нажмите «EC2», чтобы получить доступ к панели управления EC2.

Нажмите на пункт меню «Группа автомасштабирования AWS» в панели управления EC2 для управления вашими группами автомасштабирования.

Требуемое количество экземпляров AWS EC2 будет запущено в облачной среде AWS в панели управления EC2 с использованием автомасштабирования.

Verifying the AWS Autoscaling Group with Scaling Policy Containing AWS CloudWatch Alarm

3. Наконец, нажмите на «Конфигурация запуска автомасштабирования AWS» в панели управления EC2. Вы увидите вашу конфигурацию запуска автомасштабирования (web_config), как показано ниже.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Автомасштабирование экземпляра EC2 с тестированием нагрузки.

Теперь, когда вы проверили, что группа автомасштабирования/политика и связанные компоненты настроены правильно, пришло время проверить работу функций автомасштабирования. Как? Добавив нагрузку на недавно запущенный экземпляр с группой автомасштабирования.

1. Откройте экземпляр AWS EC2, запущенный с группой автомасштабирования, с помощью клиента SSH.

2. Затем запустите терминал и выполните следующую команду для установки инструмента нагрузочного тестирования (stress-ng). Инструмент нагрузочного тестирования позволяет определить и создать нагрузку на машине Ubuntu.

Вы также можете найти другие инструменты нагрузочного тестирования, доступные на рынке.

sudo apt install stress-ng
Installing the Load Stress tool on the AWS EC2 instance

3. Запустите команду stress-ng ниже, чтобы создать нагрузку на экземпляре.

Ниже приведена команда с использованием следующих флагов:

  • --cpu – Обозначает количество ядер, на которых будет создана нагрузка.
  • -v – Включает подробный режим.
  • --timeout – Указывает время, в течение которого следует создавать нагрузку.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Теперь выполните команду top сразу после создания нагрузки, чтобы отобразить процессы Linux.

top

Ниже вы можете видеть, что процессор перегружается после создания нагрузки на экземпляр.

Executing the top command to verify the CPU consumption

5. Перейдите в службу AWS CloudWatch на платформе AWS Cloud. Вы заметите, что генерируется тревога, так как процент использования CPU превысил (10%). Тревога уведомила группу автомасштабирования о масштабировании количества экземпляров с одного до двух, как указано в группе автомасштабирования.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Наконец, перейдите в Экземпляры на панели управления EC2 для проверки экземпляров AWS EC2.

Вы увидите, что запущен еще один экземпляр, что подтверждает успешную настройку группы автомасштабирования AWS и ее компонентов.

Verifying the AWS EC2 instances in the EC2 dashboard

Также вы можете проверить действия автомасштабирования в разделе “Активности” группы автомасштабирования AWS, как показано ниже.

Verifying the AWS AutoScale group activities

Заключение

В этом учебнике вы узнали, как использовать Terraform для развертывания группы автомасштабирования AWS и ее компонентов. Построение приложения с автомасштабированием AWS позволяет масштабироваться при необходимости и является быстрым заданием.

Теперь, обладая этими новыми знаниями, вперед, реализуйте автомасштабирование с другими службами AWS, не беспокоясь о нагрузке на сервера!

Source:
https://adamtheautomator.com/terraform-autoscaling-group/