Читаем Terraform: инфраструктура на уровне кода полностью

Обратите внимание на то, что данная целевая группа будет проверять работоспособность ваших серверов, отправляя им периодически HTTP-запросы; сервер считается работоспособным, только если его ответ совпадает с заданным сопоставителем (например, вы можете сделать так, чтобы сопоставитель ожидал ответа 200OK). Если сервер не отвечает (возможно, из-за перебоев в работе или перегрузки), он будет помечен как неработоспособный и целевая группа автоматически прекратит отправлять ему трафик, чтобы минимизировать нарушение обслуживания ваших пользователей.

Но откуда целевая группа знает, каким серверам EC2 следует отправлять запросы? Вы могли бы прописать в ней статический список серверов ресурсом aws_lb_target_group_attachment, однако при работе с ASG серверы могут запускаться и удаляться в любой момент, поэтому такой подход не годится. Вместо этого можно воспользоваться первоклассной интеграцией между ASG и ALB. Вернитесь к ресурсу aws_autoscaling_group и сделайте так, чтобы его аргумент target_group_arns указывал на новую целевую группу:

resource "aws_autoscaling_group" "example" {

  launch_configuration = aws_launch_configuration.example.name

  vpc_zone_identifier  = data.aws_subnet_ids.default.ids

  target_group_arns = [aws_lb_target_group.asg.arn]

  health_check_type = "ELB"

  min_size = 2

  max_size = 10

  tag {

    key                 = "Name"

    value               = "terraform-asg-example"

    propagate_at_launch = true

  }

}

Вы также должны поменять значение health_check_type на "ELB". Значение по умолчанию, "EC2", подразумевает минимальную проверку работоспособности, которая считает сервер неисправным, только если гипервизор AWS утверждает, что ВМ совсем не работает или является недоступной. Значение "ELB" более надежно, поскольку вынуждает ASG проверять работоспособность целевой группы. К тому же серверы автоматически заменяются, если целевая группа объявляет их неисправными. Таким образом, серверы подлежат замене не только в случае полного отказа, но и когда они, к примеру, перестают обслуживать запросы из-за нехватки памяти или остановки критически важного процесса.

Пришло время собрать это все воедино. Для этого мы создадим правила прослушивателя, используя ресурс aws_lb_listener_rule:

resource "aws_lb_listener_rule" "asg" {

  listener_arn = aws_lb_listener.http.arn

  priority     = 100

  condition {

    field  = "path-pattern"

    values = ["*"]

  }

  action {

    type             = "forward"

    target_group_arn = aws_lb_target_group.asg.arn

  }

}

Этот код добавляет правило прослушивателя, которое отправляет запросы, соответствующие любому пути, к целевой группе с ASG внутри.

Прежде чем разворачивать балансировщик нагрузки, нужно сделать еще кое-что — поменять старый вывод public_ip одного сервера EC2 на вывод доменного имени ALB:

output "alb_dns_name" {

  value       = aws_lb.example.dns_name

  description = "The domain name of the load balancer"

}

Выполните terraformapply и почитайте полученный план. Согласно ему наш исходный сервер EC2 удаляется, а вместо него Terraform создает конфигурацию запуска, ASG, ALB и группу безопасности. Если с планом все в порядке, введите yes и нажмите клавишу Enter. Когда команда apply завершит работу, вы должны увидеть вывод alb_dns_name:

Outputs:

alb_dns_name = terraform-asg-example-123.us-east-2.elb.amazonaws.com

Скопируйте этот URL-адрес. Подождите, пока наши серверы загрузятся и ALB пометит их как работоспособные. Тем временем можете просмотреть то, что вы развернули. Открыв раздел ASG консоли EC2 (https://amzn.to/2MH3mId), вы должны увидеть, что группа автомасштабирования уже создана (рис. 2.12).

Рис. 2.12. Группа автомасштабирования

Если перейти на вкладку Instances (Серверы), можно увидеть запуск двух серверов EC2, как показано на рис. 2.13.

Рис. 2.13. Запуск серверов EC2 в ASG

Щелкнув на вкладке Load Balancers (Балансировщики нагрузки), вы увидите свой экземпляр ALB, как показано на рис. 2.14.

Рис. 2.14. Application Load Balancer

Чтобы найти целевую группу, как показано на рис. 2.15, перейдите на вкладку Target Groups (Целевые группы).

Рис. 2.15. Целевая группа

Если вы выберете свою целевую группу и щелкнете на вкладке Targets (Цели) в нижней части экрана, то сможете увидеть, как ваши серверы регистрируются в целевой группе и проходят проверки работоспособности. Подождите, пока их индикатор состояния не начнет показывать healthy. Это обычно занимает одну-две минуты. После проверьте вывод alb_dns_name, который вы скопировали ранее:

$ curl http://>

Hello, World

Получилось! ALB направляет трафик к вашим серверам EC2. Каждый раз, когда вы обращаетесь по этому URL-адресу, он выбирает другой сервер для обработки запроса. Вы получили полностью рабочий кластер веб-серверов!

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги