{"id":"7fd20d7c-f9a9-40b7-bfcd-a7b2331dfd13","shortId":"wNg4T9","kind":"skill","title":"ecs","tagline":"AWS ECS container orchestration for running Docker containers. Use when deploying containerized applications, configuring task definitions, setting up services, managing clusters, or troubleshooting container issues.","description":"# AWS ECS\n\nAmazon Elastic Container Service (ECS) is a fully managed container orchestration service. Run containers on AWS Fargate (serverless) or EC2 instances.\n\n## Table of Contents\n\n- [Core Concepts](#core-concepts)\n- [Common Patterns](#common-patterns)\n- [CLI Reference](#cli-reference)\n- [Best Practices](#best-practices)\n- [Troubleshooting](#troubleshooting)\n- [References](#references)\n\n## Core Concepts\n\n### Cluster\n\nLogical grouping of tasks or services. Can contain Fargate tasks, EC2 instances, or both.\n\n### Task Definition\n\nBlueprint for your application. Defines containers, resources, networking, and IAM roles.\n\n### Task\n\nRunning instance of a task definition. Can run standalone or as part of a service.\n\n### Service\n\nMaintains desired count of tasks. Handles deployments, load balancing, and auto scaling.\n\n### Launch Types\n\n| Type | Description | Use Case |\n|------|-------------|----------|\n| **Fargate** | Serverless, pay per task | Most workloads |\n| **EC2** | Self-managed instances | GPU, Windows, specific requirements |\n\n## Common Patterns\n\n### Create a Fargate Cluster\n\n**AWS CLI:**\n\n```bash\n# Create cluster\naws ecs create-cluster --cluster-name my-cluster\n\n# With capacity providers\naws ecs create-cluster \\\n  --cluster-name my-cluster \\\n  --capacity-providers FARGATE FARGATE_SPOT \\\n  --default-capacity-provider-strategy \\\n    capacityProvider=FARGATE,weight=1 \\\n    capacityProvider=FARGATE_SPOT,weight=1\n```\n\n### Register Task Definition\n\n```bash\ncat > task-definition.json << 'EOF'\n{\n  \"family\": \"web-app\",\n  \"networkMode\": \"awsvpc\",\n  \"requiresCompatibilities\": [\"FARGATE\"],\n  \"cpu\": \"256\",\n  \"memory\": \"512\",\n  \"executionRoleArn\": \"arn:aws:iam::123456789012:role/ecsTaskExecutionRole\",\n  \"taskRoleArn\": \"arn:aws:iam::123456789012:role/ecsTaskRole\",\n  \"containerDefinitions\": [\n    {\n      \"name\": \"web\",\n      \"image\": \"123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest\",\n      \"portMappings\": [\n        {\n          \"containerPort\": 8080,\n          \"protocol\": \"tcp\"\n        }\n      ],\n      \"environment\": [\n        {\"name\": \"NODE_ENV\", \"value\": \"production\"}\n      ],\n      \"secrets\": [\n        {\n          \"name\": \"DB_PASSWORD\",\n          \"valueFrom\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:db-password\"\n        }\n      ],\n      \"logConfiguration\": {\n        \"logDriver\": \"awslogs\",\n        \"options\": {\n          \"awslogs-group\": \"/ecs/web-app\",\n          \"awslogs-region\": \"us-east-1\",\n          \"awslogs-stream-prefix\": \"ecs\",\n          \"mode\": \"non-blocking\",\n          \"max-buffer-size\": \"25m\"\n        }\n      },\n      \"healthCheck\": {\n        \"command\": [\"CMD-SHELL\", \"curl -f http://localhost:8080/health || exit 1\"],\n        \"interval\": 30,\n        \"timeout\": 5,\n        \"retries\": 3,\n        \"startPeriod\": 60\n      }\n    }\n  ]\n}\nEOF\n\naws ecs register-task-definition --cli-input-json file://task-definition.json\n```\n\n### Create Service with Load Balancer\n\n```bash\naws ecs create-service \\\n  --cluster my-cluster \\\n  --service-name web-service \\\n  --task-definition web-app:1 \\\n  --desired-count 2 \\\n  --launch-type FARGATE \\\n  --network-configuration \"awsvpcConfiguration={\n    subnets=[subnet-12345678,subnet-87654321],\n    securityGroups=[sg-12345678],\n    assignPublicIp=DISABLED\n  }\" \\\n  --load-balancers \"targetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/web-tg/1234567890123456,containerName=web,containerPort=8080\" \\\n  --health-check-grace-period-seconds 60 \\\n  --deployment-configuration \"deploymentCircuitBreaker={enable=true,rollback=true}\"\n```\n\n### Run Standalone Task\n\n```bash\naws ecs run-task \\\n  --cluster my-cluster \\\n  --task-definition my-batch-job:1 \\\n  --launch-type FARGATE \\\n  --network-configuration \"awsvpcConfiguration={\n    subnets=[subnet-12345678],\n    securityGroups=[sg-12345678],\n    assignPublicIp=ENABLED\n  }\"\n```\n\n### Update Service (Deploy New Image)\n\n```bash\n# Register new task definition with updated image\naws ecs register-task-definition --cli-input-json file://task-definition.json\n\n# Update service to use new version\naws ecs update-service \\\n  --cluster my-cluster \\\n  --service web-service \\\n  --task-definition web-app:2 \\\n  --force-new-deployment\n```\n\n### Fargate Spot with SQS-Based Scaling\n\nUse `FARGATE_SPOT` for batch/queue workloads to cut costs ~70%. Always include a fallback to regular `FARGATE`.\n\n```bash\n# Create service with Spot + fallback\naws ecs create-service \\\n  --cluster batch-cluster \\\n  --service-name queue-processor \\\n  --task-definition my-processor:1 \\\n  --desired-count 0 \\\n  --capacity-provider-strategy \\\n    capacityProvider=FARGATE_SPOT,weight=4,base=0 \\\n    capacityProvider=FARGATE,weight=1,base=1 \\\n  --network-configuration \"awsvpcConfiguration={\n    subnets=[subnet-12345678],\n    securityGroups=[sg-12345678],\n    assignPublicIp=DISABLED\n  }\"\n\n# Register scalable target (scale to zero when queue empty)\naws application-autoscaling register-scalable-target \\\n  --service-namespace ecs \\\n  --resource-id service/batch-cluster/queue-processor \\\n  --scalable-dimension ecs:service:DesiredCount \\\n  --min-capacity 0 \\\n  --max-capacity 20\n\n# Scale-out alarm: messages > 100\naws cloudwatch put-metric-alarm \\\n  --alarm-name queue-scale-out \\\n  --metric-name ApproximateNumberOfMessagesVisible \\\n  --namespace AWS/SQS \\\n  --dimensions Name=QueueName,Value=my-queue \\\n  --statistic Average \\\n  --period 60 \\\n  --evaluation-periods 1 \\\n  --threshold 100 \\\n  --comparison-operator GreaterThanThreshold \\\n  --alarm-actions <scale-out-policy-arn>\n\n# Scale-in alarm: queue empty for 3 periods (conservative to avoid flapping)\naws cloudwatch put-metric-alarm \\\n  --alarm-name queue-scale-in \\\n  --metric-name ApproximateNumberOfMessagesVisible \\\n  --namespace AWS/SQS \\\n  --dimensions Name=QueueName,Value=my-queue \\\n  --statistic Average \\\n  --period 60 \\\n  --evaluation-periods 3 \\\n  --threshold 0 \\\n  --comparison-operator LessThanOrEqualToThreshold \\\n  --alarm-actions <scale-in-policy-arn>\n```\n\n**Fargate Spot interruption handling:** Spot tasks receive a SIGTERM 2 minutes before termination. Catch it in your application for graceful shutdown. For SQS consumers, call `ChangeMessageVisibility` on in-flight messages so they return to the queue rather than timing out.\n\n### Auto Scaling\n\n```bash\n# Register scalable target\naws application-autoscaling register-scalable-target \\\n  --service-namespace ecs \\\n  --resource-id service/my-cluster/web-service \\\n  --scalable-dimension ecs:service:DesiredCount \\\n  --min-capacity 2 \\\n  --max-capacity 10\n\n# Target tracking policy\naws application-autoscaling put-scaling-policy \\\n  --service-namespace ecs \\\n  --resource-id service/my-cluster/web-service \\\n  --scalable-dimension ecs:service:DesiredCount \\\n  --policy-name cpu-target-tracking \\\n  --policy-type TargetTrackingScaling \\\n  --target-tracking-scaling-policy-configuration '{\n    \"TargetValue\": 70.0,\n    \"PredefinedMetricSpecification\": {\n      \"PredefinedMetricType\": \"ECSServiceAverageCPUUtilization\"\n    },\n    \"ScaleOutCooldown\": 60,\n    \"ScaleInCooldown\": 120\n  }'\n```\n\n## CLI Reference\n\n### Cluster Management\n\n| Command | Description |\n|---------|-------------|\n| `aws ecs create-cluster` | Create cluster |\n| `aws ecs describe-clusters` | Get cluster details |\n| `aws ecs list-clusters` | List clusters |\n| `aws ecs delete-cluster` | Delete cluster |\n\n### Task Definitions\n\n| Command | Description |\n|---------|-------------|\n| `aws ecs register-task-definition` | Create task definition |\n| `aws ecs describe-task-definition` | Get task definition |\n| `aws ecs list-task-definitions` | List task definitions |\n| `aws ecs deregister-task-definition` | Deregister version |\n\n### Services\n\n| Command | Description |\n|---------|-------------|\n| `aws ecs create-service` | Create service |\n| `aws ecs update-service` | Update service |\n| `aws ecs describe-services` | Get service details |\n| `aws ecs delete-service` | Delete service |\n\n### Tasks\n\n| Command | Description |\n|---------|-------------|\n| `aws ecs run-task` | Run standalone task |\n| `aws ecs stop-task` | Stop running task |\n| `aws ecs describe-tasks` | Get task details |\n| `aws ecs list-tasks` | List tasks |\n\n## Best Practices\n\n### Security\n\n- **Use task roles** for AWS API access (not access keys)\n- **Use execution roles** for ECR/Secrets access\n- **Store secrets in Secrets Manager** or Parameter Store\n- **Use private subnets** with NAT gateway\n- **Enable CloudTrail** for API auditing\n\n### Performance\n\n- **Right-size CPU/memory** — monitor and adjust\n- **Use Fargate Spot** for fault-tolerant workloads (70% savings)\n- **Enable container insights** for monitoring\n- **Use service discovery** for internal communication\n\n### Reliability\n\n- **Deploy across multiple AZs**\n- **Configure health checks** properly\n- **Set appropriate deregistration delay**\n- **Use circuit breaker** for deployments\n\n```bash\naws ecs update-service \\\n  --cluster my-cluster \\\n  --service web-service \\\n  --deployment-configuration '{\n    \"deploymentCircuitBreaker\": {\n      \"enable\": true,\n      \"rollback\": true\n    }\n  }'\n```\n\n### Cost Optimization\n\n- **Use Fargate Spot** for batch workloads\n- **Right-size task resources**\n- **Scale to zero** when not needed\n- **Use capacity providers** for mixed Fargate/Spot\n\n## Troubleshooting\n\n### Task Fails to Start\n\n**Check:**\n\n```bash\n# View stopped tasks\naws ecs describe-tasks \\\n  --cluster my-cluster \\\n  --tasks $(aws ecs list-tasks --cluster my-cluster --desired-status STOPPED --query 'taskArns[0]' --output text)\n```\n\n**Common causes:**\n- Image not found (ECR permissions)\n- Secrets access denied\n- Network configuration (subnets, security groups)\n- Resource limits exceeded\n\n### Container Keeps Restarting\n\n**Debug:**\n\n```bash\n# Check CloudWatch logs\naws logs get-log-events \\\n  --log-group-name /ecs/web-app \\\n  --log-stream-name \"ecs/web/abc123\"\n\n# Check task details\naws ecs describe-tasks \\\n  --cluster my-cluster \\\n  --tasks task-arn \\\n  --query 'tasks[0].containers[0].{reason:reason,exitCode:exitCode}'\n```\n\n**Causes:**\n- Health check failing\n- Application crashing\n- Out of memory\n\n### Live Debugging with ECS Exec\n\nConnect directly to a running container without SSH. Requires `enableExecuteCommand: true` on the service and the SSM agent in your container image (included in most base images).\n\n```bash\n# Enable on existing service\naws ecs update-service \\\n  --cluster my-cluster \\\n  --service web-service \\\n  --enable-execute-command\n\n# Get a shell in a running task\nTASK_ARN=$(aws ecs list-tasks --cluster my-cluster --service-name web-service \\\n  --query 'taskArns[0]' --output text)\n\naws ecs execute-command \\\n  --cluster my-cluster \\\n  --task $TASK_ARN \\\n  --container web \\\n  --interactive \\\n  --command \"/bin/sh\"\n```\n\n**Requirements:** Task role must have `ssmmessages:CreateControlChannel`, `ssmmessages:CreateDataChannel`, `ssmmessages:OpenControlChannel`, `ssmmessages:OpenDataChannel` permissions.\n\n### Service Stuck Deploying\n\n```bash\n# Check deployment status\naws ecs describe-services \\\n  --cluster my-cluster \\\n  --services web-service \\\n  --query 'services[0].deployments'\n\n# Check events\naws ecs describe-services \\\n  --cluster my-cluster \\\n  --services web-service \\\n  --query 'services[0].events[:5]'\n```\n\n**Causes:**\n- Health check failing on new tasks\n- Not enough capacity\n- Target group health checks failing\n\n### Cannot Pull Image from ECR\n\n**Check execution role has:**\n\n```json\n{\n  \"Effect\": \"Allow\",\n  \"Action\": [\n    \"ecr:GetAuthorizationToken\",\n    \"ecr:BatchCheckLayerAvailability\",\n    \"ecr:GetDownloadUrlForLayer\",\n    \"ecr:BatchGetImage\"\n  ],\n  \"Resource\": \"*\"\n}\n```\n\n**Also check:**\n- VPC endpoint for ECR (if private subnet)\n- NAT gateway (if private subnet)\n- Security group allows HTTPS outbound\n\n## References\n\n- [ECS Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/)\n- [ECS API Reference](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/)\n- [ECS CLI Reference](https://docs.aws.amazon.com/cli/latest/reference/ecs/)\n- [boto3 ECS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html)","tags":["ecs","aws","agent","skills","itsmostafa","agent-skills","agentic-ai","claude-code","claude-skills","codex","coding-agents"],"capabilities":["skill","source-itsmostafa","skill-ecs","topic-agent-skills","topic-agentic-ai","topic-aws","topic-claude-code","topic-claude-skills","topic-codex","topic-coding-agents"],"categories":["aws-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/itsmostafa/aws-agent-skills/ecs","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add itsmostafa/aws-agent-skills","source_repo":"https://github.com/itsmostafa/aws-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1100 github stars · SKILL.md body (12,089 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:53:11.512Z","embedding":null,"createdAt":"2026-04-18T21:55:40.886Z","updatedAt":"2026-05-18T18:53:11.512Z","lastSeenAt":"2026-05-18T18:53:11.512Z","tsv":"'-12345678':382,387,453,456,592,595 '-87654321':384 '/amazonecs/latest/apireference/)':1482 '/amazonecs/latest/developerguide/)':1476 '/bin/sh':1355 '/cli/latest/reference/ecs/)':1488 '/ecs/web-app':287,1216 '/my-app:latest':251 '/v1/documentation/api/latest/reference/services/ecs.html)':1493 '0':568,579,632,734,1177,1240,1242,1336,1392,1411 '1':208,213,274,294,319,367,400,442,564,583,585,676 '10':818 '100':642,678 '120':869 '123456789012':237,243,275,401 '123456789012.dkr.ecr.us-east-1.amazonaws.com':250 '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest':249 '2':371,508,751,814 '20':636 '256':230 '25m':308 '3':325,693,732 '30':321 '4':577 '5':323,1413 '512':232 '60':327,413,672,728,867 '70':529,1064 '70.0':862 '8080':254,406 '8080/health':317 'access':1019,1021,1028,1188 'across':1079 'action':685,741,1441 'adjust':1055 'agent':1278 'alarm':640,648,650,684,689,704,706,740 'alarm-act':683,739 'alarm-nam':649,705 'allow':1440,1467 'also':1451 'alway':530 'amazon':29 'api':1018,1046,1478 'app':224,366,507 'applic':14,99,609,759,791,824,1251 'application-autosc':608,790,823 'appropri':1087 'approximatenumberofmessagesvis':659,715 'arn':234,240,268,394,1237,1318,1350 'assignpublicip':388,457,596 'audit':1047 'auto':134,783 'autosc':610,792,825 'averag':670,726 'avoid':697 'aw':2,27,44,164,169,183,235,241,269,329,346,395,426,472,489,543,607,643,699,789,822,876,883,891,898,909,918,927,936,947,954,961,969,979,987,995,1003,1017,1096,1152,1162,1206,1225,1293,1319,1339,1377,1396 'aws/sqs':661,717 'awslog':282,285,289,296 'awslogs-group':284 'awslogs-region':288 'awslogs-stream-prefix':295 'awsvpc':226 'awsvpcconfigur':379,450,589 'az':1081 'balanc':132,344,392 'base':518,578,584,1286 'bash':166,217,345,425,464,537,785,1095,1148,1202,1288,1373 'batch':440,550,1123 'batch-clust':549 'batch/queue':524 'batchchecklayeravail':1445 'batchgetimag':1449 'best':68,71,1010 'best-practic':70 'block':303 'blueprint':96 'boto3':1489 'boto3.amazonaws.com':1492 'boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html)':1491 'breaker':1092 'buffer':306 'call':766 'cannot':1429 'capac':181,195,202,570,631,635,813,817,1137,1423 'capacity-provid':194 'capacity-provider-strategi':569 'capacityprovid':205,209,573,580 'case':141 'cat':218 'catch':755 'caus':1181,1247,1414 'changemessagevis':767 'check':409,1084,1147,1203,1222,1249,1374,1394,1416,1427,1434,1452 'circuit':1091 'cli':63,66,165,336,479,870,1484 'cli-input-json':335,478 'cli-refer':65 'cloudtrail':1044 'cloudwatch':644,700,1204 'cluster':22,79,163,168,173,175,179,187,189,193,351,354,431,434,494,497,548,551,872,880,882,887,889,895,897,902,904,1101,1104,1157,1160,1167,1170,1230,1233,1298,1301,1324,1327,1344,1347,1382,1385,1401,1404 'cluster-nam':174,188 'cmd':312 'cmd-shell':311 'command':310,874,907,945,977,1309,1343,1354 'common':58,61,158,1180 'common-pattern':60 'communic':1076 'comparison':680,736 'comparison-oper':679,735 'concept':54,57,78 'configur':15,378,416,449,588,860,1082,1111,1191 'connect':1261 'conserv':695 'consum':765 'contain':4,9,25,31,38,42,87,101,1067,1198,1241,1266,1281,1351 'container':13 'containerdefinit':245 'containernam':403 'containerport':253,405 'content':52 'core':53,56,77 'core-concept':55 'cost':528,1117 'count':126,370,567 'cpu':229,848 'cpu-target-track':847 'cpu/memory':1052 'crash':1252 'creat':160,167,172,186,340,349,538,546,879,881,915,950,952 'create-clust':171,185,878 'create-servic':348,545,949 'createcontrolchannel':1362 'createdatachannel':1364 'curl':314 'cut':527 'db':265,278 'db-password':277 'debug':1201,1257 'default':201 'default-capacity-provider-strategi':200 'defin':100 'definit':17,95,113,216,334,363,437,468,477,504,560,906,914,917,923,926,932,935,941 'delay':1089 'delet':901,903,972,974 'delete-clust':900 'delete-servic':971 'deni':1189 'deploy':12,130,415,461,512,1078,1094,1110,1372,1375,1393 'deployment-configur':414,1109 'deploymentcircuitbreak':417,1112 'deregist':939,942 'deregister-task-definit':938 'deregistr':1088 'describ':886,921,964,998,1155,1228,1380,1399 'describe-clust':885 'describe-servic':963,1379,1398 'describe-task':997,1154,1227 'describe-task-definit':920 'descript':139,875,908,946,978 'desir':125,369,566,1172 'desired-count':368,565 'desired-status':1171 'desiredcount':628,810,843 'detail':890,968,1002,1224 'develop':1472 'dimens':625,662,718,807,840 'direct':1262 'disabl':389,597 'discoveri':1073 'docker':8 'docs.aws.amazon.com':1475,1481,1487 'docs.aws.amazon.com/amazonecs/latest/apireference/)':1480 'docs.aws.amazon.com/amazonecs/latest/developerguide/)':1474 'docs.aws.amazon.com/cli/latest/reference/ecs/)':1486 'east':273,293,399 'ec':1,3,28,33,170,184,299,330,347,427,473,490,544,618,626,800,808,833,841,877,884,892,899,910,919,928,937,948,955,962,970,980,988,996,1004,1097,1153,1163,1226,1259,1294,1320,1340,1378,1397,1471,1477,1483,1490 'ec2':48,90,149 'ecr':1185,1433,1442,1444,1446,1448,1456 'ecr/secrets':1027 'ecs/web/abc123':1221 'ecsserviceaveragecpuutil':865 'effect':1439 'elast':30 'elasticloadbalanc':396 'empti':606,691 'enabl':418,458,1043,1066,1113,1289,1307 'enable-execute-command':1306 'enableexecutecommand':1270 'endpoint':1454 'enough':1422 'env':260 'environ':257 'eof':220,328 'evalu':674,730 'evaluation-period':673,729 'event':1211,1395,1412 'exceed':1197 'exec':1260 'execut':1024,1308,1342,1435 'execute-command':1341 'executionrolearn':233 'exist':1291 'exit':318 'exitcod':1245,1246 'f':315 'fail':1144,1250,1417,1428 'fallback':533,542 'famili':221 'fargat':45,88,142,162,197,198,206,210,228,375,446,513,521,536,574,581,742,1057,1120 'fargate/spot':1141 'fault':1061 'fault-toler':1060 'flap':698 'flight':771 'forc':510 'force-new-deploy':509 'found':1184 'fulli':36 'gateway':1042,1461 'get':888,924,966,1000,1209,1310 'get-log-ev':1208 'getauthorizationtoken':1443 'getdownloadurlforlay':1447 'gpu':154 'grace':410,761 'greaterthanthreshold':682 'group':81,286,1194,1214,1425,1466 'guid':1473 'handl':129,745 'health':408,1083,1248,1415,1426 'health-check-grace-period-second':407 'healthcheck':309 'https':1468 'iam':105,236,242 'id':621,803,836 'imag':248,463,471,1182,1282,1287,1431 'in-flight':769 'includ':531,1283 'input':337,480 'insight':1068 'instanc':49,91,109,153 'interact':1353 'intern':1075 'interrupt':744 'interv':320 'issu':26 'job':441 'json':338,481,1438 'keep':1199 'key':1022 'launch':136,373,444 'launch-typ':372,443 'lessthanorequaltothreshold':738 'limit':1196 'list':894,896,930,933,1006,1008,1165,1322 'list-clust':893 'list-task':1005,1164,1321 'list-task-definit':929 'live':1256 'load':131,343,391 'load-balanc':390 'localhost':316 'log':1205,1207,1210,1213,1218 'log-group-nam':1212 'log-stream-nam':1217 'logconfigur':280 'logdriv':281 'logic':80 'maintain':124 'manag':21,37,152,873,1033 'max':305,634,816 'max-buffer-s':304 'max-capac':633,815 'memori':231,1255 'messag':641,772 'metric':647,657,703,713 'metric-nam':656,712 'min':630,812 'min-capac':629,811 'minut':752 'mix':1140 'mode':300 'monitor':1053,1070 'multipl':1080 'must':1359 'my-batch-job':438 'my-clust':177,191,352,432,495,1102,1158,1168,1231,1299,1325,1345,1383,1402 'my-processor':561 'my-queu':666,722 'name':176,190,246,258,264,357,554,651,658,663,707,714,719,846,1215,1220,1330 'namespac':617,660,716,799,832 'nat':1041,1460 'need':1135 'network':103,377,448,587,1190 'network-configur':376,447,586 'networkmod':225 'new':462,466,487,511,1419 'node':259 'non':302 'non-block':301 'opencontrolchannel':1366 'opendatachannel':1368 'oper':681,737 'optim':1118 'option':283 'orchestr':5,39 'outbound':1469 'output':1178,1337 'paramet':1035 'part':119 'password':266,279 'pattern':59,62,159 'pay':144 'per':145 'perform':1048 'period':411,671,675,694,727,731 'permiss':1186,1369 'polici':821,829,845,852,859 'policy-nam':844 'policy-typ':851 'portmap':252 'practic':69,72,1011 'predefinedmetricspecif':863 'predefinedmetrictyp':864 'prefix':298 'privat':1038,1458,1463 'processor':557,563 'product':262 'proper':1085 'protocol':255 'provid':182,196,203,571,1138 'pull':1430 'put':646,702,827 'put-metric-alarm':645,701 'put-scaling-polici':826 'queri':1175,1238,1334,1390,1409 'queue':556,605,653,668,690,709,724,778 'queue-processor':555 'queue-scale-in':708 'queue-scale-out':652 'queuenam':664,720 'rather':779 'reason':1243,1244 'receiv':748 'refer':64,67,75,76,871,1470,1479,1485 'region':290 'regist':214,332,465,475,598,612,786,794,912 'register-scalable-target':611,793 'register-task-definit':331,474,911 'regular':535 'reliabl':1077 'requir':157,1269,1356 'requirescompat':227 'resourc':102,620,802,835,1129,1195,1450 'resource-id':619,801,834 'restart':1200 'retri':324 'return':775 'right':1050,1126 'right-siz':1049,1125 'role':106,1015,1025,1358,1436 'role/ecstaskexecutionrole':238 'role/ecstaskrole':244 'rollback':420,1115 'run':7,41,108,115,422,429,982,984,993,1265,1315 'run-task':428,981 'save':1065 'scalabl':599,613,624,787,795,806,839 'scalable-dimens':623,805,838 'scale':135,519,601,638,654,687,710,784,828,858,1130 'scale-in':686 'scale-out':637 'scaleincooldown':868 'scaleoutcooldown':866 'second':412 'secret':263,276,1030,1032,1187 'secretsmanag':270 'secur':1012,1193,1465 'securitygroup':385,454,593 'self':151 'self-manag':150 'serverless':46,143 'servic':20,32,40,85,122,123,341,350,356,360,460,484,493,498,501,539,547,553,616,627,798,809,831,842,944,951,953,958,960,965,967,973,975,1072,1100,1105,1108,1274,1292,1297,1302,1305,1329,1333,1370,1381,1386,1389,1391,1400,1405,1408,1410 'service-nam':355,552,1328 'service-namespac':615,797,830 'service/batch-cluster/queue-processor':622 'service/my-cluster/web-service':804,837 'set':18,1086 'sg':386,455,594 'shell':313,1312 'shutdown':762 'sigterm':750 'size':307,1051,1127 'skill' 'skill-ecs' 'source-itsmostafa' 'specif':156 'spot':199,211,514,522,541,575,743,746,1058,1121 'sqs':517,764 'sqs-base':516 'ssh':1268 'ssm':1277 'ssmmessag':1361,1363,1365,1367 'standalon':116,423,985 'start':1146 'startperiod':326 'statist':669,725 'status':1173,1376 'stop':990,992,1150,1174 'stop-task':989 'store':1029,1036 'strategi':204,572 'stream':297,1219 'stuck':1371 'subnet':380,381,383,451,452,590,591,1039,1192,1459,1464 'tabl':50 'target':600,614,788,796,819,849,856,1424 'target-tracking-scaling-policy-configur':855 'targetgroup/web-tg/1234567890123456':402 'targetgrouparn':393 'targettrackingsc':854 'targetvalu':861 'task':16,83,89,94,107,112,128,146,215,333,362,424,430,436,467,476,503,559,747,905,913,916,922,925,931,934,940,976,983,986,991,994,999,1001,1007,1009,1014,1128,1143,1151,1156,1161,1166,1223,1229,1234,1236,1239,1316,1317,1323,1348,1349,1357,1420 'task-arn':1235 'task-definit':361,435,502,558 'task-definition.json':219,339,482 'taskarn':1176,1335 'taskrolearn':239 'tcp':256 'termin':754 'text':1179,1338 'threshold':677,733 'time':781 'timeout':322 'toler':1062 'topic-agent-skills' 'topic-agentic-ai' 'topic-aws' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'topic-coding-agents' 'track':820,850,857 'troubleshoot':24,73,74,1142 'true':419,421,1114,1116,1271 'type':137,138,374,445,853 'updat':459,470,483,492,957,959,1099,1296 'update-servic':491,956,1098,1295 'us':272,292,398 'us-east':271,291,397 'use':10,140,486,520,1013,1023,1037,1056,1071,1090,1119,1136 'valu':261,665,721 'valuefrom':267 'version':488,943 'view':1149 'vpc':1453 'web':223,247,359,365,404,500,506,1107,1304,1332,1352,1388,1407 'web-app':222,364,505 'web-servic':358,499,1106,1303,1331,1387,1406 'weight':207,212,576,582 'window':155 'without':1267 'workload':148,525,1063,1124 'zero':603,1132","prices":[{"id":"744f6f03-c8d5-430f-94f4-cf38bd82c31e","listingId":"7fd20d7c-f9a9-40b7-bfcd-a7b2331dfd13","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"itsmostafa","category":"aws-agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:55:40.886Z"}],"sources":[{"listingId":"7fd20d7c-f9a9-40b7-bfcd-a7b2331dfd13","source":"github","sourceId":"itsmostafa/aws-agent-skills/ecs","sourceUrl":"https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/ecs","isPrimary":false,"firstSeenAt":"2026-04-18T21:55:40.886Z","lastSeenAt":"2026-05-18T18:53:11.512Z"},{"listingId":"7fd20d7c-f9a9-40b7-bfcd-a7b2331dfd13","source":"skills_sh","sourceId":"itsmostafa/aws-agent-skills/ecs","sourceUrl":"https://skills.sh/itsmostafa/aws-agent-skills/ecs","isPrimary":true,"firstSeenAt":"2026-05-07T20:44:19.054Z","lastSeenAt":"2026-05-07T22:42:44.330Z"}],"details":{"listingId":"7fd20d7c-f9a9-40b7-bfcd-a7b2331dfd13","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"itsmostafa","slug":"ecs","github":{"repo":"itsmostafa/aws-agent-skills","stars":1100,"topics":["agent-skills","agentic-ai","aws","claude-code","claude-skills","codex","coding-agents"],"license":"mit","html_url":"https://github.com/itsmostafa/aws-agent-skills","pushed_at":"2026-05-18T10:27:09Z","description":"AWS Skills for Agents","skill_md_sha":"b01be6f82749b0200e997fd7eb43035321c96770","skill_md_path":"skills/ecs/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/ecs"},"layout":"multi","source":"github","category":"aws-agent-skills","frontmatter":{"name":"ecs","description":"AWS ECS container orchestration for running Docker containers. Use when deploying containerized applications, configuring task definitions, setting up services, managing clusters, or troubleshooting container issues."},"skills_sh_url":"https://skills.sh/itsmostafa/aws-agent-skills/ecs"},"updatedAt":"2026-05-18T18:53:11.512Z"}}