Skip to content

Commit 664acfd

Browse files
authored
feat: support send alarm to additional resource (#31)
* (add): support additional alarm action * (update): alarm name * (update): rename variables * (update): scaling naming * (update): step_alarm naming * (update): step_alarm naming * (update): re data name from this to current * (remove): roll validator * (update): local.service_name to name * (update): envvars to environment_variables * (update): secret variables naming * (add): support naming override * (update): kms namign * (update): container difinitions template * (update): README.md * (update): CHANGELOG
1 parent 3f73600 commit 664acfd

File tree

8 files changed

+245
-226
lines changed

8 files changed

+245
-226
lines changed

CHANGELOG.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,52 @@
11
# Change Log
22

3+
## [v1.1.10] - 2022-12-13
4+
5+
### Added
6+
7+
- Support naming override with `var.name_override`; raise exception if naming override or formatted name is not given
8+
- `local.empty_prefix`
9+
- `local.empty_environment`
10+
- `local.empty_name`
11+
- `local.raise_empty_name`
12+
- Add new variables `var.name_override`
13+
- Add support step scaling alarm in module `step_alarm`
14+
- `concat([aws_appautoscaling_policy.step_scaling_policies[each.key].arn], lookup(each.value, "alarm_actions", lookup(var.scaling_configuration, "default_alarm_actions", [])))`
15+
16+
### Changed
17+
18+
- Update data sources
19+
- `data.aws_caller_identity.current` to `data.aws_caller_identity.this`
20+
- `data.aws_region.current` to `data.aws_region.this`
21+
- Rename variables in local {...}
22+
- `local.service_name` to `local.name`
23+
- Update how to struct task definition
24+
- Remove `local.container_definitions`
25+
- Update `local.container_definitions_ec2`
26+
- Add `local.pre_container_definitions_template`, `local.apm_template`, `local.ec2_template`, `local.ec2_template` and `local.render_container_definitions`
27+
- Update variables description and default value for `var.prefix`, `var.environment` and `var.name`
28+
- Rename variables
29+
- `var.secrets` to `var.secret_variables`
30+
- `var.json_secrets` to `var.json_secret_variables`
31+
- `var.envvars` to `var.environment_variables` *data structure is changed*
32+
- Update resource `aws_lb_listener_rule.this`'s argument
33+
- `name` from `format("%s-service-secrets", local.service_name)` to `format("%s-ecs", var.name)`
34+
- `tags` from `merge(local.tags, { "Name" : format("%s-service-secrets", local.service_name) })` to `merge(local.tags, { "Name" : format("%s-ecs", local.name) })`
35+
- Update resource `aws_appautoscaling_policy.target_tracking_scaling_policies`'s argument
36+
- `name` from `format("%s-%s-scaling-policy", local.service_name, each.key)` to `format("%s-%s-scaling-policy", local.name, replace(each.key, "_", "-"))`
37+
- Update resource `aws_appautoscaling_policy.step_scaling_policies`'s argument
38+
- `name` from `format("%s-%s-scaling-policy", local.service_name, each.key)` to `format("%s-%s-scaling-policy", local.name, replace(each.key, "_", "-"))`
39+
- Update module `module.step_alarm`'s argument
40+
- `name` from `format("%s-%s-alarm", local.service_name, each.key)` to `replace(each.key, "_", "-")`
41+
- `statistic` from `lookup(each.value, "statistic", "Average")` to `lookup(each.value, "statistic", null)`
42+
- Update parameter in file `task-definitions/*.json` to match with others
43+
44+
### Removed
45+
46+
- Remove role validator (Let's AWS API handle this)
47+
- `data.aws_iam_role.get_ecs_task_role`
48+
- `data.aws_iam_role.get_ecs_task_execution_role`
49+
350
## [v1.1.9] - 2022-11-23
451

552
### Changed

README.md

Lines changed: 90 additions & 91 deletions
Large diffs are not rendered by default.

locals.tf

Lines changed: 43 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
data "aws_caller_identity" "current" {
2-
}
1+
data "aws_caller_identity" "this" {}
2+
data "aws_region" "this" {}
33

4-
data "aws_region" "current" {
5-
}
64
/* -------------------------------------------------------------------------- */
75
/* Generics */
86
/* -------------------------------------------------------------------------- */
97
locals {
10-
service_name = format("%s-%s-%s", var.prefix, var.environment, var.name)
8+
name = var.name_override == "" ? format("%s-%s-%s", var.prefix, var.environment, var.name) : var.name_override
119

1210
# Task Role
1311
task_role_arn = var.is_create_iam_role ? aws_iam_role.task_role[0].arn : var.exists_task_role_arn
@@ -22,7 +20,7 @@ locals {
2220
ecs_task_execution_role_policy_arns = toset(concat(var.additional_ecs_task_execution_role_policy_arns, local.ecs_default_task_execution_role_policy_arns))
2321

2422
# Logging
25-
log_group_name = format("%s-service-log-group", local.service_name)
23+
log_group_name = format("%s-service-log-group", local.name)
2624

2725
# Volume
2826
volumes = concat(var.efs_volumes)
@@ -32,7 +30,7 @@ locals {
3230
apm_name = "xray-apm-sidecar"
3331

3432
# ECS Service
35-
ecs_cluster_arn = "arn:aws:ecs:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:cluster/${var.ecs_cluster_name}"
33+
ecs_cluster_arn = "arn:aws:ecs:${data.aws_region.this.name}:${data.aws_caller_identity.this.account_id}:cluster/${var.ecs_cluster_name}"
3634

3735

3836
tags = merge(
@@ -57,6 +55,11 @@ locals {
5755
raise_alb_listener_arn_empty = var.is_attach_service_with_lb && length(var.alb_listener_arn) == 0 ? file("Variable `alb_listener_arn` is required when `is_attach_service_with_lb` is true") : "pass"
5856

5957
raise_enable_exec_on_cp = var.is_enable_execute_command && var.capacity_provider_strategy != null ? file("Canot set `is_enable_execute_command` with `capacity_provider_strategy`. Please enabled SSM at EC2 instance profile instead") : "pass"
58+
59+
empty_prefix = var.prefix == "" ? true : false
60+
empty_environment = var.environment == "" ? true : false
61+
empty_name = var.name == "" ? true : false
62+
raise_empty_name = local.name == "" && (local.empty_prefix || local.empty_environment || local.empty_name) ? file("`var.name_override` or (`var.prefix`, `var.environment` and `var.name is required`) ") : null
6063
}
6164

6265
/* -------------------------------------------------------------------------- */
@@ -71,54 +74,37 @@ locals {
7174
] : []
7275
mount_points = concat(local.mount_points_application_scratch, try(var.service_info.mount_points, []))
7376

74-
# TODO make it better later
75-
container_definitions = local.is_apm_enabled ? templatefile("${path.module}/task-definitions/service-with-sidecar-container.json", {
76-
cpu = var.service_info.cpu_allocation
77-
service_image = var.service_info.image
78-
memory = var.service_info.mem_allocation
79-
log_group_name = local.log_group_name
80-
region = data.aws_region.current.name
81-
service_name = local.service_name
82-
service_port = var.service_info.port
83-
envvars = jsonencode(var.envvars)
84-
secrets_task_definition = jsonencode(local.secrets_task_definition)
85-
apm_cpu = var.apm_config.cpu
86-
apm_sidecar_ecr_url = var.apm_sidecar_ecr_url
87-
apm_memory = var.apm_config.memory
88-
apm_name = local.apm_name
89-
apm_service_port = var.apm_config.service_port
90-
entry_point = jsonencode(var.entry_point)
91-
command = jsonencode(var.command)
92-
mount_points = jsonencode(local.mount_points)
93-
}) : templatefile("${path.module}/task-definitions/service-main-container.json", {
94-
cpu = var.service_info.cpu_allocation
95-
service_image = var.service_info.image
96-
memory = var.service_info.mem_allocation
97-
log_group_name = local.log_group_name
98-
region = data.aws_region.current.name
99-
service_name = local.service_name
100-
service_port = var.service_info.port
101-
envvars = jsonencode(var.envvars)
102-
secrets_task_definition = jsonencode(local.secrets_task_definition)
103-
entry_point = jsonencode(var.entry_point)
104-
command = jsonencode(var.command)
105-
mount_points = jsonencode(local.mount_points)
106-
})
107-
container_definitions_ec2 = templatefile("${path.module}/task-definitions/service-main-container-ec2.json", {
108-
cpu = var.service_info.cpu_allocation
109-
service_image = var.service_info.image
110-
memory = var.service_info.mem_allocation
111-
log_group_name = local.log_group_name
112-
region = data.aws_region.current.name
113-
service_name = local.service_name
114-
service_port = var.service_info.port
115-
envvars = jsonencode(var.envvars)
116-
secrets_task_definition = jsonencode(local.secrets_task_definition)
117-
entry_point = jsonencode(var.entry_point)
118-
command = jsonencode(var.command)
119-
unix_max_connection = tostring(var.unix_max_connection)
120-
mount_points = jsonencode(local.mount_points)
121-
})
77+
environment_variables = [for key, value in var.environment_variables : { "name" = key, "value" = value }]
78+
79+
pre_container_definitions_template = {
80+
cpu = var.service_info.cpu_allocation
81+
service_image = var.service_info.image
82+
memory = var.service_info.mem_allocation
83+
log_group_name = local.log_group_name
84+
region = data.aws_region.this.name
85+
name = local.name
86+
service_port = var.service_info.port
87+
environment_variables = jsonencode(local.environment_variables)
88+
secret_variables = jsonencode(local.secrets_task_unique_definition)
89+
entry_point = jsonencode(var.entry_point)
90+
mount_points = jsonencode(local.mount_points)
91+
command = jsonencode(var.command)
92+
}
93+
apm_template = {
94+
apm_cpu = var.apm_config.cpu
95+
apm_sidecar_ecr_url = var.apm_sidecar_ecr_url
96+
apm_memory = var.apm_config.memory
97+
apm_name = local.apm_name
98+
apm_service_port = var.apm_config.service_port
99+
}
100+
ec2_template = {
101+
unix_max_connection = tostring(var.unix_max_connection)
102+
}
103+
container_definitions_template = local.is_apm_enabled ? merge(local.pre_container_definitions_template, local.apm_template) : local.pre_container_definitions_template
104+
render_container_definitions = local.is_apm_enabled ? templatefile("${path.module}/task-definitions/service-with-sidecar-container.json", local.container_definitions_template) : templatefile("${path.module}/task-definitions/service-main-container.json", local.container_definitions_template)
105+
106+
container_definitions = local.render_container_definitions
107+
container_definitions_ec2 = templatefile("${path.module}/task-definitions/service-main-container-ec2.json", merge(local.pre_container_definitions_template, local.ec2_template))
122108
}
123109

124110
/* -------------------------------------------------------------------------- */
@@ -129,11 +115,11 @@ locals {
129115
secret_manager_arns = [for secret in aws_secretsmanager_secret.service_secrets : secret.arn]
130116

131117
# Get Secret Name Arrays
132-
secret_names = keys(var.secrets)
118+
secret_names = keys(var.secret_variables)
133119

134120
# Create a secret map { secret_name : secret_arn } using ZipMap Function for iteration
135121
secrets_name_arn_map = zipmap(local.secret_names, local.secret_manager_arns)
136-
#
122+
137123
# Create secrets format for Task Definition
138124
secrets_task_unique_definition = [for secret_key, secret_arn in local.secrets_name_arn_map :
139125
tomap({

0 commit comments

Comments
 (0)