Terraform: инфраструктура на уровне кода | страница 91
scheduled_action_name = "scale-in-at-night"
min_size = 2
max_size = 10
desired_capacity = 2
recurrence = "0 17 * * *"
}
Первый ресурс aws_autoscaling_schedule используется для увеличения количества серверов до десяти в утреннее время (в параметре recurrence используется синтаксис cron, поэтому "09***" означает «в 9 утра каждый день»), а второй уменьшает этот показатель на ночь ("017***" значит «в 5 вечера каждый день»). Однако в обоих случаях не хватает параметра autoscaling_group_name, который задает имя ASG. Сама группа ASG определяется внутри модуля webserver-cluster. Как же получить доступ к ее имени? В языках общего назначения, таких как Ruby, функции могут возвращать значения:
def example_function(param1, param2)
return "Hello, #{param1} #{param2}"
end
# Другие участки вашего кода
return_value = example_function("foo", "bar")
В Terraform модули тоже могут возвращать значения. Для этого используется уже знакомый вам механизм: выходные переменные. Вы можете добавить имя ASG в качестве выходной переменной в файле modules/services/webserver-cluster/outputs.tf, как показано ниже:
output "asg_name" {
value = aws_autoscaling_group.example.name
description = "The name of the Auto Scaling Group"
}
Для обращения к выходным переменным модуля используется следующий синтаксис:
module.
Например:
module.frontend.asg_name
Этот синтаксис можно использовать в файле prod/services/webserver-cluster/main.tf, чтобы установить параметр autoscaling_group_name в каждом из ресурсов aws_autoscaling_schedule:
resource "aws_autoscaling_schedule" "scale_out_during_business_hours" {
scheduled_action_name = "scale-out-during-business-hours"
min_size = 2
max_size = 10
desired_capacity = 10
recurrence = "0 9 * * *"
autoscaling_group_name = module.webserver_cluster.asg_name
}
resource "aws_autoscaling_schedule" "scale_in_at_night" {
scheduled_action_name = "scale-in-at-night"
min_size = 2
max_size = 10
desired_capacity = 2
recurrence = "0 17 * * *"
autoscaling_group_name = module.webserver_cluster.asg_name
}
Возможно, вам следует сделать доступным еще одно выходное значение в модуле webserver-cluster: доменное имя ALB. Так вы будете знать, какой URL-адрес нужно проверить после развертывания кластера. Для этого в файле /modules/services/webserver-cluster/outputs.tf необходимо еще раз добавить выходную переменную: