Page MenuHomePhabricator

D12815.diff
No OneTemporary

D12815.diff

diff --git a/services/terraform/self-host/landing.tf b/services/terraform/self-host/landing.tf
new file mode 100644
--- /dev/null
+++ b/services/terraform/self-host/landing.tf
@@ -0,0 +1,169 @@
+locals {
+ landing_container_name = "landing"
+
+ landing_run_server_config = jsonencode({
+ runKeyserver = false
+ runWebApp = false
+ runLanding = true
+ })
+
+ landing_environment_vars = merge(local.shared_environment_vars,
+ {
+ "COMM_NODE_ROLE" = "landing",
+ "COMM_JSONCONFIG_facts_run_server_config" = local.landing_run_server_config
+ })
+
+ landing_environment = [
+ for name, value in local.landing_environment_vars : {
+ name = name
+ value = value
+ }
+ ]
+}
+
+resource "aws_cloudwatch_log_group" "landing_service" {
+ name = "/ecs/landing-task-def"
+ retention_in_days = 7
+}
+
+resource "aws_ecs_task_definition" "landing_service" {
+ network_mode = "awsvpc"
+ family = "landing-task-def"
+ requires_compatibilities = ["FARGATE"]
+ task_role_arn = aws_iam_role.ecs_task_role.arn
+ execution_role_arn = aws_iam_role.ecs_task_execution.arn
+ cpu = "2048"
+ memory = "4096"
+
+ ephemeral_storage {
+ size_in_gib = 40
+ }
+
+ container_definitions = jsonencode([
+ {
+ name = local.landing_container_name
+ image = local.keyserver_service_server_image
+ essential = true
+ portMappings = [
+ {
+ name = "landing-port"
+ containerPort = 3000
+ hostPort = 3000,
+ protocol = "tcp"
+ },
+
+ ]
+ environment = local.landing_environment
+ logConfiguration = {
+ "logDriver" = "awslogs"
+ "options" = {
+ "awslogs-create-group" = "true"
+ "awslogs-group" = aws_cloudwatch_log_group.landing_service.name
+ "awslogs-stream-prefix" = "ecs"
+ "awslogs-region" = "${var.region}"
+ }
+ }
+ linuxParameters = {
+ initProcessEnabled = true
+ }
+ }
+ ])
+
+ runtime_platform {
+ cpu_architecture = "ARM64"
+ operating_system_family = "LINUX"
+ }
+
+ skip_destroy = false
+}
+
+resource "aws_ecs_service" "landing_service" {
+ depends_on = [null_resource.create_comm_database]
+
+ name = "landing-service"
+ cluster = aws_ecs_cluster.keyserver_cluster.id
+ task_definition = aws_ecs_task_definition.landing_service.arn
+ launch_type = "FARGATE"
+ enable_execute_command = true
+ enable_ecs_managed_tags = true
+ force_new_deployment = true
+ desired_count = 2
+ deployment_maximum_percent = 100
+ deployment_minimum_healthy_percent = 0
+
+
+ network_configuration {
+ subnets = local.vpc_subnets
+ security_groups = [aws_security_group.keyserver_service.id]
+ assign_public_ip = true
+ }
+
+ load_balancer {
+ target_group_arn = aws_lb_target_group.landing_service.arn
+ container_name = local.landing_container_name
+ container_port = 3000
+ }
+
+ deployment_circuit_breaker {
+ enable = true
+ rollback = true
+ }
+}
+
+resource "aws_lb_target_group" "landing_service" {
+ name = "landing-service-ecs-tg"
+ port = 3000
+ protocol = "HTTP"
+ vpc_id = local.vpc_id
+
+ # "awsvpc" network mode requires target type set to ip
+ target_type = "ip"
+
+ stickiness {
+ type = "lb_cookie"
+ cookie_duration = 86500
+ enabled = true
+ }
+
+ health_check {
+ enabled = true
+ healthy_threshold = 2
+ unhealthy_threshold = 3
+
+ protocol = "HTTP"
+ path = "/health"
+ matcher = "200-299"
+ }
+}
+
+resource "aws_lb" "landing_service" {
+ load_balancer_type = "application"
+ name = "landing-service-lb"
+ security_groups = [aws_security_group.lb_sg.id]
+
+ internal = false
+ subnets = local.vpc_subnets
+}
+
+resource "aws_lb_listener" "landing_service" {
+ load_balancer_arn = aws_lb.landing_service.arn
+ port = "443"
+ protocol = "HTTPS"
+ ssl_policy = "ELBSecurityPolicy-2016-08"
+ certificate_arn = data.aws_acm_certificate.landing_service.arn
+
+ default_action {
+ type = "forward"
+ target_group_arn = aws_lb_target_group.landing_service.arn
+ }
+
+ lifecycle {
+ ignore_changes = [default_action[0].forward[0].stickiness[0].duration]
+ replace_triggered_by = [aws_lb_target_group.landing_service]
+ }
+}
+
+data "aws_acm_certificate" "landing_service" {
+ domain = var.landing_domain_name
+ statuses = ["ISSUED"]
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 28, 4:34 AM (7 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2723679
Default Alt Text
D12815.diff (4 KB)

Event Timeline