@@ -11,17 +11,24 @@ resource "aws_ecs_cluster" "cluster" {
1111}
1212
1313locals {
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
2734resource "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
6577resource "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-
109114resource "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
167172data "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
172177resource "aws_iam_role" "ecsTaskExecutionRole" {
@@ -187,12 +192,8 @@ resource "aws_iam_role" "ecsTaskExecutionRole" {
187192}
188193
189194resource "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