Skip to main content

AWS ECS Provider

A Story of Labels & Elastic Containers Attach labels to your AWS ECS tasks and let Traefik automatically discover and route traffic. The ECS provider integrates with Amazon Elastic Container Service for seamless service discovery in AWS.

Quick Start

1

Set Up IAM Permissions

Create an IAM policy for Traefik:
ecs-policy.json
Attach to Traefik’s task role or instance role.
2

Enable ECS Provider

3

Add Labels to Task Definition

task-definition.json
4

Deploy Task

Traefik automatically discovers the task!

How It Works

The ECS provider:
  1. Polls ECS clusters at configured intervals
  2. Lists running tasks in specified clusters
  3. Reads task labels from container definitions
  4. Discovers task IPs from ENIs or container instances
  5. Creates routes dynamically based on labels
  6. Updates on changes when tasks start/stop

Provider Configuration

autoDiscoverClusters

Default: false Automatically discover all ECS clusters:
When false, only configured clusters are watched.

clusters

Default: ["default"] Specific clusters to watch:
Ignored when autoDiscoverClusters: true.

region

Optional, Default: Auto-detected AWS region:
Auto-detected from:
  • EC2 metadata (for EC2 tasks)
  • AWS_REGION environment variable (for Fargate)

accessKeyID / secretAccessKey

Optional, Default: Auto-detected Explicit AWS credentials:
Prefer IAM roles over hardcoded credentials. Credentials are auto-detected from:
  • Environment variables
  • Shared credentials file (~/.aws/credentials)
  • EC2 instance role
  • ECS task role

exposedByDefault

Default: true Expose all tasks by default:

constraints

Optional, Default: "" Filter tasks by labels:

healthyTasksOnly

Default: false Only discover healthy tasks:
Tasks must have HEALTHY health status.

refreshSeconds

Default: 15 Polling interval in seconds:

defaultRule

Default: Host(`{{ normalize .Name }}`) Default routing rule:

ecsAnywhere

Default: false Enable ECS Anywhere support:
Requires ssm:DescribeInstanceInformation IAM permission.

Task Definition Examples

Basic Web Service

Service with Middleware

Multiple Containers per Task

Complete Setup Example

Network Modes

AWSVPC (Fargate / EC2)

Tasks get their own ENI with private IP:
Traefik connects to task’s private IP.

Bridge (EC2 only)

Port mapping with dynamic host ports:
Traefik discovers the host:port mapping.

Host (EC2 only)

Direct host networking:

Advanced Patterns

Blue-Green Deployments

Canary Deployments

Multi-Region Setup

Troubleshooting

Tasks Not Discovered

1

Check IAM Permissions

2

Verify exposedByDefault

If false, ensure traefik.enable=true label exists.
3

Check Constraints

Ensure task labels match configured constraints.
4

Review Traefik Logs

Network Connectivity Issues

  • AWSVPC: Verify security groups allow traffic between Traefik and tasks
  • Bridge: Check container instance security groups
  • Fargate: Ensure tasks are in same VPC/subnets

Port Detection

Explicitly set port if auto-detection fails:

Best Practices

1

Use Task Roles

Prefer IAM task roles over access keys for security.
2

Enable Health Checks

Configure container health checks for reliable routing.
3

Set exposedByDefault=false

Explicitly enable Traefik per service for better control.
4

Use Constraints

Filter by environment, region, or team to organize services.
5

Monitor Refresh Interval

Adjust refreshSeconds based on deployment frequency.

Next Steps

ECS Routing

Detailed ECS label configuration

AWS ECS Docs

Official AWS ECS documentation