Skip to content

Commit b664a5e

Browse files
Snyk and fine tuning
1 parent 993551e commit b664a5e

File tree

11 files changed

+28
-59
lines changed

11 files changed

+28
-59
lines changed

.snyk

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
# ignores vulnerabilities until expiry date; change duration by modifying expiry date
33
ignore:
44
SNYK-CC-TF-1:
5-
- 'main.tf > input > resource > aws_security_group[ecs_task_sg] > ingress':
6-
reason: That inbound traffic is allowed to a resource from any source instead
7-
of a restricted range. That potentially everyone can access your
8-
resource
9-
expires: 2025-04-01T00:00:00.000Z
5+
- 'modules/alb/main.tf > input > resource > aws_security_group[lb_sg] > ingress[0]':
6+
reason: That inbound traffic is allowed to a resource from any source as it is for an internet facing ALB.
7+
expires: 2026-04-01T00:00:00.000Z
108
created: 2023-02-28T18:20:39.256Z

README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ SourceFuse's AWS Reference Architecture Terraform module leverages the terraform
1313

1414
The module assumes that upstream dependencies, namely networking dependencies, are created upstream and the values are passed into this module via mechanisms such as Terraform data source queries.
1515

16-
![Module Structure](./static/ecs_module_hla.png)
1716

1817
The module provisions
1918

@@ -133,14 +132,12 @@ No resources.
133132

134133
| Name | Description | Type | Default | Required |
135134
|------|-------------|------|---------|:--------:|
136-
| <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/><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 |
135+
| <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 |
137136
| <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 |
138-
| <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/> default_capacity_provider_use_fargate = bool<br/> fargate_capacity_providers = any<br/> })</pre> | n/a | yes |
137+
| <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 |
139138
| <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 |
140-
| <a name="input_create_alb"></a> [create\_alb](#input\_create\_alb) | Flag to create or skip the creation of ALB | `bool` | `false` | no |
141-
| <a name="input_create_service"></a> [create\_service](#input\_create\_service) | Flag to create or skip the creation of ECS demo service | `bool` | `false` | no |
142139
| <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 |
143-
| <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/> })</pre> | n/a | yes |
140+
| <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 |
144141
| <a name="input_environment"></a> [environment](#input\_environment) | The environment associated with the ECS service | `string` | n/a | yes |
145142
| <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 |
146143
| <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 |

example/main.tf

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ provider "aws" {
2020
module "ecs_cluster" {
2121
source = "../"
2222

23-
##########################################
24-
## Flags for ALB and service modules
25-
##########################################
26-
create_alb = true
27-
create_service = true
28-
2923
#####################
3024
## ecs cluster
3125
#####################
@@ -46,8 +40,8 @@ module "ecs_cluster" {
4640
}
4741

4842
capacity_provider = {
49-
autoscaling_capacity_providers = {}
50-
default_capacity_provider_use_fargate = true
43+
autoscaling_capacity_providers = {}
44+
use_fargate = true
5145
fargate_capacity_providers = {
5246
fargate_cp = {
5347
name = "FARGATE"
@@ -68,6 +62,7 @@ module "ecs_cluster" {
6862
repository_name = "12345.dkr.ecr.us-east-1.amazonaws.com/arc/arc-poc-ecs"
6963
enable_load_balancer = false
7064
aws_lb_target_group_name = "arc-poc-alb-tg"
65+
create_service = false
7166
}
7267

7368
task = {
@@ -91,9 +86,10 @@ module "ecs_cluster" {
9186
cidr_blocks = null
9287

9388
alb = {
94-
name = "arc-poc-alb"
95-
internal = false
96-
port = 80
89+
name = "arc-poc-alb"
90+
internal = false
91+
port = 80
92+
create_alb = false
9793
}
9894

9995
alb_target_group = [{

main.tf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ module "ecs_cluster" {
1414
}
1515

1616
capacity_provider = {
17-
autoscaling_capacity_providers = var.capacity_provider.autoscaling_capacity_providers
18-
default_capacity_provider_use_fargate = var.capacity_provider.default_capacity_provider_use_fargate
19-
fargate_capacity_providers = var.capacity_provider.fargate_capacity_providers
17+
autoscaling_capacity_providers = var.capacity_provider.autoscaling_capacity_providers
18+
use_fargate = var.capacity_provider.use_fargate
19+
fargate_capacity_providers = var.capacity_provider.fargate_capacity_providers
2020
}
2121
}
2222

@@ -26,7 +26,7 @@ module "ecs_cluster" {
2626
################################################################################
2727

2828
module "alb" {
29-
count = var.create_alb ? 1 : 0
29+
count = var.alb.create_alb ? 1 : 0
3030
source = "./modules/alb"
3131

3232
vpc_id = var.vpc_id
@@ -81,7 +81,7 @@ module "alb" {
8181
################################################################################
8282

8383
module "ecs_service" {
84-
count = var.create_service ? 1 : 0
84+
count = var.ecs_service.create_service ? 1 : 0
8585
source = "./modules/ecs_service"
8686

8787
vpc_id = var.vpc_id

modules/alb/data.tf

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,3 @@ data "aws_subnet" "public" {
1212

1313
id = each.value
1414
}
15-
16-
# To get VPC CIDR for ALB security group as default ingress
17-
data "aws_vpc" "this" {
18-
id = var.vpc_id
19-
}

modules/alb/locals.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ locals {
55
s.id if lookup(s.tags, "Type", "") == "public"
66
]
77

8-
cidr_blocks = var.cidr_blocks != null ? var.cidr_blocks : [data.aws_vpc.this.cidr_block]
8+
cidr_blocks = var.cidr_blocks == null ? ["0.0.0.0/0"] : var.cidr_blocks
99

1010
}

modules/alb/main.tf

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@ resource "aws_security_group" "lb_sg" {
2020
description = "Default security group for internet facing ALB"
2121
vpc_id = var.vpc_id
2222

23-
ingress {
24-
from_port = 80
25-
to_port = 80
26-
protocol = "tcp"
27-
cidr_blocks = local.cidr_blocks
28-
}
29-
3023
ingress {
3124
from_port = 443
3225
to_port = 443

modules/ecs_cluster/.terraform.lock.hcl

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/ecs_cluster/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ resource "aws_ecs_capacity_provider" "this" {
120120

121121
locals {
122122
default_capacity_providers = merge(
123-
{ for k, v in var.capacity_provider.fargate_capacity_providers : k => v if var.capacity_provider.default_capacity_provider_use_fargate },
124-
{ for k, v in var.capacity_provider.autoscaling_capacity_providers : k => v if !var.capacity_provider.default_capacity_provider_use_fargate }
123+
{ for k, v in var.capacity_provider.fargate_capacity_providers : k => v if var.capacity_provider.use_fargate },
124+
{ for k, v in var.capacity_provider.autoscaling_capacity_providers : k => v if !var.capacity_provider.use_fargate }
125125
)
126126
}
127127

modules/ecs_cluster/variables.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ variable "capacity_provider" {
7878
}))
7979
tags = optional(map(string), {}) # Optional; default to empty map
8080
}))
81-
default_capacity_provider_use_fargate = bool
82-
fargate_capacity_providers = any
81+
use_fargate = bool
82+
fargate_capacity_providers = any
8383
})
8484
}

0 commit comments

Comments
 (0)