Skip to content

Commit 0277e00

Browse files
committed
feat: Update service configurations
1 parent 8240072 commit 0277e00

File tree

3 files changed

+109
-45
lines changed

3 files changed

+109
-45
lines changed

modules/service/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ module "ecs_service" {
236236
| <a name="input_assign_public_ip"></a> [assign\_public\_ip](#input\_assign\_public\_ip) | Assign a public IP address to the ENI (Fargate launch type only) | `bool` | `false` | no |
237237
| <a name="input_autoscaling_max_capacity"></a> [autoscaling\_max\_capacity](#input\_autoscaling\_max\_capacity) | Maximum number of tasks to run in your service | `number` | `10` | no |
238238
| <a name="input_autoscaling_min_capacity"></a> [autoscaling\_min\_capacity](#input\_autoscaling\_min\_capacity) | Minimum number of tasks to run in your service | `number` | `1` | no |
239-
| <a name="input_autoscaling_policies"></a> [autoscaling\_policies](#input\_autoscaling\_policies) | Map of autoscaling policies to create for the service | `any` | <pre>{<br/> "cpu": {<br/> "policy_type": "TargetTrackingScaling",<br/> "target_tracking_scaling_policy_configuration": {<br/> "predefined_metric_specification": {<br/> "predefined_metric_type": "ECSServiceAverageCPUUtilization"<br/> }<br/> }<br/> },<br/> "memory": {<br/> "policy_type": "TargetTrackingScaling",<br/> "target_tracking_scaling_policy_configuration": {<br/> "predefined_metric_specification": {<br/> "predefined_metric_type": "ECSServiceAverageMemoryUtilization"<br/> }<br/> }<br/> }<br/>}</pre> | no |
239+
| <a name="input_autoscaling_policies"></a> [autoscaling\_policies](#input\_autoscaling\_policies) | Map of autoscaling policies to create for the service | <pre>map(object({<br/> name = optional(string) # Will fall back to the key name if not provided<br/> policy_type = optional(string, "TargetTrackingScaling")<br/> step_scaling_policy_configuration = optional(object({<br/> adjustment_type = optional(string)<br/> cooldown = optional(number)<br/> metric_aggregation_type = optional(string)<br/> min_adjustment_magnitude = optional(number)<br/> step_adjustments = optional(list(object({<br/> metric_interval_lower_bound = optional(string)<br/> metric_interval_upper_bound = optional(string)<br/> scaling_adjustment = number<br/> })))<br/> }))<br/> target_tracking_scaling_policy_configuration = optional(object({<br/> customized_metric_specification = optional(object({<br/> dimensions = optional(list(object({<br/> name = string<br/> value = string<br/> })))<br/> metric_name = optional(string)<br/> metrics = optional(list(object({<br/> expression = optional(string)<br/> id = string<br/> label = optional(string)<br/> metric_stat = optional(object({<br/> metric = object({<br/> dimensions = optional(list(object({<br/> name = string<br/> value = string<br/> })))<br/> metric_name = string<br/> namespace = string<br/> })<br/> stat = string<br/> unit = optional(string)<br/> }))<br/> return_data = optional(bool)<br/> })))<br/> namespace = optional(string)<br/> statistic = optional(string)<br/> unit = optional(string)<br/> }))<br/> }))<br/> disable_scale_in = optional(bool)<br/> predefined_metric_specification = optional(object({<br/> predefined_metric_type = string<br/> resource_label = optional(string)<br/> }))<br/> scale_in_cooldown = optional(number, 300)<br/> scale_out_cooldown = optional(number, 60)<br/> target_value = optional(number, 75)<br/> }))</pre> | <pre>{<br/> "cpu": {<br/> "policy_type": "TargetTrackingScaling",<br/> "target_tracking_scaling_policy_configuration": {<br/> "predefined_metric_specification": {<br/> "predefined_metric_type": "ECSServiceAverageCPUUtilization"<br/> }<br/> }<br/> },<br/> "memory": {<br/> "policy_type": "TargetTrackingScaling",<br/> "target_tracking_scaling_policy_configuration": {<br/> "predefined_metric_specification": {<br/> "predefined_metric_type": "ECSServiceAverageMemoryUtilization"<br/> }<br/> }<br/> }<br/>}</pre> | no |
240240
| <a name="input_autoscaling_scheduled_actions"></a> [autoscaling\_scheduled\_actions](#input\_autoscaling\_scheduled\_actions) | Map of autoscaling scheduled actions to create for the service | <pre>map(object({<br/> name = optional(string)<br/> min_capacity = number<br/> max_capacity = number<br/> schedule = string<br/> start_time = optional(string)<br/> end_time = optional(string)<br/> timezone = optional(string)<br/> }))</pre> | `null` | no |
241241
| <a name="input_availability_zone_rebalancing"></a> [availability\_zone\_rebalancing](#input\_availability\_zone\_rebalancing) | ECS automatically redistributes tasks within a service across Availability Zones (AZs) to mitigate the risk of impaired application availability due to underlying infrastructure failures and task lifecycle activities. The valid values are `ENABLED` and `DISABLED`. Defaults to `DISABLED` | `string` | `null` | no |
242242
| <a name="input_capacity_provider_strategy"></a> [capacity\_provider\_strategy](#input\_capacity\_provider\_strategy) | Capacity provider strategies to use for the service. Can be one or more | <pre>map(object({<br/> base = optional(number)<br/> capacity_provider = string<br/> weight = optional(number)<br/> }))</pre> | `null` | no |

modules/service/main.tf

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,102 +1387,111 @@ resource "aws_appautoscaling_policy" "this" {
13871387

13881388
region = var.region
13891389

1390-
name = try(each.value.name, each.key)
1391-
policy_type = try(each.value.policy_type, "TargetTrackingScaling")
1390+
name = try(coalesce(each.value.name, each.key))
1391+
policy_type = each.value.policy_type
13921392
resource_id = aws_appautoscaling_target.this[0].resource_id
13931393
scalable_dimension = aws_appautoscaling_target.this[0].scalable_dimension
13941394
service_namespace = aws_appautoscaling_target.this[0].service_namespace
13951395

13961396
dynamic "step_scaling_policy_configuration" {
1397-
for_each = try([each.value.step_scaling_policy_configuration], [])
1397+
for_each = each.value.step_scaling_policy_configuration != null ? [each.value.step_scaling_policy_configuration] : []
13981398

13991399
content {
1400-
adjustment_type = try(step_scaling_policy_configuration.value.adjustment_type, null)
1401-
cooldown = try(step_scaling_policy_configuration.value.cooldown, null)
1402-
metric_aggregation_type = try(step_scaling_policy_configuration.value.metric_aggregation_type, null)
1403-
min_adjustment_magnitude = try(step_scaling_policy_configuration.value.min_adjustment_magnitude, null)
1400+
adjustment_type = step_scaling_policy_configuration.value.adjustment_type
1401+
cooldown = step_scaling_policy_configuration.value.cooldown
1402+
metric_aggregation_type = step_scaling_policy_configuration.value.metric_aggregation_type
1403+
min_adjustment_magnitude = step_scaling_policy_configuration.value.min_adjustment_magnitude
14041404

14051405
dynamic "step_adjustment" {
1406-
for_each = try(step_scaling_policy_configuration.value.step_adjustment, [])
1406+
for_each = step_scaling_policy_configuration.value.step_adjustment != null ? step_scaling_policy_configuration.value.step_adjustment : []
14071407

14081408
content {
1409-
metric_interval_lower_bound = try(step_adjustment.value.metric_interval_lower_bound, null)
1410-
metric_interval_upper_bound = try(step_adjustment.value.metric_interval_upper_bound, null)
1411-
scaling_adjustment = try(step_adjustment.value.scaling_adjustment, null)
1409+
metric_interval_lower_bound = step_adjustment.value.metric_interval_lower_bound
1410+
metric_interval_upper_bound = step_adjustment.value.metric_interval_upper_bound
1411+
scaling_adjustment = step_adjustment.value.scaling_adjustment
14121412
}
14131413
}
14141414
}
14151415
}
14161416

14171417
dynamic "target_tracking_scaling_policy_configuration" {
1418-
for_each = try(each.value.policy_type, null) == "TargetTrackingScaling" ? try([each.value.target_tracking_scaling_policy_configuration], []) : []
1418+
for_each = each.value.policy_type == "TargetTrackingScaling" && each.value.target_tracking_scaling_policy_configuration != null ? [each.value.target_tracking_scaling_policy_configuration] : []
14191419

14201420
content {
14211421
dynamic "customized_metric_specification" {
1422-
for_each = try([target_tracking_scaling_policy_configuration.value.customized_metric_specification], [])
1422+
for_each = target_tracking_scaling_policy_configuration.value.customized_metric_specification != null ? [target_tracking_scaling_policy_configuration.value.customized_metric_specification] : []
14231423

14241424
content {
1425-
dynamic "metrics" {
1426-
for_each = try(customized_metric_specification.value.metrics, [])
1425+
dynamic "dimensions" {
1426+
for_each = customized_metric_specification.value.dimensions != null ? customized_metric_specification.value.dimensions : []
1427+
14271428
content {
1428-
id = metrics.value.id
1429-
label = try(metrics.value.label, null)
1430-
return_data = try(metrics.value.return_data, true)
1431-
expression = try(metrics.value.expression, null)
1429+
name = dimensions.value.name
1430+
value = dimensions.value.value
1431+
}
1432+
}
14321433

1434+
metric_name = customized_metric_specification.value.metric_name
1435+
1436+
dynamic "metrics" {
1437+
for_each = customized_metric_specification.value.metrics != null ? customized_metric_specification.value.metrics : []
1438+
1439+
content {
1440+
expression = metrics.value.expression
1441+
id = metrics.value.id
1442+
label = metrics.value.label
14331443

14341444
dynamic "metric_stat" {
1435-
for_each = try([metrics.value.metric_stat], [])
1445+
for_each = metrics.value.metric_stat != null ? [metrics.value.metric_stat] : []
1446+
14361447
content {
1437-
stat = metric_stat.value.stat
14381448
dynamic "metric" {
1439-
for_each = try([metric_stat.value.metric], [])
1449+
for_each = [metric_stat.value.metric]
1450+
14401451
content {
1441-
namespace = metric.value.namespace
1442-
metric_name = metric.value.metric_name
14431452
dynamic "dimensions" {
1444-
for_each = try(metric.value.dimensions, [])
1453+
for_each = metric.value.dimensions != null ? metric.value.dimensions : []
1454+
14451455
content {
14461456
name = dimensions.value.name
14471457
value = dimensions.value.value
14481458
}
14491459
}
1460+
1461+
metric_name = metric.value.metric_name
1462+
namespace = metric.value.namespace
14501463
}
14511464
}
1465+
1466+
stat = metric_stat.value.stat
1467+
unit = metric_stat.value.unit
14521468
}
14531469
}
1454-
}
1455-
}
1456-
dynamic "dimensions" {
1457-
for_each = try(customized_metric_specification.value.dimensions, [])
14581470

1459-
content {
1460-
name = dimensions.value.name
1461-
value = dimensions.value.value
1471+
return_data = metrics.value.return_data
14621472
}
14631473
}
14641474

1465-
metric_name = try(customized_metric_specification.value.metric_name, null)
1466-
namespace = try(customized_metric_specification.value.namespace, null)
1467-
statistic = try(customized_metric_specification.value.statistic, null)
1468-
unit = try(customized_metric_specification.value.unit, null)
1475+
namespace = customized_metric_specification.value.namespace
1476+
statistic = customized_metric_specification.value.statistic
1477+
unit = customized_metric_specification.value.unit
14691478
}
14701479
}
14711480

1472-
disable_scale_in = try(target_tracking_scaling_policy_configuration.value.disable_scale_in, null)
1481+
disable_scale_in = target_tracking_scaling_policy_configuration.value.disable_scale_in
14731482

14741483
dynamic "predefined_metric_specification" {
1475-
for_each = try([target_tracking_scaling_policy_configuration.value.predefined_metric_specification], [])
1484+
for_each = target_tracking_scaling_policy_configuration.value.predefined_metric_specification != null ? [target_tracking_scaling_policy_configuration.value.predefined_metric_specification] : []
14761485

14771486
content {
14781487
predefined_metric_type = predefined_metric_specification.value.predefined_metric_type
1479-
resource_label = try(predefined_metric_specification.value.resource_label, null)
1488+
resource_label = predefined_metric_specification.value.resource_label
14801489
}
14811490
}
14821491

1483-
scale_in_cooldown = try(target_tracking_scaling_policy_configuration.value.scale_in_cooldown, 300)
1484-
scale_out_cooldown = try(target_tracking_scaling_policy_configuration.value.scale_out_cooldown, 60)
1485-
target_value = try(target_tracking_scaling_policy_configuration.value.target_value, 75)
1492+
scale_in_cooldown = target_tracking_scaling_policy_configuration.value.scale_in_cooldown
1493+
scale_out_cooldown = target_tracking_scaling_policy_configuration.value.scale_out_cooldown
1494+
target_value = target_tracking_scaling_policy_configuration.value.target_value
14861495
}
14871496
}
14881497
}
@@ -1492,7 +1501,7 @@ resource "aws_appautoscaling_scheduled_action" "this" {
14921501

14931502
region = var.region
14941503

1495-
name = try(each.value.name, each.key)
1504+
name = try(coalesce(each.value.name, each.key))
14961505
service_namespace = aws_appautoscaling_target.this[0].service_namespace
14971506
resource_id = aws_appautoscaling_target.this[0].resource_id
14981507
scalable_dimension = aws_appautoscaling_target.this[0].scalable_dimension

modules/service/variables.tf

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,62 @@ variable "autoscaling_max_capacity" {
10921092

10931093
variable "autoscaling_policies" {
10941094
description = "Map of autoscaling policies to create for the service"
1095-
type = any
1095+
type = map(object({
1096+
name = optional(string) # Will fall back to the key name if not provided
1097+
policy_type = optional(string, "TargetTrackingScaling")
1098+
step_scaling_policy_configuration = optional(object({
1099+
adjustment_type = optional(string)
1100+
cooldown = optional(number)
1101+
metric_aggregation_type = optional(string)
1102+
min_adjustment_magnitude = optional(number)
1103+
step_adjustments = optional(list(object({
1104+
metric_interval_lower_bound = optional(string)
1105+
metric_interval_upper_bound = optional(string)
1106+
scaling_adjustment = number
1107+
})))
1108+
}))
1109+
target_tracking_scaling_policy_configuration = optional(object({
1110+
customized_metric_specification = optional(object({
1111+
dimensions = optional(list(object({
1112+
name = string
1113+
value = string
1114+
})))
1115+
metric_name = optional(string)
1116+
metrics = optional(list(object({
1117+
expression = optional(string)
1118+
id = string
1119+
label = optional(string)
1120+
metric_stat = optional(object({
1121+
metric = object({
1122+
dimensions = optional(list(object({
1123+
name = string
1124+
value = string
1125+
})))
1126+
metric_name = string
1127+
namespace = string
1128+
})
1129+
stat = string
1130+
unit = optional(string)
1131+
}))
1132+
return_data = optional(bool)
1133+
})))
1134+
namespace = optional(string)
1135+
statistic = optional(string)
1136+
unit = optional(string)
1137+
}))
1138+
}))
1139+
disable_scale_in = optional(bool)
1140+
predefined_metric_specification = optional(object({
1141+
predefined_metric_type = string
1142+
resource_label = optional(string)
1143+
}))
1144+
scale_in_cooldown = optional(number, 300)
1145+
scale_out_cooldown = optional(number, 60)
1146+
target_value = optional(number, 75)
1147+
}))
1148+
1149+
1150+
10961151
default = {
10971152
cpu = {
10981153
policy_type = "TargetTrackingScaling"

0 commit comments

Comments
 (0)