Skip to content

Commit a4636c6

Browse files
authored
ECS DNS skip recreate fix (#97)
* DNS recreate and typos fixes * Remove dupe locals definitions * Fixing dupe vars definitions * Rollback .gitignore
1 parent b25e974 commit a4636c6

File tree

3 files changed

+64
-63
lines changed

3 files changed

+64
-63
lines changed

action.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,8 +1438,8 @@ runs:
14381438
AWS_ECS_ENABLE: ${{ inputs.aws_ecs_enable }}
14391439
AWS_ECS_SERVICE_NAME: ${{ inputs.aws_ecs_service_name }}
14401440
AWS_ECS_CLUSTER_NAME: ${{ inputs.aws_ecs_cluster_name }}
1441-
AWS_ECS_SERVICE_LAUNCH_TYPE : ${{ inputs.aws_ecs_service_launch_type }}
1442-
AWS_ECS_TASK_TYPE : ${{ inputs.aws_ecs_task_type }}
1441+
AWS_ECS_SERVICE_LAUNCH_TYPE: ${{ inputs.aws_ecs_service_launch_type }}
1442+
AWS_ECS_TASK_TYPE: ${{ inputs.aws_ecs_task_type }}
14431443
AWS_ECS_TASK_NAME: ${{ inputs.aws_ecs_task_name }}
14441444
AWS_ECS_TASK_IGNORE_DEFINITION: ${{ inputs.aws_ecs_task_ignore_definition }}
14451445
AWS_ECS_TASK_EXECUTION_ROLE: ${{ inputs.aws_ecs_task_execution_role }}
@@ -1448,25 +1448,25 @@ runs:
14481448
AWS_ECS_TASK_CPU: ${{ inputs.aws_ecs_task_cpu }}
14491449
AWS_ECS_TASK_MEM: ${{ inputs.aws_ecs_task_mem }}
14501450
AWS_ECS_CONTAINER_CPU: ${{ inputs.aws_ecs_container_cpu }}
1451-
AWS_ECS_CONTAINER_MEM: ${{ inputs.aws_ecs_container_cpu }}
1451+
AWS_ECS_CONTAINER_MEM: ${{ inputs.aws_ecs_container_mem }}
14521452
AWS_ECS_NODE_COUNT: ${{ inputs.aws_ecs_node_count }}
14531453
AWS_ECS_APP_IMAGE: ${{ inputs.aws_ecs_app_image }}
14541454
AWS_ECS_SECURITY_GROUP_NAME: ${{ inputs.aws_ecs_security_group_name }}
14551455
AWS_ECS_ASSIGN_PUBLIC_IP: ${{ inputs.aws_ecs_assign_public_ip }}
14561456
AWS_ECS_CONTAINER_PORT: ${{ inputs.aws_ecs_container_port }}
14571457
AWS_ECS_LB_PORT: ${{ inputs.aws_ecs_lb_port }}
14581458
AWS_ECS_LB_REDIRECT_ENABLE: ${{ inputs.aws_ecs_lb_redirect_enable }}
1459-
AWS_ECS_LB_CONTAINER_PATH : ${{ inputs.aws_ecs_lb_container_path }}
1459+
AWS_ECS_LB_CONTAINER_PATH: ${{ inputs.aws_ecs_lb_container_path }}
14601460
AWS_ECS_LB_SSL_POLICY: ${{ inputs.aws_ecs_lb_ssl_policy }}
14611461
AWS_ECS_AUTOSCALING_ENABLE: ${{ inputs.aws_ecs_autoscaling_enable }}
14621462
AWS_ECS_AUTOSCALING_MAX_NODES: ${{ inputs.aws_ecs_autoscaling_max_nodes }}
14631463
AWS_ECS_AUTOSCALING_MIN_NODES: ${{ inputs.aws_ecs_autoscaling_min_nodes }}
14641464
AWS_ECS_AUTOSCALING_MAX_MEM: ${{ inputs.aws_ecs_autoscaling_max_mem }}
1465-
AWS_ECS_AUTOSCALING_MIN_MEM: ${{ inputs.aws_ecs_autoscaling_max_cpu }}
1466-
AWS_ECS_CLOUDWATCH_ENABLE : ${{ inputs.aws_ecs_cloudwatch_enable }}
1467-
AWS_ECS_CLOUDWATCH_LG_NAME : ${{ inputs.aws_ecs_cloudwatch_lg_name }}
1468-
AWS_ECS_CLOUDWATCH_SKIP_DESTROY : ${{ inputs.aws_ecs_cloudwatch_skip_destroy }}
1469-
AWS_ECS_CLOUDWATCH_RETENTION_DAYS : ${{ inputs.aws_ecs_cloudwatch_retention_days }}
1465+
AWS_ECS_AUTOSCALING_MAX_CPU: ${{ inputs.aws_ecs_autoscaling_max_cpu }}
1466+
AWS_ECS_CLOUDWATCH_ENABLE: ${{ inputs.aws_ecs_cloudwatch_enable }}
1467+
AWS_ECS_CLOUDWATCH_LG_NAME: ${{ inputs.aws_ecs_cloudwatch_lg_name }}
1468+
AWS_ECS_CLOUDWATCH_SKIP_DESTROY: ${{ inputs.aws_ecs_cloudwatch_skip_destroy }}
1469+
AWS_ECS_CLOUDWATCH_RETENTION_DAYS: ${{ inputs.aws_ecs_cloudwatch_retention_days }}
14701470
AWS_ECS_ADDITIONAL_TAGS: ${{ inputs.aws_ecs_additional_tags }}
14711471

14721472
# ECR

operations/deployment/terraform/aws/bitovi_main.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -519,13 +519,13 @@ module "aws_route53_ecs" {
519519
aws_r53_root_domain_deploy = var.aws_r53_root_domain_deploy
520520
aws_r53_enable_cert = var.aws_r53_enable_cert
521521
# ELB
522-
aws_elb_dns_name = try(module.aws_ecs[0].load_balancer_dns,"")
523-
aws_elb_zone_id = try(module.aws_ecs[0].load_balancer_zone_id,"")
522+
aws_elb_dns_name = module.aws_ecs[0].load_balancer_dns
523+
aws_elb_zone_id = module.aws_ecs[0].load_balancer_zone_id
524524
# Certs
525525
aws_certificates_selected_arn = var.aws_r53_enable_cert && var.aws_r53_domain_name != "" ? module.aws_certificates[0].selected_arn : ""
526526
# Others
527527
fqdn_provided = local.fqdn_provided
528-
depends_on = [ module.aws_certificates,module.aws_ecs ]
528+
depends_on = [ module.aws_certificates ]
529529
providers = {
530530
aws = aws.r53
531531
}

operations/deployment/terraform/modules/aws/ecs/aws_ecs.tf

Lines changed: 52 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,24 @@ resource "aws_ecs_cluster" "cluster" {
1111
}
1212

1313
locals {
14-
aws_ecs_app_image = var.aws_ecs_app_image != "" ? [for n in split(",", var.aws_ecs_app_image) : n] : []
15-
aws_ecs_cluster_name = var.aws_ecs_cluster_name != "" ? var.aws_ecs_cluster_name : "${var.aws_resource_identifier}"
16-
aws_ecs_task_name = var.aws_ecs_task_name != "" ? [for n in split(",", var.aws_ecs_task_name) : n] : [for _ in range(local.tasks_count) : "${var.aws_resource_identifier}-app" ]
17-
aws_ecs_node_count = var.aws_ecs_node_count != "" ? [for n in split(",", var.aws_ecs_node_count) : tonumber(n)] : [for _ in range(local.tasks_count) : 1]
18-
aws_ecs_task_network_mode = var.aws_ecs_task_network_mode != "" ? [for n in split(",", var.aws_ecs_task_network_mode) : n] : [for _ in range(local.tasks_count) : "awsvpc" ]
19-
aws_ecs_task_cpu = var.aws_ecs_task_cpu != "" ? [for n in split(",", var.aws_ecs_task_cpu) : tonumber(n)] : [for _ in range(local.tasks_count) : 256]
20-
aws_ecs_task_mem = var.aws_ecs_task_mem != "" ? [for n in split(",", var.aws_ecs_task_mem) : tonumber(n)] : [for _ in range(local.tasks_count) : 512]
21-
aws_ecs_container_cpu = var.aws_ecs_container_cpu != "" ? [for n in split(",", var.aws_ecs_container_cpu) : tonumber(n)] : [for _ in range(length(local.aws_ecs_app_image)) : null]
22-
aws_ecs_container_mem = var.aws_ecs_container_mem != "" ? [for n in split(",", var.aws_ecs_container_mem) : tonumber(n)] : [for _ in range(length(local.aws_ecs_app_image)) : null]
14+
aws_ecs_app_image = var.aws_ecs_app_image != "" ? [for n in split(",", var.aws_ecs_app_image) : n] : []
15+
aws_ecs_cluster_name = var.aws_ecs_cluster_name != "" ? var.aws_ecs_cluster_name : "${var.aws_resource_identifier}"
16+
aws_ecs_task_name = var.aws_ecs_task_name != "" ? [for n in split(",", var.aws_ecs_task_name) : n] : [for _ in range(local.tasks_count) : "${var.aws_resource_identifier}-app" ]
17+
aws_ecs_node_count = var.aws_ecs_node_count != "" ? [for n in split(",", var.aws_ecs_node_count) : tonumber(n)] : [for _ in range(local.tasks_count) : 1]
18+
aws_ecs_task_network_mode = var.aws_ecs_task_network_mode != "" ? [for n in split(",", var.aws_ecs_task_network_mode) : n] : [for _ in range(local.tasks_count) : "awsvpc" ]
19+
aws_ecs_task_cpu = var.aws_ecs_task_cpu != "" ? [for n in split(",", var.aws_ecs_task_cpu) : tonumber(n)] : [for _ in range(local.tasks_count) : 256]
20+
aws_ecs_task_mem = var.aws_ecs_task_mem != "" ? [for n in split(",", var.aws_ecs_task_mem) : tonumber(n)] : [for _ in range(local.tasks_count) : 512]
21+
aws_ecs_container_cpu = var.aws_ecs_container_cpu != "" ? [for n in split(",", var.aws_ecs_container_cpu) : tonumber(n)] : [for _ in range(length(local.aws_ecs_app_image)) : null]
22+
aws_ecs_container_mem = var.aws_ecs_container_mem != "" ? [for n in split(",", var.aws_ecs_container_mem) : tonumber(n)] : [for _ in range(length(local.aws_ecs_app_image)) : null]
23+
aws_ecs_task_type = var.aws_ecs_task_type != "" ? [for n in split(",", var.aws_ecs_task_type) : n] : [for _ in range(local.tasks_count) : (var.aws_ecs_service_launch_type == "FARGATE" || var.aws_ecs_service_launch_type == "EC2" ? var.aws_ecs_service_launch_type : "FARGATE" )]
24+
2325
aws_ecs_task_json_definition_file = var.aws_ecs_task_json_definition_file != "" ? [for n in split(",", var.aws_ecs_task_json_definition_file) : n] : []
24-
aws_ecs_task_type = var.aws_ecs_task_type != "" ? [for n in split(",", var.aws_ecs_task_network_mode) : n] : [for _ in range(local.tasks_count) : (var.aws_ecs_service_launch_type == "FARGATE" || var.aws_ecs_service_launch_type == "EC2" ? var.aws_ecs_service_launch_type : "" )]
26+
27+
ecsTaskExecutionRole = var.aws_ecs_task_execution_role != "" ? data.aws_iam_role.ecsTaskExecutionRole[0].arn : aws_iam_role.ecsTaskExecutionRole[0].arn
28+
29+
# Calculate tasks_count early to avoid circular dependency
30+
tasks_count = var.aws_ecs_task_ignore_definition ? 1 : length(local.aws_ecs_app_image) + length(local.aws_ecs_task_json_definition_file)
31+
tasks_arns = concat(aws_ecs_task_definition.ecs_task[*].arn,aws_ecs_task_definition.ecs_task_from_json[*].arn,aws_ecs_task_definition.aws_ecs_task_ignore_definition[*].arn)
2532
}
2633

2734
resource "aws_ecs_task_definition" "ecs_task" {
@@ -32,34 +39,39 @@ resource "aws_ecs_task_definition" "ecs_task" {
3239
cpu = local.aws_ecs_task_cpu[count.index]
3340
memory = local.aws_ecs_task_mem[count.index]
3441
execution_role_arn = local.ecsTaskExecutionRole
35-
container_definitions = sensitive(jsonencode([
36-
{
37-
"image": local.aws_ecs_app_image[count.index],
38-
"cpu": local.aws_ecs_container_cpu[count.index],
39-
"memory": local.aws_ecs_container_mem[count.index],
40-
"name": var.aws_ecs_task_name != "" ? local.aws_ecs_task_name[count.index] : "${local.aws_ecs_task_name[count.index]}${count.index}",
41-
"networkMode": "awsvpc",
42-
"portMappings": [
42+
container_definitions = sensitive(jsonencode(
43+
concat(
44+
[
4345
{
44-
"name": "port-${local.aws_ecs_container_port[count.index]}",
45-
"containerPort": tonumber(local.aws_ecs_container_port[count.index]),
46-
"hostPort": tonumber(local.aws_ecs_container_port[count.index]),
47-
"protocol": "tcp",
48-
"appProtocol": "http"
49-
}
50-
],
51-
"environment": local.env_repo_vars
52-
"logConfiguration": var.aws_ecs_cloudwatch_enable ? {
53-
"logDriver": "awslogs",
54-
"options": {
55-
"awslogs-create-group": "true",
56-
"awslogs-region": var.aws_region_current_name,
57-
"awslogs-group": var.aws_ecs_cloudwatch_lg_name,
58-
"awslogs-stream-prefix": aws_ecs_cluster.cluster.name
46+
"name": var.aws_ecs_task_name != "" ? local.aws_ecs_task_name[count.index] : "${local.aws_ecs_task_name[count.index]}${count.index}",
47+
"image": local.aws_ecs_app_image[count.index],
48+
"cpu": local.aws_ecs_container_cpu[count.index],
49+
"memory": local.aws_ecs_container_mem[count.index],
50+
"essential": true,
51+
"networkMode": "awsvpc",
52+
"portMappings": [
53+
{
54+
"name": "port-${local.aws_ecs_container_port[count.index]}",
55+
"containerPort": tonumber(local.aws_ecs_container_port[count.index]),
56+
"hostPort": tonumber(local.aws_ecs_container_port[count.index]),
57+
"protocol": "tcp",
58+
"appProtocol": "http"
59+
}
60+
],
61+
"environment": local.env_repo_vars,
62+
"logConfiguration": var.aws_ecs_cloudwatch_enable ? {
63+
"logDriver": "awslogs",
64+
"options": {
65+
"awslogs-create-group": "true",
66+
"awslogs-region": var.aws_region_current_name,
67+
"awslogs-group": var.aws_ecs_cloudwatch_lg_name,
68+
"awslogs-stream-prefix": aws_ecs_cluster.cluster.name
69+
}
70+
} : null
5971
}
60-
} : null
61-
}
62-
]))
72+
]
73+
)
74+
))
6375
}
6476

6577
resource "aws_ecs_task_definition" "ecs_task_from_json" {
@@ -89,9 +101,7 @@ resource "aws_ecs_task_definition" "aws_ecs_task_ignore_definition" {
89101
"portMappings": [
90102
{
91103
"containerPort": 80,
92-
"protocol": "tcp",
93-
"hostPort": 80,
94-
"appProtocol": "http"
104+
"protocol": "tcp"
95105
}
96106
]
97107
}
@@ -101,11 +111,6 @@ resource "aws_ecs_task_definition" "aws_ecs_task_ignore_definition" {
101111
}
102112
}
103113

104-
locals {
105-
tasks_arns = concat(aws_ecs_task_definition.ecs_task[*].arn,aws_ecs_task_definition.ecs_task_from_json[*].arn,aws_ecs_task_definition.aws_ecs_task_ignore_definition[*].arn)
106-
tasks_count = var.aws_ecs_task_ignore_definition ? 1 : length(local.aws_ecs_app_image) + length(local.aws_ecs_task_json_definition_file)
107-
}
108-
109114
resource "aws_ecs_service" "ecs_service" {
110115
count = var.aws_ecs_task_ignore_definition ? 0 : local.tasks_count
111116
name = var.aws_ecs_service_name != "" ? "${var.aws_ecs_service_name}${count.index}" : "${var.aws_resource_identifier}-${count.index}-service"
@@ -132,7 +137,7 @@ resource "aws_ecs_service" "ecs_service_ignore_definition" {
132137
count = var.aws_ecs_task_ignore_definition ? 1 : 0
133138
name = var.aws_ecs_service_name != "" ? "${var.aws_ecs_service_name}${count.index}" : "${var.aws_resource_identifier}-${count.index}-service"
134139
cluster = aws_ecs_cluster.cluster.id
135-
task_definition = local.tasks_arns[count.index]
140+
task_definition = aws_ecs_task_definition.aws_ecs_task_ignore_definition[0].arn
136141

137142
desired_count = local.aws_ecs_node_count[count.index]
138143
launch_type = var.aws_ecs_service_launch_type
@@ -166,7 +171,7 @@ resource "aws_cloudwatch_log_group" "ecs_cw_log_group" {
166171
# IAM
167172
data "aws_iam_role" "ecsTaskExecutionRole" {
168173
count = var.aws_ecs_task_execution_role != "" ? 1 : 0
169-
name = var.aws_ecs_task_execution_role
174+
name = var.aws_ecs_task_execution_role
170175
}
171176

172177
resource "aws_iam_role" "ecsTaskExecutionRole" {
@@ -187,12 +192,8 @@ resource "aws_iam_role" "ecsTaskExecutionRole" {
187192
}
188193

189194
resource "aws_iam_policy_attachment" "ecsTaskExecutionRolePolicy" {
190-
count = var.aws_ecs_task_execution_role != "" ? 0 : 1
195+
count = var.aws_ecs_task_execution_role != "" ? 0 : 1
191196
name = "AmazonECSTaskExecutionRolePolicyAttachment"
192197
roles = [aws_iam_role.ecsTaskExecutionRole[0].name]
193198
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
194-
}
195-
196-
locals {
197-
ecsTaskExecutionRole = var.aws_ecs_task_execution_role != "" ? data.aws_iam_role.ecsTaskExecutionRole[0].arn : aws_iam_role.ecsTaskExecutionRole[0].arn
198199
}

0 commit comments

Comments
 (0)