Skip to content

Commit ed296d1

Browse files
committed
feat: Update cluster variable definitions; drop cluster_ prefix
1 parent b0914fe commit ed296d1

File tree

9 files changed

+97
-92
lines changed

9 files changed

+97
-92
lines changed

examples/ec2-autoscaling/main.tf

+8-11
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ locals {
2828
module "ecs_cluster" {
2929
source = "../../modules/cluster"
3030

31-
cluster_name = local.name
31+
name = local.name
3232

3333
# Capacity provider - autoscaling groups
3434
default_capacity_provider_use_fargate = false
@@ -96,13 +96,12 @@ module "ecs_service" {
9696
}
9797

9898
volume_configuration = {
99-
ebs-volume = {
100-
managed_ebs_volume = {
101-
encrypted = true
102-
file_system_type = "xfs"
103-
size_in_gb = 5
104-
volume_type = "gp3"
105-
}
99+
name = "ebs-volume"
100+
managed_ebs_volume = {
101+
encrypted = true
102+
file_system_type = "xfs"
103+
size_in_gb = 5
104+
volume_type = "gp3"
106105
}
107106
}
108107

@@ -162,11 +161,9 @@ module "ecs_service" {
162161
}
163162

164163
subnet_ids = module.vpc.private_subnets
165-
security_group_rules = {
164+
security_group_ingress_rules = {
166165
alb_http_ingress = {
167-
type = "ingress"
168166
from_port = local.container_port
169-
to_port = local.container_port
170167
protocol = "tcp"
171168
description = "Service port"
172169
source_security_group_id = module.alb.security_group_id

examples/fargate/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ locals {
2828
module "ecs_cluster" {
2929
source = "../../modules/cluster"
3030

31-
cluster_name = local.name
31+
name = local.name
3232

3333
# Capacity provider
3434
fargate_capacity_providers = {

main.tf

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ module "cluster" {
88
create = var.create
99

1010
# Cluster
11-
cluster_name = var.cluster_name
12-
cluster_configuration = var.cluster_configuration
13-
cluster_settings = var.cluster_settings
14-
cluster_service_connect_defaults = var.cluster_service_connect_defaults
11+
name = var.cluster_name
12+
configuration = var.cluster_configuration
13+
settings = var.cluster_settings
14+
service_connect_defaults = var.cluster_service_connect_defaults
1515

1616
# Cluster Cloudwatch log group
1717
create_cloudwatch_log_group = var.create_cloudwatch_log_group

modules/cluster/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,16 @@ No modules.
173173
| <a name="input_cloudwatch_log_group_name"></a> [cloudwatch\_log\_group\_name](#input\_cloudwatch\_log\_group\_name) | Custom name of CloudWatch Log Group for ECS cluster | `string` | `null` | no |
174174
| <a name="input_cloudwatch_log_group_retention_in_days"></a> [cloudwatch\_log\_group\_retention\_in\_days](#input\_cloudwatch\_log\_group\_retention\_in\_days) | Number of days to retain log events | `number` | `90` | no |
175175
| <a name="input_cloudwatch_log_group_tags"></a> [cloudwatch\_log\_group\_tags](#input\_cloudwatch\_log\_group\_tags) | A map of additional tags to add to the log group created | `map(string)` | `{}` | no |
176-
| <a name="input_cluster_configuration"></a> [cluster\_configuration](#input\_cluster\_configuration) | The execute command configuration for the cluster | `any` | `{}` | no |
177-
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of the cluster (up to 255 letters, numbers, hyphens, and underscores) | `string` | `""` | no |
178-
| <a name="input_cluster_service_connect_defaults"></a> [cluster\_service\_connect\_defaults](#input\_cluster\_service\_connect\_defaults) | Configures a default Service Connect namespace | `map(string)` | `{}` | no |
179-
| <a name="input_cluster_settings"></a> [cluster\_settings](#input\_cluster\_settings) | List of configuration block(s) with cluster settings. For example, this can be used to enable CloudWatch Container Insights for a cluster | `any` | <pre>[<br/> {<br/> "name": "containerInsights",<br/> "value": "enabled"<br/> }<br/>]</pre> | no |
176+
| <a name="input_configuration"></a> [configuration](#input\_configuration) | The execute command configuration for the cluster | <pre>object({<br/> execute_command_configuration = optional(object({<br/> kms_key_id = optional(string)<br/> log_configuration = optional(object({<br/> cloud_watch_encryption_enabled = optional(bool)<br/> cloud_watch_log_group_name = optional(string)<br/> s3_bucket_encryption_enabled = optional(bool)<br/> s3_bucket_name = optional(string)<br/> s3_kms_key_id = optional(string)<br/> }))<br/> logging = optional(string, "OVERRIDE")<br/> }))<br/> managed_storage_configuration = optional(object({<br/> fargate_ephemeral_storage_kms_key_id = optional(string)<br/> kms_key_id = optional(string)<br/> }))<br/> })</pre> | <pre>{<br/> "execute_command_configuration": {<br/> "log_configuration": {<br/> "cloud_watch_log_group_name": "placeholder"<br/> }<br/> }<br/>}</pre> | no |
180177
| <a name="input_create"></a> [create](#input\_create) | Determines whether resources will be created (affects all resources) | `bool` | `true` | no |
181178
| <a name="input_create_cloudwatch_log_group"></a> [create\_cloudwatch\_log\_group](#input\_create\_cloudwatch\_log\_group) | Determines whether a log group is created by this module for the cluster logs. If not, AWS will automatically create one if logging is enabled | `bool` | `true` | no |
182179
| <a name="input_create_task_exec_iam_role"></a> [create\_task\_exec\_iam\_role](#input\_create\_task\_exec\_iam\_role) | Determines whether the ECS task definition IAM role should be created | `bool` | `false` | no |
183180
| <a name="input_create_task_exec_policy"></a> [create\_task\_exec\_policy](#input\_create\_task\_exec\_policy) | Determines whether the ECS task definition IAM policy should be created. This includes permissions included in AmazonECSTaskExecutionRolePolicy as well as access to secrets and SSM parameters | `bool` | `true` | no |
184181
| <a name="input_default_capacity_provider_use_fargate"></a> [default\_capacity\_provider\_use\_fargate](#input\_default\_capacity\_provider\_use\_fargate) | Determines whether to use Fargate or autoscaling for default capacity provider strategy | `bool` | `true` | no |
185182
| <a name="input_fargate_capacity_providers"></a> [fargate\_capacity\_providers](#input\_fargate\_capacity\_providers) | Map of Fargate capacity provider definitions to use for the cluster | `any` | `{}` | no |
183+
| <a name="input_name"></a> [name](#input\_name) | Name of the cluster (up to 255 letters, numbers, hyphens, and underscores) | `string` | `""` | no |
184+
| <a name="input_service_connect_defaults"></a> [service\_connect\_defaults](#input\_service\_connect\_defaults) | Configures a default Service Connect namespace | <pre>object({<br/> namespace = string<br/> })</pre> | `null` | no |
185+
| <a name="input_settings"></a> [settings](#input\_settings) | List of configuration block(s) with cluster settings. For example, this can be used to enable CloudWatch Container Insights for a cluster | <pre>list(object({<br/> name = string<br/> value = string<br/> }))</pre> | <pre>[<br/> {<br/> "name": "containerInsights",<br/> "value": "enabled"<br/> }<br/>]</pre> | no |
186186
| <a name="input_tags"></a> [tags](#input\_tags) | A map of tags to add to all resources | `map(string)` | `{}` | no |
187187
| <a name="input_task_exec_iam_role_description"></a> [task\_exec\_iam\_role\_description](#input\_task\_exec\_iam\_role\_description) | Description of the role | `string` | `null` | no |
188188
| <a name="input_task_exec_iam_role_name"></a> [task\_exec\_iam\_role\_name](#input\_task\_exec\_iam\_role\_name) | Name to use on IAM role created | `string` | `null` | no |

modules/cluster/main.tf

+23-48
Original file line numberDiff line numberDiff line change
@@ -2,84 +2,58 @@
22
# Cluster
33
################################################################################
44

5-
locals {
6-
execute_command_configuration = {
7-
logging = "OVERRIDE"
8-
log_configuration = {
9-
cloud_watch_log_group_name = try(aws_cloudwatch_log_group.this[0].name, null)
10-
}
11-
}
12-
}
13-
145
resource "aws_ecs_cluster" "this" {
156
count = var.create ? 1 : 0
167

17-
name = var.cluster_name
18-
198
dynamic "configuration" {
20-
for_each = var.create_cloudwatch_log_group ? [var.cluster_configuration] : []
9+
for_each = var.configuration != null ? [var.configuration] : []
2110

2211
content {
2312
dynamic "execute_command_configuration" {
24-
for_each = try([merge(local.execute_command_configuration, configuration.value.execute_command_configuration)], [{}])
13+
for_each = configuration.value.execute_command_configuration != null ? [configuration.value.execute_command_configuration] : []
2514

2615
content {
27-
kms_key_id = try(execute_command_configuration.value.kms_key_id, null)
28-
logging = try(execute_command_configuration.value.logging, "DEFAULT")
16+
kms_key_id = execute_command_configuration.value.kms_key_id
2917

3018
dynamic "log_configuration" {
31-
for_each = try([execute_command_configuration.value.log_configuration], [])
19+
for_each = execute_command_configuration.value.log_configuration != null ? [execute_command_configuration.value.log_configuration] : []
3220

3321
content {
34-
cloud_watch_encryption_enabled = try(log_configuration.value.cloud_watch_encryption_enabled, null)
35-
cloud_watch_log_group_name = try(log_configuration.value.cloud_watch_log_group_name, null)
36-
s3_bucket_name = try(log_configuration.value.s3_bucket_name, null)
37-
s3_bucket_encryption_enabled = try(log_configuration.value.s3_bucket_encryption_enabled, null)
38-
s3_key_prefix = try(log_configuration.value.s3_key_prefix, null)
22+
cloud_watch_encryption_enabled = log_configuration.value.cloud_watch_encryption_enabled
23+
cloud_watch_log_group_name = try(aws_cloudwatch_log_group.this[0].name, log_configuration.value.cloud_watch_log_group_name)
24+
s3_bucket_encryption_enabled = log_configuration.value.s3_bucket_encryption_enabled
25+
s3_bucket_name = log_configuration.value.s3_bucket_name
26+
s3_key_prefix = log_configuration.value.s3_key_prefix
3927
}
4028
}
29+
30+
logging = try(execute_command_configuration.value.logging, "DEFAULT")
4131
}
4232
}
43-
}
44-
}
4533

46-
dynamic "configuration" {
47-
for_each = !var.create_cloudwatch_log_group && length(var.cluster_configuration) > 0 ? [var.cluster_configuration] : []
48-
49-
content {
50-
dynamic "execute_command_configuration" {
51-
for_each = try([configuration.value.execute_command_configuration], [{}])
34+
dynamic "managed_storage_configuration" {
35+
for_each = configuration.value.managed_storage_configuration != null ? [configuration.value.managed_storage_configuration] : []
5236

5337
content {
54-
kms_key_id = try(execute_command_configuration.value.kms_key_id, null)
55-
logging = try(execute_command_configuration.value.logging, "DEFAULT")
56-
57-
dynamic "log_configuration" {
58-
for_each = try([execute_command_configuration.value.log_configuration], [])
59-
60-
content {
61-
cloud_watch_encryption_enabled = try(log_configuration.value.cloud_watch_encryption_enabled, null)
62-
cloud_watch_log_group_name = try(log_configuration.value.cloud_watch_log_group_name, null)
63-
s3_bucket_name = try(log_configuration.value.s3_bucket_name, null)
64-
s3_bucket_encryption_enabled = try(log_configuration.value.s3_bucket_encryption_enabled, null)
65-
s3_key_prefix = try(log_configuration.value.s3_key_prefix, null)
66-
}
67-
}
38+
fargate_ephemeral_storage_kms_key_id = managed_storage_configuration.value.fargate_ephemeral_storage_kms_key_id
39+
kms_key_id = managed_storage_configuration.value.kms_key_id
6840
}
6941
}
7042
}
7143
}
7244

45+
name = var.name
46+
7347
dynamic "service_connect_defaults" {
74-
for_each = length(var.cluster_service_connect_defaults) > 0 ? [var.cluster_service_connect_defaults] : []
48+
for_each = var.service_connect_defaults != null ? [var.service_connect_defaults] : []
7549

7650
content {
7751
namespace = service_connect_defaults.value.namespace
7852
}
7953
}
8054

8155
dynamic "setting" {
82-
for_each = flatten([var.cluster_settings])
56+
for_each = var.settings != null ? var.settings : []
8357

8458
content {
8559
name = setting.value.name
@@ -93,10 +67,11 @@ resource "aws_ecs_cluster" "this" {
9367
################################################################################
9468
# CloudWatch Log Group
9569
################################################################################
70+
9671
resource "aws_cloudwatch_log_group" "this" {
9772
count = var.create && var.create_cloudwatch_log_group ? 1 : 0
9873

99-
name = try(coalesce(var.cloudwatch_log_group_name, "/aws/ecs/${var.cluster_name}"), "")
74+
name = try(coalesce(var.cloudwatch_log_group_name, "/aws/ecs/${var.name}"), "")
10075
retention_in_days = var.cloudwatch_log_group_retention_in_days
10176
kms_key_id = var.cloudwatch_log_group_kms_key_id
10277

@@ -177,7 +152,7 @@ resource "aws_ecs_capacity_provider" "this" {
177152
################################################################################
178153

179154
locals {
180-
task_exec_iam_role_name = try(coalesce(var.task_exec_iam_role_name, var.cluster_name), "")
155+
task_exec_iam_role_name = try(coalesce(var.task_exec_iam_role_name, var.name), "")
181156

182157
create_task_exec_iam_role = var.create && var.create_task_exec_iam_role
183158
create_task_exec_policy = local.create_task_exec_iam_role && var.create_task_exec_policy
@@ -203,7 +178,7 @@ resource "aws_iam_role" "task_exec" {
203178
name = var.task_exec_iam_role_use_name_prefix ? null : local.task_exec_iam_role_name
204179
name_prefix = var.task_exec_iam_role_use_name_prefix ? "${local.task_exec_iam_role_name}-" : null
205180
path = var.task_exec_iam_role_path
206-
description = coalesce(var.task_exec_iam_role_description, "Task execution role for ${var.cluster_name}")
181+
description = coalesce(var.task_exec_iam_role_description, "Task execution role for ${var.name}")
207182

208183
assume_role_policy = data.aws_iam_policy_document.task_exec_assume[0].json
209184
permissions_boundary = var.task_exec_iam_role_permissions_boundary

modules/cluster/variables.tf

+39-12
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,54 @@ variable "tags" {
1414
# Cluster
1515
################################################################################
1616

17-
variable "cluster_name" {
17+
variable "name" {
1818
description = "Name of the cluster (up to 255 letters, numbers, hyphens, and underscores)"
1919
type = string
2020
default = ""
2121
}
2222

23-
variable "cluster_configuration" {
23+
variable "configuration" {
2424
description = "The execute command configuration for the cluster"
25-
type = any
26-
default = {}
25+
type = object({
26+
execute_command_configuration = optional(object({
27+
kms_key_id = optional(string)
28+
log_configuration = optional(object({
29+
cloud_watch_encryption_enabled = optional(bool)
30+
cloud_watch_log_group_name = optional(string)
31+
s3_bucket_encryption_enabled = optional(bool)
32+
s3_bucket_name = optional(string)
33+
s3_kms_key_id = optional(string)
34+
}))
35+
logging = optional(string, "OVERRIDE")
36+
}))
37+
managed_storage_configuration = optional(object({
38+
fargate_ephemeral_storage_kms_key_id = optional(string)
39+
kms_key_id = optional(string)
40+
}))
41+
})
42+
default = {
43+
execute_command_configuration = {
44+
log_configuration = {
45+
cloud_watch_log_group_name = "placeholder" # will use CloudWatch log group created by module
46+
}
47+
}
48+
}
49+
}
50+
51+
variable "service_connect_defaults" {
52+
description = "Configures a default Service Connect namespace"
53+
type = object({
54+
namespace = string
55+
})
56+
default = null
2757
}
2858

29-
variable "cluster_settings" {
59+
variable "settings" {
3060
description = "List of configuration block(s) with cluster settings. For example, this can be used to enable CloudWatch Container Insights for a cluster"
31-
type = any
61+
type = list(object({
62+
name = string
63+
value = string
64+
}))
3265
default = [
3366
{
3467
name = "containerInsights"
@@ -37,12 +70,6 @@ variable "cluster_settings" {
3770
]
3871
}
3972

40-
variable "cluster_service_connect_defaults" {
41-
description = "Configures a default Service Connect namespace"
42-
type = map(string)
43-
default = {}
44-
}
45-
4673
################################################################################
4774
# CloudWatch Log Group
4875
################################################################################

modules/service/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ resource "aws_ecs_service" "this" {
231231
for_each = var.volume_configuration != null ? [var.volume_configuration] : []
232232

233233
content {
234-
name = volume_configuration.value.name
234+
name = try(volume_configuration.value.name, volume_configuration.key)
235235

236236
dynamic "managed_ebs_volume" {
237237
for_each = [volume_configuration.value.managed_ebs_volume]

wrappers/cluster/main.tf

+16-10
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,27 @@ module "wrapper" {
88
cloudwatch_log_group_name = try(each.value.cloudwatch_log_group_name, var.defaults.cloudwatch_log_group_name, null)
99
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 90)
1010
cloudwatch_log_group_tags = try(each.value.cloudwatch_log_group_tags, var.defaults.cloudwatch_log_group_tags, {})
11-
cluster_configuration = try(each.value.cluster_configuration, var.defaults.cluster_configuration, {})
12-
cluster_name = try(each.value.cluster_name, var.defaults.cluster_name, "")
13-
cluster_service_connect_defaults = try(each.value.cluster_service_connect_defaults, var.defaults.cluster_service_connect_defaults, {})
14-
cluster_settings = try(each.value.cluster_settings, var.defaults.cluster_settings, [
11+
configuration = try(each.value.configuration, var.defaults.configuration, {
12+
execute_command_configuration = {
13+
log_configuration = {
14+
cloud_watch_log_group_name = "placeholder"
15+
}
16+
}
17+
})
18+
create = try(each.value.create, var.defaults.create, true)
19+
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, true)
20+
create_task_exec_iam_role = try(each.value.create_task_exec_iam_role, var.defaults.create_task_exec_iam_role, false)
21+
create_task_exec_policy = try(each.value.create_task_exec_policy, var.defaults.create_task_exec_policy, true)
22+
default_capacity_provider_use_fargate = try(each.value.default_capacity_provider_use_fargate, var.defaults.default_capacity_provider_use_fargate, true)
23+
fargate_capacity_providers = try(each.value.fargate_capacity_providers, var.defaults.fargate_capacity_providers, {})
24+
name = try(each.value.name, var.defaults.name, "")
25+
service_connect_defaults = try(each.value.service_connect_defaults, var.defaults.service_connect_defaults, null)
26+
settings = try(each.value.settings, var.defaults.settings, [
1527
{
1628
name = "containerInsights"
1729
value = "enabled"
1830
}
1931
])
20-
create = try(each.value.create, var.defaults.create, true)
21-
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, true)
22-
create_task_exec_iam_role = try(each.value.create_task_exec_iam_role, var.defaults.create_task_exec_iam_role, false)
23-
create_task_exec_policy = try(each.value.create_task_exec_policy, var.defaults.create_task_exec_policy, true)
24-
default_capacity_provider_use_fargate = try(each.value.default_capacity_provider_use_fargate, var.defaults.default_capacity_provider_use_fargate, true)
25-
fargate_capacity_providers = try(each.value.fargate_capacity_providers, var.defaults.fargate_capacity_providers, {})
2632
tags = try(each.value.tags, var.defaults.tags, {})
2733
task_exec_iam_role_description = try(each.value.task_exec_iam_role_description, var.defaults.task_exec_iam_role_description, null)
2834
task_exec_iam_role_name = try(each.value.task_exec_iam_role_name, var.defaults.task_exec_iam_role_name, null)

0 commit comments

Comments
 (0)