通过 Terraform 管理 Auto Scaling 组
Managing Auto Scaling Group via terraform
假设我有一个通过 Terraform 管理的自动缩放组。我希望自动缩放组根据我们的工作时间扩大和缩小规模。
用于管理 ASG 的 TF 模板:
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
}
正如我们在这里看到的,我必须为操作设置特定的日期和时间。
我想要的是:我想在星期六晚上 9 点缩小我当前容量的 10%,然后在星期一早上 6 点再次扩大 10%。
我怎样才能做到这一点。
非常感谢任何帮助。请告诉我如何解决这个问题。
解决方案并不简单,但可行。所需的步骤是:
- 创建一个缩小 ASG 的 Lambda 函数(例如使用 Boto3 和 Python)
- 分配具有正确权限的 IAM 角色
- 使用
aws_cloudwatch_event_rule
为“每周六晚上 9 点”创建一个 Cron 触发器
- 使用之前创建的 Cron 触发器和 Lambda 函数创建
aws_cloudwatch_event_target
- 重复放大
This module 可能会满足您的需求,您只需编写 Lambda 代码并使用该模块按计划触发它。
假设我有一个通过 Terraform 管理的自动缩放组。我希望自动缩放组根据我们的工作时间扩大和缩小规模。
用于管理 ASG 的 TF 模板:
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
}
正如我们在这里看到的,我必须为操作设置特定的日期和时间。
我想要的是:我想在星期六晚上 9 点缩小我当前容量的 10%,然后在星期一早上 6 点再次扩大 10%。
我怎样才能做到这一点。
非常感谢任何帮助。请告诉我如何解决这个问题。
解决方案并不简单,但可行。所需的步骤是:
- 创建一个缩小 ASG 的 Lambda 函数(例如使用 Boto3 和 Python)
- 分配具有正确权限的 IAM 角色
- 使用
aws_cloudwatch_event_rule
为“每周六晚上 9 点”创建一个 Cron 触发器
- 使用之前创建的 Cron 触发器和 Lambda 函数创建
aws_cloudwatch_event_target
- 重复放大
This module 可能会满足您的需求,您只需编写 Lambda 代码并使用该模块按计划触发它。