Skip to content

Commit 7920a4f

Browse files
committed
feat(asg): Add fine-grained options for schedule_config scale_in and scale_out
1 parent a67b87b commit 7920a4f

File tree

3 files changed

+42
-10
lines changed

3 files changed

+42
-10
lines changed

README.md

+28-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,34 @@ Once you have created the parameter, you must remove the variable `runners_token
148148

149149
Finally, the runner still supports the manual runner creation. No changes are required. Please keep in mind that this setup will be removed in future releases.
150150

151-
### Auto Scaling Group Instance Termination
151+
### Auto Scaling Group
152+
153+
#### Scheduled scaling
154+
155+
When `enable_schedule=true`, the `schedule_config` variable can be used to scale the Auto Scaling group.
156+
157+
Scaling may be defined with one `scale_out` scheduled action and/or one `scale_in` scheduled action.
158+
159+
For example:
160+
```hcl
161+
module "runner" {
162+
...
163+
enable_schedule = true
164+
schedule_config = {
165+
# Configure optional scale_out scheduled action
166+
scale_out_recurrence = "0 8 * * 1-5"
167+
scale_out_count = 1 # Default for min_size, desired_capacity and max_size
168+
# Override using: scale_out_min_size, scale_out_desired_capacity, scale_out_max_size
169+
170+
# Configure optional scale_in scheduled action
171+
scale_in_recurrence = "0 18 * * 1-5"
172+
scale_in_count = 0 # Default for min_size, desired_capacity and max_size
173+
# Override using: scale_out_min_size, scale_out_desired_capacity, scale_out_max_size
174+
}
175+
}
176+
```
177+
178+
#### Instance Termination
152179

153180
The Auto Scaling Group may be configured with a
154181
[lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)

main.tf

+6-6
Original file line numberDiff line numberDiff line change
@@ -192,19 +192,19 @@ resource "aws_autoscaling_schedule" "scale_in" {
192192
autoscaling_group_name = aws_autoscaling_group.gitlab_runner_instance.name
193193
scheduled_action_name = "scale_in-${aws_autoscaling_group.gitlab_runner_instance.name}"
194194
recurrence = var.schedule_config["scale_in_recurrence"]
195-
min_size = var.schedule_config["scale_in_count"]
196-
desired_capacity = var.schedule_config["scale_in_count"]
197-
max_size = var.schedule_config["scale_in_count"]
195+
min_size = try(var.schedule_config["scale_in_min_size"], var.schedule_config["scale_in_count"])
196+
desired_capacity = try(var.schedule_config["scale_in_desired_capacity"], var.schedule_config["scale_in_count"])
197+
max_size = try(var.schedule_config["scale_in_max_size"], var.schedule_config["scale_in_count"])
198198
}
199199

200200
resource "aws_autoscaling_schedule" "scale_out" {
201201
count = var.enable_schedule ? 1 : 0
202202
autoscaling_group_name = aws_autoscaling_group.gitlab_runner_instance.name
203203
scheduled_action_name = "scale_out-${aws_autoscaling_group.gitlab_runner_instance.name}"
204204
recurrence = var.schedule_config["scale_out_recurrence"]
205-
min_size = var.schedule_config["scale_out_count"]
206-
desired_capacity = var.schedule_config["scale_out_count"]
207-
max_size = var.schedule_config["scale_out_count"]
205+
min_size = try(var.schedule_config["scale_out_min_size"], var.schedule_config["scale_out_count"])
206+
desired_capacity = try(var.schedule_config["scale_out_desired_capacity"], var.schedule_config["scale_out_count"])
207+
max_size = try(var.schedule_config["scale_out_max_size"], var.schedule_config["scale_out_count"])
208208
}
209209

210210
data "aws_ami" "runner" {

variables.tf

+8-3
Original file line numberDiff line numberDiff line change
@@ -636,10 +636,15 @@ variable "schedule_config" {
636636
description = "Map containing the configuration of the ASG scale-in and scale-up for the runner instance. Will only be used if enable_schedule is set to true. "
637637
type = map(any)
638638
default = {
639-
scale_in_recurrence = "0 18 * * 1-5"
640-
scale_in_count = 0
639+
# Configure optional scale_out scheduled action
641640
scale_out_recurrence = "0 8 * * 1-5"
642-
scale_out_count = 1
641+
scale_out_count = 1 # Default for min_size, desired_capacity and max_size
642+
# Override using: scale_out_min_size, scale_out_desired_capacity, scale_out_max_size
643+
644+
# Configure optional scale_in scheduled action
645+
scale_in_recurrence = "0 18 * * 1-5"
646+
scale_in_count = 0 # Default for min_size, desired_capacity and max_size
647+
# Override using: scale_out_min_size, scale_out_desired_capacity, scale_out_max_size
643648
}
644649
}
645650

0 commit comments

Comments
 (0)