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 необходимо еще раз добавить выходную переменную: