ecs-service

Category Compute
Latest Version 0.1.0current

Terraform module for ecs-service on aws

Add to your Terraform configuration
module "ecs_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "0.1.0"

  # Required inputs
  service_name = "..."
  cluster_arn = "..."
  task_definition_arn = "..."
}

Overview

The ecs-service module deploys AWS ECS services with production-ready defaults including:

  • Automatic load balancer registration with ALB/NLB
  • Auto-scaling policies based on CPU, memory, or custom metrics
  • AWS Cloud Map service discovery integration
  • Blue/green deployment support with CodeDeploy
  • Rolling deployment with configurable health checks

Category: Compute Provider: AWS Latest Version: 2.0.0

Quick Start

module "web_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "web-app"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.web.arn
  desired_count       = 2
}

Key Features

Load Balancer Integration

Automatically register tasks with an Application Load Balancer:

module "api_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "api-backend"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.api.arn
  desired_count       = 3

  load_balancer = {
    target_group_arn = aws_lb_target_group.api.arn
    container_name   = "api"
    container_port   = 8080
  }
}

Auto-Scaling

Scale your service based on demand:

module "scalable_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "worker"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.worker.arn
  desired_count       = 2

  autoscaling = {
    min_capacity       = 2
    max_capacity       = 10
    target_cpu_percent = 70
  }
}

Service Discovery

Enable service-to-service communication with AWS Cloud Map:

module "backend_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "backend"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.backend.arn
  desired_count       = 2

  service_discovery = {
    namespace_id = aws_service_discovery_private_dns_namespace.main.id
    dns_name     = "backend"
  }
}

Documentation

Registry

View specification on Registry

Inputs

service_name Required
string

The name of the ECS service. Must be unique within your ECS cluster.

cluster_arn Required
string

ARN of the ECS cluster. Reference from another resource or data source.

string

ARN of the task definition. Reference from aws_ecs_task_definition resource.

number Default: 1

Desired number of tasks. Minimum 1 for development, 2+ for high availability in production.

Outputs

service_arn

ARN of the ECS service. Use this for IAM policies and service discovery.

service_name

Name of the ECS service. Matches the input service_name.