go-ethereum/cicd/terraform/module/region/ecs.tf

96 lines
No EOL
3 KiB
HCL

data template_file container_definition {
for_each = var.nodeKeys
template = "${file("${path.module}/container-definition.tpl")}"
vars = {
image_environment = "${lookup(each.value, "imageEnvironment", "devnet")}"
image_tag = "${lookup(each.value, "imageTag", "latest")}"
node_name = "${each.key}"
private_key = "${each.value.pk}"
cloudwatch_group = "tf-${each.key}"
cloudwatch_region = "${var.region}"
log_level = "${lookup(each.value, "logLevel", "${var.logLevel}")}"
chain_network = var.network
}
}
resource "aws_ecs_task_definition" "task_definition_group" {
for_each = var.nodeKeys
family = "${var.network}-${each.key}"
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
container_definitions = data.template_file.container_definition[each.key].rendered
execution_role_arn = var.xdc_ecs_tasks_execution_role_arn
task_role_arn = var.xdc_ecs_tasks_execution_role_arn
# New nodes will consume a lot more CPU usage than existing nodes.
# This is due to sync is resource heavy. Recommending set to below if doing sync:
# CPU = 2048, Memory = 4096
# Please set it back to cpu 256 and memory of 2048 after sync is done to save the cost
# cpu = 256
# memory = 2048
cpu = var.cpu
memory = var.memory
volume {
name = "efs"
efs_volume_configuration {
file_system_id = aws_efs_file_system.efs[each.key].id
root_directory = "/"
transit_encryption = "ENABLED"
authorization_config {
access_point_id = aws_efs_access_point.efs_access_point[each.key].id
iam = "DISABLED"
}
}
}
tags = {
Name = "Tf${var.network}Ecs-${each.key}"
}
}
data "aws_ecs_task_definition" "ecs_task_definition" {
for_each = var.nodeKeys
task_definition = aws_ecs_task_definition.task_definition_group[each.key].family
}
# ECS cluster
resource "aws_ecs_cluster" "ecs_cluster" {
name = "${var.network}-xdcnode-cluster"
tags = {
Name = "Tf${var.network}EcsCluster"
}
}
resource "aws_ecs_service" "ecs_service" {
for_each = var.enableFixedIp ? {} : var.nodeKeys
name = "ecs-service-${each.key}"
cluster = aws_ecs_cluster.ecs_cluster.id
task_definition = "${aws_ecs_task_definition.task_definition_group[each.key].family}:${max(aws_ecs_task_definition.task_definition_group[each.key].revision, data.aws_ecs_task_definition.ecs_task_definition[each.key].revision)}"
launch_type = "FARGATE"
scheduling_strategy = "REPLICA"
desired_count = 1
force_new_deployment = true
deployment_minimum_healthy_percent = 0
deployment_maximum_percent = 100
network_configuration {
subnets = [aws_subnet.subnet.id]
assign_public_ip = true
security_groups = [
aws_default_security_group.xdcnode_security_group.id
]
}
deployment_circuit_breaker {
enable = true
rollback = false
}
tags = {
Name = "Tf${var.network}EcsService-${each.key}"
}
}