Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions examples/complete/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,52 @@ module "ecs" {
cpu = 1024
memory = 4096

autoscaling_policies = {
predictive = {
policy_type = "PredictiveScaling"
predictive_scaling_policy_configuration = {
mode = "ForecastOnly"
metric_specification = {
target_value = 60
# predefined_scaling_metric_specification = {
# predefined_metric_type = "ECSServiceAverageMemoryUtilization"
# }
# predefined_metric_pair_specification = {
# predefined_metric_type = "ECSServiceMemoryUtilization"
# }
predefined_load_metric_specification = {
predefined_metric_type = "ECSServiceTotalCPUUtilization"
}
customized_scaling_metric_specification = {
metric_data_query = [
{
id = "memory_util"
metric_stat = {
stat = "Average"
metric = {
metric_name = "CPUUtilization"
namespace = "AWS/ECS"
dimension = [
{
name = "ServiceName"
value = "ecsdemo-frontend"
},
{
name = "ClusterName"
value = "ex-complete"
}
]
}
}
return_data = true
}
]
}
}
}
}
}

# Container definition(s)
container_definitions = {

Expand Down
2 changes: 1 addition & 1 deletion modules/service/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ module "ecs_service" {
| <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 |
| <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 |
| <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 |
| <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_adjustment = 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/> 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/> }))<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 |
| <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_adjustment = 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/> 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/> }))<br/> predictive_scaling_policy_configuration = optional(object({<br/> mode = optional(string, "ForecastAndScale")<br/> max_capacity_buffer = optional(number)<br/> max_capacity_breach_behavior = optional(string)<br/> scheduling_buffer_time = optional(number)<br/> metric_specification = object({<br/> target_value = number<br/> predefined_scaling_metric_specification = optional(object({<br/> predefined_metric_type = string<br/> resource_label = optional(string)<br/> }))<br/> predefined_load_metric_specification = optional(object({<br/> predefined_metric_type = string<br/> resource_label = optional(string)<br/> }))<br/> predefined_metric_pair_specification = optional(object({<br/> predefined_metric_type = string<br/> resource_label = optional(string)<br/> }))<br/> customized_load_metric_specification = optional(object({<br/> metric_data_query = list(object({<br/> expression = optional(string)<br/> id = string<br/> label = optional(string)<br/> metric_stat = optional(object({<br/> metric = object({<br/> dimension = 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/> }))<br/> customized_scaling_metric_specification = optional(object({<br/> metric_data_query = list(object({<br/> expression = optional(string)<br/> id = string<br/> label = optional(string)<br/> metric_stat = optional(object({<br/> metric = object({<br/> dimension = 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/> }))<br/> customized_capacity_metric_specification = optional(object({<br/> metric_data_query = list(object({<br/> expression = optional(string)<br/> id = string<br/> label = optional(string)<br/> metric_stat = optional(object({<br/> metric = object({<br/> dimension = 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/> }))<br/> })<br/> }))<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 |
| <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 |
| <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 |
| <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 |
Expand Down
Loading