Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run containerized applications with Amazon ECS. Define tasks and services, deploy on Fargate for serverless containers or EC2 for full control. Configure load balancing, auto-scaling, and service discovery for production workloads.
.claude/skills/terminalskills-aws-ecs/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✓→✓ | = Same ✓ | 91% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 52% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 298% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 64% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 102% | 0% |
Amazon Elastic Container Service (ECS) is a fully managed container orchestration service. Run Docker containers on Fargate (serverless) or self-managed EC2 instances with deep AWS integration.
bash# Create a Fargate cluster aws ecs create-cluster --cluster-name app-prod --capacity-providers FARGATE FARGATE_SPOT
json// task-definition.json — web application task { "family": "web-app", "networkMode": "awsvpc", "requiresCompatibilities": ["FARGATE"], "cpu": "512", "memory": "1024", "executionRoleArn": "arn:aws:iam::123456789:role/ecsTaskExecutionRole", "taskRoleArn": "arn:aws:iam::123456789:role/ecsTaskRole", "containerDefinitions": [ { "name": "web", "image": "123456789.dkr.ecr.us-east-1.amazonaws.com/web-app:latest", "portMappings": [{"containerPort": 8080, "protocol": "tcp"}], "environment": [ {"name": "NODE_ENV", "value": "production"} ], "secrets": [ {"name": "DATABASE_URL", "valueFrom": "arn:aws:secretsmanager:us-east-1:123456789:secret:db-url"} ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/web-app", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "web" } }, "healthCheck": { "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"], "interval": 30, "timeout": 5, "retries": 3 } } ] }
bash# Register task definition aws ecs register-task-definition --cli-input-json file://task-definition.json
bash# Create a service with ALB and Fargate aws ecs create-service \ --cluster app-prod \ --service-name web-app \ --task-definition web-app:1 \ --desired-count 3 \ --launch-type FARGATE \ --network-configuration '{ "awsvpcConfiguration": { "subnets": ["subnet-aaa", "subnet-bbb"], "securityGroups": ["sg-0123456789abcdef0"], "assignPublicIp": "DISABLED" } }' \ --load-balancers '[{ "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/web-tg/abc123", "containerName": "web", "containerPort": 8080 }]' \ --deployment-configuration '{ "maximumPercent": 200, "minimumHealthyPercent": 100, "deploymentCircuitBreaker": {"enable": true, "rollback": true} }'
bash# Update service (deploy new image) aws ecs update-service \ --cluster app-prod \ --service web-app \ --task-definition web-app:2 \ --force-new-deployment
bash# Scale service aws ecs update-service \ --cluster app-prod \ --service web-app \ --desired-count 5
bash# Register scalable target aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --resource-id service/app-prod/web-app \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 2 \ --max-capacity 20
bash# Target tracking on CPU aws application-autoscaling put-scaling-policy \ --service-namespace ecs \ --resource-id service/app-prod/web-app \ --scalable-dimension ecs:service:DesiredCount \ --policy-name cpu-scaling \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization"}, "TargetValue": 70.0, "ScaleInCooldown": 300, "ScaleOutCooldown": 60 }'
bash# Create repository aws ecr create-repository --repository-name web-app --image-scanning-configuration scanOnPush=true
bash# Login, build, push aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com docker build -t web-app . docker tag web-app:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/web-app:latest docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/web-app:latest
bash# Run a migration task aws ecs run-task \ --cluster app-prod \ --task-definition db-migrate:1 \ --launch-type FARGATE \ --network-configuration '{ "awsvpcConfiguration": { "subnets": ["subnet-aaa"], "securityGroups": ["sg-0123456789abcdef0"], "assignPublicIp": "DISABLED" } }' \ --overrides '{ "containerOverrides": [{"name": "migrate", "command": ["npm", "run", "migrate"]}] }'
bash# List running tasks aws ecs list-tasks --cluster app-prod --service-name web-app --desired-status RUNNING
bash# View task logs aws logs tail /ecs/web-app --follow --since 1h
latest for reproducibility| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,733 | 5,747 | -61% | 1 | 1 | 0% | 3,209 | 2,923 | -9% | 0 | 0 | — |
case-02 | pass→pass | 8,950 | 6,510 | -27% | 1 | 1 | 0% | 1,652 | 3,159 | +91% | 0 | 0 | — |
case-03 | pass→pass | 10,366 | 7,029 | -32% | 1 | 1 | 0% | 2,023 | 3,075 | +52% | 0 | 0 | — |
case-04 | pass→pass | 3,579 | 2,915 | -19% | 1 | 1 | 0% | 546 | 2,175 | +298% | 0 | 0 | — |
case-05 | pass→pass | 9,124 | 4,904 | -46% | 1 | 1 | 0% | 1,629 | 2,678 | +64% | 0 | 0 | — |
case-06 | pass→pass | 6,083 | 3,968 | -35% | 1 | 1 | 0% | 1,219 | 2,463 | +102% | 0 | 0 | — |
case-07 | pass→pass | 3,154 | 4,509 | +43% | 1 | 1 | 0% | 657 | 2,561 | +290% | 0 | 0 | — |
case-08 | pass→pass | 9,922 | 4,420 | -55% | 1 | 1 | 0% | 1,784 | 2,643 | +48% | 0 | 0 | — |
case-09 | pass→pass | 7,202 | 3,432 | -52% | 1 | 1 | 0% | 1,383 | 2,446 | +77% | 0 | 0 | — |
case-10 | pass→pass | 2,960 | 2,322 | -22% | 1 | 1 | 0% | 437 | 2,046 | +368% | 0 | 0 | — |
case-11 | pass→pass | 9,843 | 5,122 | -48% | 1 | 1 | 0% | 1,882 | 2,720 | +45% | 0 | 0 | — |
case-12 | pass→pass | 6,626 | 3,681 | -44% | 1 | 1 | 0% | 1,072 | 2,474 | +131% | 0 | 0 | — |
case-13 | pass→pass | 3,873 | 2,354 | -39% | 1 | 1 | 0% | 825 | 2,225 | +170% | 0 | 0 | — |
case-14 | pass→pass | 5,028 | 2,942 | -41% | 1 | 1 | 0% | 1,060 | 2,300 | +117% | 0 | 0 | — |
case-15 | pass→pass | 3,034 | 2,143 | -29% | 1 | 1 | 0% | 527 | 2,134 | +305% | 0 | 0 | — |
case-16 | pass→pass | 7,348 | 6,194 | -16% | 1 | 1 | 0% | 1,452 | 2,923 | +101% | 0 | 0 | — |
case-17 | pass→pass | 7,260 | 3,337 | -54% | 1 | 1 | 0% | 1,388 | 2,476 | +78% | 0 | 0 | — |
case-18 | pass→pass | 9,047 | 7,226 | -20% | 1 | 1 | 0% | 2,031 | 3,187 | +57% | 0 | 0 | — |
case-19 | pass→pass | 6,205 | 4,921 | -21% | 1 | 1 | 0% | 1,186 | 2,810 | +137% | 0 | 0 | — |
case-20 | pass→pass | 4,807 | 3,130 | -35% | 1 | 1 | 0% | 923 | 2,295 | +149% | 0 | 0 | — |
case-21 | pass→pass | 8,345 | 5,055 | -39% | 1 | 1 | 0% | 1,747 | 2,662 | +52% | 0 | 0 | — |
case-22 | pass→pass | 7,640 | 5,252 | -31% | 1 | 1 | 0% | 1,493 | 2,862 | +92% | 0 | 0 | — |
case-23 | pass→pass | 5,696 | 4,009 | -30% | 1 | 1 | 0% | 1,133 | 2,525 | +123% | 0 | 0 | — |
case-24 | pass→pass | 11,359 | 10,323 | -9% | 1 | 1 | 0% | 2,322 | 4,019 | +73% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 24 comparable cases.
Other measured skills in the registry, with their headline benchmark lift.