•
Современные приложения должны использовать в основном ALB или NLB. Поскольку наш простой пример с веб-сервером является HTTP-приложением без серьезных требований к производительности, нам лучше всего подойдет ALB.
Как показано на рис. 2.11, ALB состоит из нескольких частей.
•
•
Рис. 2.11. Обзор Application Load Balancer (ALB)
Первым делом нужно создать сам балансировщик ALB, используя ресурс aws_lb:
resource "aws_lb" "example" {
name = "terraform-asg-example"
load_balancer_type = "application"
subnets = data.aws_subnet_ids.default.ids
}
Обратите внимание, что параметр subnets настраивает балансировщик нагрузки для использования всех подсетей в вашем облаке VPC по умолчанию с помощью источника данных aws_subnet_ids33. Балансировщики нагрузки в AWS состоят не из одного, а сразу из нескольких серверов, которые могут работать в разных подсетях (и, следовательно, в отдельных вычислительных центрах). AWS автоматически масштабирует количество балансировщиков в зависимости от трафика и отрабатывает отказ, если один из этих серверов выйдет из строя. Таким образом, вы получаете как масштабируемость, так и высокую доступность.
Следующим шагом будет определение прослушивателя для этого ALB с помощью ресурса aws_lb_listener:
resource "aws_lb_listener" "http" {
load_balancer_arn = aws_lb.example.arn
port = 80
protocol = "HTTP"
# По умолчанию возвращает простую страницу с кодом 404
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "404: page not found"
status_code = 404
}
}
}
Этот прослушиватель настраивает ALB для прослушивания стандартного HTTP-порта (80), использования HTTP-протокола и возвращения простой страницы с кодом 404 в случае, если запрос не соответствует ни одному из правил прослушивания.
Стоит отметить, что по умолчанию для всех ресурсов AWS, включая ALB, закрыт входящий и исходящий трафик, поэтому нужно создать новую группу безопасности специально для балансировщика нагрузки. Эта группа должна разрешать входящие запросы на порт 80, чтобы вы могли обращаться к ALB по HTTP, а также исходящие запросы на всех портах, чтобы балансировщик мог проверять работоспособность:
resource "aws_security_group" "alb" {
name = "terraform-example-alb"
# Разрешаем все входящие HTTP-запросы
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Разрешаем все исходящие запросы
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Нужно сделать так, чтобы ресурс aws_lb использовал указанную группу безопасности. Для этого установите аргумент security_groups:
resource "aws_lb" "example" {
name = "terraform-asg-example"
load_balancer_type = "application"
subnets = data.aws_subnet_ids.default.ids
security_groups = [aws_security_group.alb.id]
}
Затем необходимо создать целевую группу для ASG, используя ресурс aws_lb_target_group:
resource "aws_lb_target_group" "asg" {
name = "terraform-asg-example"
port = var.server_port
protocol = "HTTP"
vpc_id = data.aws_vpc.default.id
health_check {
path = "/"
protocol = "HTTP"
matcher = "200"
interval = 15
timeout = 3
healthy_threshold = 2
unhealthy_threshold = 2
}
}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии