Skip to content

Commit cf4101e

Browse files
authored
feat: Add support for using container definition CloudWatch log group name as prefix (#126)
1 parent 4489660 commit cf4101e

File tree

9 files changed

+155
-143
lines changed

9 files changed

+155
-143
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.83.3
3+
rev: v1.83.5
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_wrapper_module_for_each
@@ -24,7 +24,7 @@ repos:
2424
- '--args=--only=terraform_standard_module_structure'
2525
- '--args=--only=terraform_workspace_remote'
2626
- repo: https://github.com/pre-commit/pre-commit-hooks
27-
rev: v4.4.0
27+
rev: v4.5.0
2828
hooks:
2929
- id: check-merge-conflict
3030
- id: end-of-file-fixer

modules/container-definition/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ No modules.
141141
|------|-------------|------|---------|:--------:|
142142
| <a name="input_cloudwatch_log_group_kms_key_id"></a> [cloudwatch\_log\_group\_kms\_key\_id](#input\_cloudwatch\_log\_group\_kms\_key\_id) | If a KMS Key ARN is set, this key will be used to encrypt the corresponding log group. Please be sure that the KMS Key has an appropriate key policy (https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) | `string` | `null` | no |
143143
| <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. Default is 30 days | `number` | `30` | no |
144+
| <a name="input_cloudwatch_log_group_use_name_prefix"></a> [cloudwatch\_log\_group\_use\_name\_prefix](#input\_cloudwatch\_log\_group\_use\_name\_prefix) | Determines whether the log group name should be used as a prefix | `bool` | `false` | no |
144145
| <a name="input_command"></a> [command](#input\_command) | The command that's passed to the container | `list(string)` | `[]` | no |
145146
| <a name="input_cpu"></a> [cpu](#input\_cpu) | The number of cpu units to reserve for the container. This is optional for tasks using Fargate launch type and the total amount of `cpu` of all containers in a task will need to be lower than the task-level cpu value | `number` | `null` | no |
146147
| <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. If not, AWS will automatically create one if logging is enabled | `bool` | `true` | no |

modules/container-definition/main.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ data "aws_region" "current" {}
33
locals {
44
is_not_windows = contains(["LINUX"], var.operating_system_family)
55

6+
log_group_name = "/aws/ecs/${var.service}/${var.name}"
7+
68
log_configuration = merge(
79
{ for k, v in {
810
logDriver = "awslogs",
@@ -64,7 +66,8 @@ locals {
6466
resource "aws_cloudwatch_log_group" "this" {
6567
count = var.create_cloudwatch_log_group && var.enable_cloudwatch_logging ? 1 : 0
6668

67-
name = "/aws/ecs/${var.service}/${var.name}"
69+
name = var.cloudwatch_log_group_use_name_prefix ? null : local.log_group_name
70+
name_prefix = var.cloudwatch_log_group_use_name_prefix ? "${local.log_group_name}-" : null
6871
retention_in_days = var.cloudwatch_log_group_retention_in_days
6972
kms_key_id = var.cloudwatch_log_group_kms_key_id
7073

modules/container-definition/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@ variable "create_cloudwatch_log_group" {
286286
default = true
287287
}
288288

289+
variable "cloudwatch_log_group_use_name_prefix" {
290+
description = "Determines whether the log group name should be used as a prefix"
291+
type = bool
292+
default = false
293+
}
294+
289295
variable "cloudwatch_log_group_retention_in_days" {
290296
description = "Number of days to retain log events. Default is 30 days"
291297
type = number

modules/service/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@ module "container_definition" {
572572
service = var.name
573573
enable_cloudwatch_logging = try(each.value.enable_cloudwatch_logging, var.container_definition_defaults.enable_cloudwatch_logging, true)
574574
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.container_definition_defaults.create_cloudwatch_log_group, true)
575+
cloudwatch_log_group_use_name_prefix = try(each.value.cloudwatch_log_group_use_name_prefix, var.container_definition_defaults.cloudwatch_log_group_use_name_prefix, false)
575576
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.container_definition_defaults.cloudwatch_log_group_retention_in_days, 14)
576577
cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.container_definition_defaults.cloudwatch_log_group_kms_key_id, null)
577578

wrappers/cluster/main.tf

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,32 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
create = try(each.value.create, var.defaults.create, true)
7-
tags = try(each.value.tags, var.defaults.tags, {})
8-
cluster_name = try(each.value.cluster_name, var.defaults.cluster_name, "")
9-
cluster_configuration = try(each.value.cluster_configuration, var.defaults.cluster_configuration, {})
6+
autoscaling_capacity_providers = try(each.value.autoscaling_capacity_providers, var.defaults.autoscaling_capacity_providers, {})
7+
cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.defaults.cloudwatch_log_group_kms_key_id, null)
8+
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 90)
9+
cloudwatch_log_group_tags = try(each.value.cloudwatch_log_group_tags, var.defaults.cloudwatch_log_group_tags, {})
10+
cluster_configuration = try(each.value.cluster_configuration, var.defaults.cluster_configuration, {})
11+
cluster_name = try(each.value.cluster_name, var.defaults.cluster_name, "")
12+
cluster_service_connect_defaults = try(each.value.cluster_service_connect_defaults, var.defaults.cluster_service_connect_defaults, {})
1013
cluster_settings = try(each.value.cluster_settings, var.defaults.cluster_settings, {
1114
name = "containerInsights"
1215
value = "enabled"
1316
})
14-
cluster_service_connect_defaults = try(each.value.cluster_service_connect_defaults, var.defaults.cluster_service_connect_defaults, {})
17+
create = try(each.value.create, var.defaults.create, true)
1518
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, true)
16-
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 90)
17-
cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.defaults.cloudwatch_log_group_kms_key_id, null)
18-
cloudwatch_log_group_tags = try(each.value.cloudwatch_log_group_tags, var.defaults.cloudwatch_log_group_tags, {})
19+
create_task_exec_iam_role = try(each.value.create_task_exec_iam_role, var.defaults.create_task_exec_iam_role, false)
20+
create_task_exec_policy = try(each.value.create_task_exec_policy, var.defaults.create_task_exec_policy, true)
1921
default_capacity_provider_use_fargate = try(each.value.default_capacity_provider_use_fargate, var.defaults.default_capacity_provider_use_fargate, true)
2022
fargate_capacity_providers = try(each.value.fargate_capacity_providers, var.defaults.fargate_capacity_providers, {})
21-
autoscaling_capacity_providers = try(each.value.autoscaling_capacity_providers, var.defaults.autoscaling_capacity_providers, {})
22-
create_task_exec_iam_role = try(each.value.create_task_exec_iam_role, var.defaults.create_task_exec_iam_role, false)
23+
tags = try(each.value.tags, var.defaults.tags, {})
24+
task_exec_iam_role_description = try(each.value.task_exec_iam_role_description, var.defaults.task_exec_iam_role_description, null)
2325
task_exec_iam_role_name = try(each.value.task_exec_iam_role_name, var.defaults.task_exec_iam_role_name, null)
24-
task_exec_iam_role_use_name_prefix = try(each.value.task_exec_iam_role_use_name_prefix, var.defaults.task_exec_iam_role_use_name_prefix, true)
2526
task_exec_iam_role_path = try(each.value.task_exec_iam_role_path, var.defaults.task_exec_iam_role_path, null)
26-
task_exec_iam_role_description = try(each.value.task_exec_iam_role_description, var.defaults.task_exec_iam_role_description, null)
2727
task_exec_iam_role_permissions_boundary = try(each.value.task_exec_iam_role_permissions_boundary, var.defaults.task_exec_iam_role_permissions_boundary, null)
28-
task_exec_iam_role_tags = try(each.value.task_exec_iam_role_tags, var.defaults.task_exec_iam_role_tags, {})
2928
task_exec_iam_role_policies = try(each.value.task_exec_iam_role_policies, var.defaults.task_exec_iam_role_policies, {})
30-
create_task_exec_policy = try(each.value.create_task_exec_policy, var.defaults.create_task_exec_policy, true)
31-
task_exec_ssm_param_arns = try(each.value.task_exec_ssm_param_arns, var.defaults.task_exec_ssm_param_arns, ["arn:aws:ssm:*:*:parameter/*"])
32-
task_exec_secret_arns = try(each.value.task_exec_secret_arns, var.defaults.task_exec_secret_arns, ["arn:aws:secretsmanager:*:*:secret:*"])
29+
task_exec_iam_role_tags = try(each.value.task_exec_iam_role_tags, var.defaults.task_exec_iam_role_tags, {})
30+
task_exec_iam_role_use_name_prefix = try(each.value.task_exec_iam_role_use_name_prefix, var.defaults.task_exec_iam_role_use_name_prefix, true)
3331
task_exec_iam_statements = try(each.value.task_exec_iam_statements, var.defaults.task_exec_iam_statements, {})
32+
task_exec_secret_arns = try(each.value.task_exec_secret_arns, var.defaults.task_exec_secret_arns, ["arn:aws:secretsmanager:*:*:secret:*"])
33+
task_exec_ssm_param_arns = try(each.value.task_exec_ssm_param_arns, var.defaults.task_exec_ssm_param_arns, ["arn:aws:ssm:*:*:parameter/*"])
3434
}

wrappers/container-definition/main.tf

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,19 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
operating_system_family = try(each.value.operating_system_family, var.defaults.operating_system_family, "LINUX")
6+
cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.defaults.cloudwatch_log_group_kms_key_id, null)
7+
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 30)
8+
cloudwatch_log_group_use_name_prefix = try(each.value.cloudwatch_log_group_use_name_prefix, var.defaults.cloudwatch_log_group_use_name_prefix, false)
79
command = try(each.value.command, var.defaults.command, [])
810
cpu = try(each.value.cpu, var.defaults.cpu, null)
11+
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, true)
912
dependencies = try(each.value.dependencies, var.defaults.dependencies, [])
1013
disable_networking = try(each.value.disable_networking, var.defaults.disable_networking, null)
1114
dns_search_domains = try(each.value.dns_search_domains, var.defaults.dns_search_domains, [])
1215
dns_servers = try(each.value.dns_servers, var.defaults.dns_servers, [])
1316
docker_labels = try(each.value.docker_labels, var.defaults.docker_labels, {})
1417
docker_security_options = try(each.value.docker_security_options, var.defaults.docker_security_options, [])
18+
enable_cloudwatch_logging = try(each.value.enable_cloudwatch_logging, var.defaults.enable_cloudwatch_logging, true)
1519
entrypoint = try(each.value.entrypoint, var.defaults.entrypoint, [])
1620
environment = try(each.value.environment, var.defaults.environment, [])
1721
environment_files = try(each.value.environment_files, var.defaults.environment_files, [])
@@ -29,24 +33,21 @@ module "wrapper" {
2933
memory_reservation = try(each.value.memory_reservation, var.defaults.memory_reservation, null)
3034
mount_points = try(each.value.mount_points, var.defaults.mount_points, [])
3135
name = try(each.value.name, var.defaults.name, null)
36+
operating_system_family = try(each.value.operating_system_family, var.defaults.operating_system_family, "LINUX")
3237
port_mappings = try(each.value.port_mappings, var.defaults.port_mappings, [])
3338
privileged = try(each.value.privileged, var.defaults.privileged, false)
3439
pseudo_terminal = try(each.value.pseudo_terminal, var.defaults.pseudo_terminal, false)
3540
readonly_root_filesystem = try(each.value.readonly_root_filesystem, var.defaults.readonly_root_filesystem, true)
3641
repository_credentials = try(each.value.repository_credentials, var.defaults.repository_credentials, {})
3742
resource_requirements = try(each.value.resource_requirements, var.defaults.resource_requirements, [])
3843
secrets = try(each.value.secrets, var.defaults.secrets, [])
44+
service = try(each.value.service, var.defaults.service, "")
3945
start_timeout = try(each.value.start_timeout, var.defaults.start_timeout, 30)
4046
stop_timeout = try(each.value.stop_timeout, var.defaults.stop_timeout, 120)
4147
system_controls = try(each.value.system_controls, var.defaults.system_controls, [])
48+
tags = try(each.value.tags, var.defaults.tags, {})
4249
ulimits = try(each.value.ulimits, var.defaults.ulimits, [])
4350
user = try(each.value.user, var.defaults.user, null)
4451
volumes_from = try(each.value.volumes_from, var.defaults.volumes_from, [])
4552
working_directory = try(each.value.working_directory, var.defaults.working_directory, null)
46-
service = try(each.value.service, var.defaults.service, "")
47-
enable_cloudwatch_logging = try(each.value.enable_cloudwatch_logging, var.defaults.enable_cloudwatch_logging, true)
48-
create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, true)
49-
cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 30)
50-
cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.defaults.cloudwatch_log_group_kms_key_id, null)
51-
tags = try(each.value.tags, var.defaults.tags, {})
5253
}

0 commit comments

Comments
 (0)