Skip to content

Commit

Permalink
Added EC2 capacity to the module
Browse files Browse the repository at this point in the history
  • Loading branch information
siddharth-singh1 committed Feb 5, 2025
1 parent 701d52a commit 3051228
Show file tree
Hide file tree
Showing 5 changed files with 320 additions and 11 deletions.
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,16 +132,16 @@ No resources.

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_alb"></a> [alb](#input\_alb) | Configuration settings for the Application Load Balancer (ALB). This includes attributes related to the ALB itself, such as its name, port, protocol, and other optional settings like access logs and tags. | <pre>object({<br> name = optional(string, null)<br> port = optional(number)<br> protocol = optional(string, "HTTP")<br> internal = optional(bool, false)<br> load_balancer_type = optional(string, "application")<br> idle_timeout = optional(number, 60)<br> enable_deletion_protection = optional(bool, false)<br> enable_http2 = optional(bool, true)<br> certificate_arn = optional(string, null)<br> create_alb = optional(bool, false)<br><br> access_logs = optional(object({<br> bucket = string<br> enabled = optional(bool, false)<br> prefix = optional(string, "")<br> }))<br><br> tags = optional(map(string), {})<br> })</pre> | n/a | yes |
| <a name="input_alb_target_group"></a> [alb\_target\_group](#input\_alb\_target\_group) | List of target groups to create | <pre>list(object({<br> name = optional(string, "target-group")<br> port = number<br> protocol = optional(string, null)<br> protocol_version = optional(string, "HTTP1")<br> vpc_id = optional(string, "")<br> target_type = optional(string, "ip")<br> ip_address_type = optional(string, "ipv4")<br> load_balancing_algorithm_type = optional(string, "round_robin")<br> load_balancing_cross_zone_enabled = optional(string, "use_load_balancer_configuration")<br> deregistration_delay = optional(number, 300)<br> slow_start = optional(number, 0)<br> tags = optional(map(string), {})<br><br> health_check = optional(object({<br> enabled = optional(bool, true)<br> protocol = optional(string, "HTTP")<br> path = optional(string, "/")<br> port = optional(string, "traffic-port")<br> timeout = optional(number, 6)<br> healthy_threshold = optional(number, 3)<br> unhealthy_threshold = optional(number, 3)<br> interval = optional(number, 30)<br> matcher = optional(string, "200")<br> }))<br><br> stickiness = optional(object({<br> enabled = optional(bool, true)<br> type = string<br> cookie_duration = optional(number, 86400)<br> })<br> )<br><br> }))</pre> | n/a | yes |
| <a name="input_capacity_provider"></a> [capacity\_provider](#input\_capacity\_provider) | Configuration settings for the ECS capacity providers, including the capacity providers used for autoscaling and Fargate. This variable defines the properties of each capacity provider and how they are managed, such as scaling policies and termination protection. | <pre>object({<br> autoscaling_capacity_providers = map(object({<br> name = optional(string)<br> auto_scaling_group_arn = string<br> managed_termination_protection = optional(string, "DISABLED")<br> managed_draining = optional(string, "ENABLED")<br> managed_scaling = optional(object({<br> instance_warmup_period = optional(number)<br> maximum_scaling_step_size = optional(number)<br> minimum_scaling_step_size = optional(number)<br> status = optional(string)<br> target_capacity = optional(number)<br> }))<br> tags = optional(map(string), {})<br> }))<br> use_fargate = bool<br> fargate_capacity_providers = any<br> })</pre> | n/a | yes |
| <a name="input_cidr_blocks"></a> [cidr\_blocks](#input\_cidr\_blocks) | CIDR blocks for security group ingress rules | `list(string)` | <pre>[<br> "0.0.0.0/0"<br>]</pre> | no |
| <a name="input_ecs_cluster"></a> [ecs\_cluster](#input\_ecs\_cluster) | The ECS-specific values to use such as cluster, service, and repository names.<br><br>Keys:<br> - cluster\_name: The name of the ECS cluster.<br> - cluster\_configuration: The execute command configuration for the cluster.<br> - cluster\_settings: A list of cluster settings (e.g., container insights). Default is an empty list.<br> - cluster\_service\_connect\_defaults: Configures a default Service Connect namespace.<br> - create\_cloudwatch\_log\_group: Boolean flag to specify whether to create a CloudWatch log group for the ECS cluster. | <pre>object({<br> name = string<br> configuration = optional(object({<br> execute_command_configuration = optional(object({<br> kms_key_id = optional(string, "")<br> logging = optional(string, "DEFAULT")<br> log_configuration = optional(object({<br> cloudwatch_encryption_enabled = optional(bool, null)<br> log_group_name = optional(string, null)<br> log_group_retention_in_days = optional(number, null)<br> log_group_kms_key_id = optional(string, null)<br> log_group_tags = optional(map(string), null)<br> s3_bucket_name = optional(string, null)<br> s3_bucket_encryption_enabled = optional(bool, null)<br> s3_key_prefix = optional(string, null)<br> }), {})<br> }), {})<br> }), {})<br> create_cloudwatch_log_group = bool<br> service_connect_defaults = optional(map(string), null)<br> settings = optional(any, null)<br> tags = optional(map(string), null)<br> })</pre> | n/a | yes |
| <a name="input_ecs_service"></a> [ecs\_service](#input\_ecs\_service) | The ECS-specific values to use such as cluster, service, and repository names. | <pre>object({<br> cluster_name = string<br> service_name = string<br> repository_name = string<br> enable_load_balancer = bool<br> aws_lb_target_group_name = optional(string)<br> create_service = optional(bool, false)<br> })</pre> | n/a | yes |
| <a name="input_alb"></a> [alb](#input\_alb) | Configuration settings for the Application Load Balancer (ALB). This includes attributes related to the ALB itself, such as its name, port, protocol, and other optional settings like access logs and tags. | <pre>object({<br/> name = optional(string, null)<br/> port = optional(number)<br/> protocol = optional(string, "HTTP")<br/> internal = optional(bool, false)<br/> load_balancer_type = optional(string, "application")<br/> idle_timeout = optional(number, 60)<br/> enable_deletion_protection = optional(bool, false)<br/> enable_http2 = optional(bool, true)<br/> certificate_arn = optional(string, null)<br/> create_alb = optional(bool, false)<br/><br/> access_logs = optional(object({<br/> bucket = string<br/> enabled = optional(bool, false)<br/> prefix = optional(string, "")<br/> }))<br/><br/> tags = optional(map(string), {})<br/> })</pre> | n/a | yes |
| <a name="input_alb_target_group"></a> [alb\_target\_group](#input\_alb\_target\_group) | List of target groups to create | <pre>list(object({<br/> name = optional(string, "target-group")<br/> port = number<br/> protocol = optional(string, null)<br/> protocol_version = optional(string, "HTTP1")<br/> vpc_id = optional(string, "")<br/> target_type = optional(string, "ip")<br/> ip_address_type = optional(string, "ipv4")<br/> load_balancing_algorithm_type = optional(string, "round_robin")<br/> load_balancing_cross_zone_enabled = optional(string, "use_load_balancer_configuration")<br/> deregistration_delay = optional(number, 300)<br/> slow_start = optional(number, 0)<br/> tags = optional(map(string), {})<br/><br/> health_check = optional(object({<br/> enabled = optional(bool, true)<br/> protocol = optional(string, "HTTP")<br/> path = optional(string, "/")<br/> port = optional(string, "traffic-port")<br/> timeout = optional(number, 6)<br/> healthy_threshold = optional(number, 3)<br/> unhealthy_threshold = optional(number, 3)<br/> interval = optional(number, 30)<br/> matcher = optional(string, "200")<br/> }))<br/><br/> stickiness = optional(object({<br/> enabled = optional(bool, true)<br/> type = string<br/> cookie_duration = optional(number, 86400)<br/> })<br/> )<br/><br/> }))</pre> | n/a | yes |
| <a name="input_capacity_provider"></a> [capacity\_provider](#input\_capacity\_provider) | Configuration settings for the ECS capacity providers, including the capacity providers used for autoscaling and Fargate. This variable defines the properties of each capacity provider and how they are managed, such as scaling policies and termination protection. | <pre>object({<br/> autoscaling_capacity_providers = map(object({<br/> name = optional(string)<br/> auto_scaling_group_arn = string<br/> managed_termination_protection = optional(string, "DISABLED")<br/> managed_draining = optional(string, "ENABLED")<br/> managed_scaling = optional(object({<br/> instance_warmup_period = optional(number)<br/> maximum_scaling_step_size = optional(number)<br/> minimum_scaling_step_size = optional(number)<br/> status = optional(string)<br/> target_capacity = optional(number)<br/> }))<br/> tags = optional(map(string), {})<br/> }))<br/> use_fargate = bool<br/> fargate_capacity_providers = any<br/> })</pre> | n/a | yes |
| <a name="input_cidr_blocks"></a> [cidr\_blocks](#input\_cidr\_blocks) | CIDR blocks for security group ingress rules | `list(string)` | <pre>[<br/> "0.0.0.0/0"<br/>]</pre> | no |
| <a name="input_ecs_cluster"></a> [ecs\_cluster](#input\_ecs\_cluster) | The ECS-specific values to use such as cluster, service, and repository names.<br/><br/>Keys:<br/> - cluster\_name: The name of the ECS cluster.<br/> - cluster\_configuration: The execute command configuration for the cluster.<br/> - cluster\_settings: A list of cluster settings (e.g., container insights). Default is an empty list.<br/> - cluster\_service\_connect\_defaults: Configures a default Service Connect namespace.<br/> - create\_cloudwatch\_log\_group: Boolean flag to specify whether to create a CloudWatch log group for the ECS cluster. | <pre>object({<br/> name = string<br/> configuration = optional(object({<br/> execute_command_configuration = optional(object({<br/> kms_key_id = optional(string, "")<br/> logging = optional(string, "DEFAULT")<br/> log_configuration = optional(object({<br/> cloudwatch_encryption_enabled = optional(bool, null)<br/> log_group_name = optional(string, null)<br/> log_group_retention_in_days = optional(number, null)<br/> log_group_kms_key_id = optional(string, null)<br/> log_group_tags = optional(map(string), null)<br/> s3_bucket_name = optional(string, null)<br/> s3_bucket_encryption_enabled = optional(bool, null)<br/> s3_key_prefix = optional(string, null)<br/> }), {})<br/> }), {})<br/> }), {})<br/> create_cloudwatch_log_group = bool<br/> service_connect_defaults = optional(map(string), null)<br/> settings = optional(any, null)<br/> tags = optional(map(string), null)<br/> })</pre> | n/a | yes |
| <a name="input_ecs_service"></a> [ecs\_service](#input\_ecs\_service) | The ECS-specific values to use such as cluster, service, and repository names. | <pre>object({<br/> cluster_name = string<br/> service_name = string<br/> repository_name = string<br/> enable_load_balancer = bool<br/> aws_lb_target_group_name = optional(string)<br/> create_service = optional(bool, false)<br/> })</pre> | n/a | yes |
| <a name="input_environment"></a> [environment](#input\_environment) | The environment associated with the ECS service | `string` | n/a | yes |
| <a name="input_lb"></a> [lb](#input\_lb) | ALB-related information (listening port, deletion protection, security group) | <pre>object({<br> name = string<br> listener_port = number<br> deregistration_delay = optional(number)<br> security_group_id = string<br> })</pre> | n/a | yes |
| <a name="input_listener_rules"></a> [listener\_rules](#input\_listener\_rules) | List of listener rules to create | <pre>list(object({<br> priority = number<br><br> conditions = list(object({<br> field = string<br> values = list(string)<br> }))<br><br> actions = list(object({<br> type = string<br> target_group_arn = optional(string)<br> order = optional(number)<br> redirect = optional(object({<br> protocol = string<br> port = string<br> host = optional(string)<br> path = optional(string)<br> query = optional(string)<br> status_code = string<br> }), null)<br><br> fixed_response = optional(object({<br> content_type = string<br> message_body = optional(string)<br> status_code = optional(string)<br> }), null)<br> }))<br> }))</pre> | n/a | yes |
| <a name="input_task"></a> [task](#input\_task) | Task-related information (vCPU, memory, # of tasks, port, and health check info.) | <pre>object({<br> tasks_desired = optional(number)<br> container_vcpu = optional(number)<br> container_memory = optional(number)<br> container_port = number<br> container_health_check_path = optional(string)<br> container_definition = optional(string)<br> environment_variables = optional(map(string))<br> task_execution_role = optional(string)<br> })</pre> | n/a | yes |
| <a name="input_lb"></a> [lb](#input\_lb) | ALB-related information (listening port, deletion protection, security group) | <pre>object({<br/> name = string<br/> listener_port = number<br/> deregistration_delay = optional(number)<br/> security_group_id = string<br/> })</pre> | n/a | yes |
| <a name="input_listener_rules"></a> [listener\_rules](#input\_listener\_rules) | List of listener rules to create | <pre>list(object({<br/> priority = number<br/><br/> conditions = list(object({<br/> field = string<br/> values = list(string)<br/> }))<br/><br/> actions = list(object({<br/> type = string<br/> target_group_arn = optional(string)<br/> order = optional(number)<br/> redirect = optional(object({<br/> protocol = string<br/> port = string<br/> host = optional(string)<br/> path = optional(string)<br/> query = optional(string)<br/> status_code = string<br/> }), null)<br/><br/> fixed_response = optional(object({<br/> content_type = string<br/> message_body = optional(string)<br/> status_code = optional(string)<br/> }), null)<br/> }))<br/> }))</pre> | n/a | yes |
| <a name="input_task"></a> [task](#input\_task) | Task-related information (vCPU, memory, # of tasks, port, and health check info.) | <pre>object({<br/> tasks_desired = optional(number)<br/> container_vcpu = optional(number)<br/> container_memory = optional(number)<br/> container_port = number<br/> container_health_check_path = optional(string)<br/> container_definition = optional(string)<br/> environment_variables = optional(map(string))<br/> task_execution_role = optional(string)<br/> })</pre> | n/a | yes |
| <a name="input_vpc_id"></a> [vpc\_id](#input\_vpc\_id) | ID of VPC in which all resources need to be created | `string` | n/a | yes |

## Outputs
Expand Down
9 changes: 9 additions & 0 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ module "ecs_cluster" {
use_fargate = var.capacity_provider.use_fargate
fargate_capacity_providers = var.capacity_provider.fargate_capacity_providers
}

launch_template = {
name = "lt1"
}

asg = {
max_size = 2
min_size = 1
}
}


Expand Down
Loading

0 comments on commit 3051228

Please sign in to comment.