Skip to content

Commit 0ad2715

Browse files
author
Bhavik Kumar
committed
Use latest TF modules to allow greater customisation of services
1 parent 8c140f6 commit 0ad2715

File tree

2 files changed

+126
-12
lines changed

2 files changed

+126
-12
lines changed
Lines changed: 108 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,119 @@
1-
module "ecs_service" {
2-
source = "git::https://github.com/bnc-projects/terraform-ecs-service.git?ref=1.1.0"
3-
alarm_actions = [
4-
data.terraform_remote_state.market_data.outputs.alert_topic_arn
1+
data "aws_iam_policy_document" "task_service_assume_role" {
2+
statement {
3+
sid = "AllowECSTaskToAssumeRole"
4+
effect = "Allow"
5+
6+
actions = [
7+
"sts:AssumeRole"
8+
]
9+
10+
principals {
11+
type = "Service"
12+
identifiers = [
13+
"ecs-tasks.amazonaws.com"
14+
]
15+
}
16+
}
17+
}
18+
19+
data "aws_iam_policy" "execution_policy" {
20+
arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
21+
}
22+
23+
module "container_definition" {
24+
source = "git::https://github.com/bnc-projects/terraform-ecs-container-definition.git?ref=1.0.0"
25+
environment = [
26+
{
27+
name = "SPRING_PROFILES_ACTIVE",
28+
value = terraform.workspace
29+
}
30+
]
31+
healthCheck = {
32+
"command" = [
33+
"CMD-SHELL",
34+
"curl --silent --fail --max-time 30 http://localhost:8080/actuator/health || exit 1"
35+
],
36+
"interval" = 30,
37+
"retries" = 3,
38+
"startPeriod" = 300,
39+
"timeout": 5
40+
}
41+
logConfiguration = {
42+
"logDriver": "splunk",
43+
"options": {
44+
"splunk-format": "raw",
45+
"splunk-insecureskipverify": "true",
46+
"splunk-token": var.splunk_token,
47+
"splunk-url": var.splunk_url
48+
}
49+
}
50+
image = format("%s:%s", data.terraform_remote_state.ecr.outputs.repository_url, var.service_version)
51+
name = var.service_name
52+
cpu = var.cpu
53+
memory = var.memory
54+
memoryReservation = var.memory_reservation
55+
portMappings = [
56+
{
57+
containerPort = 8080
58+
hostPort = 8080,
59+
protocol = "tcp"
60+
}
561
]
6-
application_path = "/sbjb"
62+
}
63+
64+
resource "aws_iam_role" "execution_task_role" {
65+
name = format("%s-execution", var.service_name)
66+
assume_role_policy = data.aws_iam_policy_document.task_service_assume_role.json
67+
tags = var.tags
68+
}
69+
70+
resource "aws_iam_role_policy_attachment" "ecs_task_default_policy" {
71+
role = aws_iam_role.execution_task_role.name
72+
policy_arn = data.aws_iam_policy.execution_policy.arn
73+
}
74+
75+
resource "aws_iam_role" "task_role" {
76+
name = format("%s-task", var.service_name)
77+
assume_role_policy = data.aws_iam_policy_document.task_service_assume_role.json
78+
tags = var.tags
79+
}
80+
81+
resource "aws_ecs_task_definition" "task_definition" {
82+
container_definitions = "[${module.container_definition.container_definition}]"
83+
family = var.service_name
84+
cpu = var.cpu
85+
memory = var.memory
86+
execution_role_arn = aws_iam_role.execution_task_role.arn
87+
task_role_arn = aws_iam_role.task_role.arn
88+
tags = merge(local.common_tags, var.tags)
89+
}
90+
91+
module "ecs_service" {
92+
source = "git::https://github.com/bnc-projects/terraform-ecs-service.git?ref=1.3.2"
93+
application_path = "/v1/sbjb"
94+
attach_load_balancer = true
795
cluster_name = data.terraform_remote_state.market_data.outputs.ecs_cluster_name
8-
docker_image = format("%s:%s", data.terraform_remote_state.ecr.outputs.repository_url, var.service_version)
996
external_lb_listener_arn = data.terraform_remote_state.market_data.outputs.external_lb_https_listener_arn
10-
external_lb_name = data.terraform_remote_state.market_data.outputs.external_lb_name
97+
external_lb_name = join("/", [
98+
local.variable.external_lb_name_parts[1],
99+
local.variable.external_lb_name_parts[2],
100+
local.variable.external_lb_name_parts[3]])
11101
internal_lb_listener_arn = data.terraform_remote_state.market_data.outputs.internal_lb_https_listener_arn
12-
internal_lb_name = data.terraform_remote_state.market_data.outputs.internal_lb_name
13-
java_options = format("-javaagent:newrelic/newrelic.jar -Dnewrelic.environment=%s -Dnewrelic.config.file=newrelic/newrelic.yml", terraform.workspace)
102+
internal_lb_name = join("/", [
103+
local.variable.internal_lb_name_parts[1],
104+
local.variable.internal_lb_name_parts[2],
105+
local.variable.internal_lb_name_parts[3]])
14106
is_exposed_externally = false
15107
priority = 50
16108
service_name = var.service_name
17-
splunk_token = var.splunk_token
18-
splunk_url = var.splunk_url
19-
spring_profile = terraform.workspace
109+
task_definition_arn = aws_ecs_task_definition.task_definition.arn
20110
vpc_id = data.terraform_remote_state.market_data.outputs.vpc_id
21111
tags = merge(local.common_tags, var.tags)
22112
}
23113

114+
locals {
115+
variable = {
116+
internal_lb_name_parts = split("/", data.terraform_remote_state.market_data.outputs.internal_lb_name)
117+
external_lb_name_parts = split("/", data.terraform_remote_state.market_data.outputs.external_lb_name)
118+
}
119+
}

deployment/terraform/ecs-service/variables.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@ variable "aws_default_region" {
33
default = "us-west-2"
44
}
55

6+
variable "cpu" {
7+
type = number
8+
default = 128
9+
description = "The CPU limit for the task and container."
10+
}
11+
12+
variable "memory" {
13+
type = number
14+
default = 512
15+
description = "The hard memory limit for the task and container"
16+
}
17+
18+
variable "memory_reservation" {
19+
type = number
20+
default = 512
21+
description = "The soft memory limit for the task and container"
22+
}
23+
624
variable "profile" {
725
type = string
826
default = "default"

0 commit comments

Comments
 (0)