Управление Auto Scaling Group через terraform

Допустим, у меня есть группа автоматического масштабирования, которой я управляю через terraform. И я хочу, чтобы эта группа автоматического масштабирования увеличивалась и уменьшалась в соответствии с нашими рабочими часами.

Шаблон TF для управления ASG:

resource "aws_autoscaling_group" "foobar" {
  availability_zones        = ["us-west-2a"]
  name                      = "terraform-test-foobar5"
  max_size                  = 1
  min_size                  = 1
  health_check_grace_period = 300
  health_check_type         = "ELB"
  force_delete              = true
  termination_policies      = ["OldestInstance"]
}

resource "aws_autoscaling_schedule" "foobar" {
  scheduled_action_name  = "foobar"
  min_size               = 0
  max_size               = 1
  desired_capacity       = 0
  start_time             = "2016-12-11T18:00:00Z"
  end_time               = "2016-12-12T06:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.foobar.name
}

Как мы видим здесь, я должен установить конкретную дату и время для действия.

что я хочу, так это: я хочу уменьшить масштаб в субботу вечером в 21:00 на 10% от моей текущей мощности, а затем снова хочу увеличить на 10% в понедельник утром в 6:00.

Как я могу этого добиться.

Любая помощь высоко ценится. Пожалуйста, дайте мне знать, как пройти через это.


person Legitimate_Figure_4430    schedule 22.04.2021    source источник
comment
Что не так с текущим кодом? Есть ошибки?   -  person Marcin    schedule 22.04.2021
comment
Есть ли здесь больше сложности, которую вы не показали? Прямо сейчас у вас есть очень статичный ASG, а затем вы меняете его в определенное время. Если вы также не прикрепите политики автомасштабирования к ASG для масштабирования количества экземпляров, то в приведенном выше коде нет ничего плохого (хотя я предполагаю, что у вас будет, например, 10 экземпляров в течение недели, а затем масштабирование до 9 в выходные дни ). Если есть большая сложность, вы должны объяснить это в вопросе и в идеале показать минимальный код, необходимый для такого масштабирования.   -  person ydaetskcoR    schedule 22.04.2021
comment
Я создал новый пост с подробным кодом, который я использую, и тем, чего я хочу достичь. Вот ссылка. : stackoverflow.com/questions/67212282/manage-asg-via-terraform . Пожалуйста, обратитесь к этому и помогите   -  person Legitimate_Figure_4430    schedule 22.04.2021


Ответы (1)


Решение не простое, но выполнимое. Необходимые шаги:

  • создать функцию Lambda, которая уменьшает ASG (например, с Boto3 и Python)
  • назначить роль IAM с нужными разрешениями
  • создайте триггер Cron для каждой субботы в 9 вечера с aws_cloudwatch_event_rule
  • создайте aws_cloudwatch_event_target с ранее созданным триггером Cron и функцией Lambda
  • повторить для увеличения

Этот модуль, вероятно, соответствует вашим потребностям, вам просто нужно закодировать Lambda и использовать модуль, чтобы запускать его по расписанию.

person Simone Ripamonti    schedule 22.04.2021
comment
Я создал новый пост с подробным кодом, который я использую, и тем, чего я хочу достичь. Вот ссылка. : stackoverflow.com/questions/67212282/manage-asg-via-terraform. Пожалуйста, обратитесь к этому и помогите. спасибо за вашу помощь в этом 1 - person Legitimate_Figure_4430; 22.04.2021
comment
Зачем вам для этого нужна функция Lambda, если в AWS уже есть автоматическое масштабирование по времени? docs.aws.amazon.com/autoscaling/ec2/userguide/ - person Mark B; 22.04.2021