К основному содержанию
скилл CX Codex

aws-ecs-fargate — скилл для Claude Code: что делает и как установить

Разворачивает контейнеры в Amazon ECS и Fargate. Помогает настроить описания задач, сервисы с балансировщиком нагрузки и автоматическое масштабирование.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill aws-ecs-fargate -a claude-code
Открыть на GitHub

Что делает aws-ecs-fargate

Скилл даёт готовые инструкции и команды AWS CLI для запуска контейнеров в Amazon ECS с бессерверным режимом Fargate или на инстансах EC2. Он помогает настроить кластер с провайдерами Fargate, загрузить образы в Amazon ECR, зарегистрировать task definition и поднять сервис за балансировщиком ALB. В шаблонах конфигураций учтена передача секретов из Secrets Manager и SSM.

Для обновлений скилл использует rolling update с механизмом автоматического отката через circuit breaker. Для отладки контейнеров при сбоях задач предусмотрен вызов aws ecs execute-command со входом в шелл.

Перед началом понадобятся AWS CLI v2, Docker, готовый VPC с подсетями и ALB, а также права IAM для ECS, ECR, CloudWatch Logs и PassRole. Без предварительно настроенной сети запустить сервис не выйдет.

Какие задачи решает

  • развернуть Docker-контейнеры в AWS Fargate без ручного управления серверами
  • настроить task definition с передачей секретов из Secrets Manager и SSM
  • запустить сервис ECS за балансировщиком ALB с защитой через circuit breaker
  • подключить автоматическое масштабирование сервиса по метрикам CloudWatch
  • подключиться к работающему контейнеру через execute-command для отладки

Примеры запросов агенту

  • Помоги настроить task definition для ECS Fargate с переменными окружения и логами в CloudWatch
  • Напиши команду aws ecs create-service для запуска контейнера за ALB с включённым circuit breaker
  • Как подключиться к работающему контейнеру в ECS через aws ecs execute-command?

Как установить aws-ecs-fargate

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill aws-ecs-fargate -a claude-code

2Вручную: положить файлы

~/.claude/skills/aws-ecs-fargate/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/aws-ecs-fargate/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

ai-agent-security Скилл для защиты агентов от промпт-инъекций, злоупотребления инструментами и утечки данных. Пригодится, когда агент ходит в прод, базы и облака. CX Codex +1 352установок zero-trust Скилл помогает развернуть архитектуру Zero Trust, настроить доступ на базе личности и микросегментацию. Он пригодится при отказе от классических VPN в пользу модели BeyondCorp. CX Codex +1 350установок object-storage Скилл для работы с объектным хранилищем: команды AWS CLI, бакет-политики, lifecycle-правила, версионирование и self-hosted MinIO. CX Codex +1 350установок mysql Скилл для работы с MySQL и MariaDB: установка, настройка InnoDB, бэкапы и репликация source-replica. Пригодится, когда агент ведёт базу в dev или prod. CX Codex +1 350установок openshift Скилл для работы с кластерами Red Hat OpenShift: проекты, маршруты, сборки и деплой приложений через oc. CX Codex +1 349установок gcp-networking Помогает разворачивать сети в Google Cloud: настраивать VPC, правила межсетевого экрана, Cloud NAT, балансировщики и Private Service Connect через CLI и Terraform. CX Codex +1 347установок iso27001-compliance Помогает развернуть систему менеджмента информационной безопасности по стандарту ISO/IEC 27001:2022. Пригодится при оценке рисков и подготовке к аудиту. CX Codex +1 346установок runbook-creation Помогает писать операционные runbook'и, регламенты и инструкции по восстановлению, по которым дежурный инженер сможет действовать без раздумий. CX Codex +1 346установок

Похожие

aws-ecs sanjeed5 Правило для Cursor с набором требований к контейнерам на AWS ECS: неизменяемые образы, секреты из Secrets Manager, логи в stdout. Пригодится, когда агент пишет Dockerfile и task definition. ★ 3 579звёзд репо aws-resource-health-diagnose официальный github Проверяет состояние ресурсов AWS, анализирует логи и метрики CloudWatch, а затем составляет пошаговый план устранения сбоев. 40установок aws-containers aws Разворачивает контейнеры на AWS: EKS, ECS, Fargate, ECR и Elastic Beanstalk. Пригодится при деплое, отладке и оптимизации контейнерных сервисов. CX Codex +1 9 400установок aws-observability aws Работает с метриками, логами и трассировками AWS через CloudWatch и CloudWatch Omni. Помогает расследовать сбои, писать запросы и настраивать оповещения. CX Codex +1 10 000установок dt-obs-aws Dynatrace Помогает анализировать инфраструктуру AWS через Dynatrace Smartscape и запросы DQL: инвентарь ресурсов, топологию VPC и расходы на облако. CX Codex +1 2 500установок aws-cost-operations zxkane Скилл помогает оценивать бюджет перед деплоем, анализировать аномалии в расходах AWS и настраивать алерты CloudWatch. Пригодится при аудите облака и контроле счетов. CX Codex +1 863установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о aws-ecs-fargate

Как установить aws-ecs-fargate в Claude Code?

Выполните команду npx skills add BagelHole/DevOps-Security-Agent-Skills --skill aws-ecs-fargate -a claude-code. Также файл скилла можно сохранить вручную по пути ~/.claude/skills/aws-ecs-fargate/SKILL.md.

Что делает скилл aws-ecs-fargate?

Он даёт шаблоны конфигураций и команды CLI для развёртывания контейнеров в Amazon ECS на бессерверной инфраструктуре Fargate или EC2, настройки сервисов с балансировщиком и отслеживания выкаток.

Какие доступы и компоненты нужны перед началом работы?

Потребуются установленные AWS CLI v2 и Docker, готовый VPC с подсетями и ALB, а также права IAM: ecs:*, ecr:*, elasticloadbalancing:*, logs:* и iam:PassRole.

Исходный текст

SKILL.md · MIT
---
name: aws-ecs-fargate
description: Deploy containers on ECS and Fargate. Configure task definitions, services, and load balancing. Use when running containerized workloads on AWS.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# AWS ECS & Fargate

Run containerized applications on Amazon ECS with Fargate serverless compute or EC2 launch type.

## When to Use This Skill

- Deploying Docker containers to AWS without managing servers (Fargate)
- Running microservices with service discovery and load balancing
- Setting up blue/green or rolling deployments for containerized apps
- Configuring auto-scaling for container workloads
- Migrating from docker-compose or Kubernetes to ECS
- Troubleshooting task failures, health check issues, or networking problems

## Prerequisites

- AWS CLI v2 installed and configured
- Docker installed for building and pushing images
- IAM permissions: `ecs:*`, `ecr:*`, `elasticloadbalancing:*`, `logs:*`, `iam:PassRole`
- An ECR repository for storing container images
- A VPC with subnets and an ALB (see [aws-vpc](../aws-vpc/))

## Cluster Setup

```bash
# Create an ECS cluster with Container Insights enabled
aws ecs create-cluster \
  --cluster-name production \
  --capacity-providers FARGATE FARGATE_SPOT \
  --default-capacity-provider-strategy '[
    {"capacityProvider": "FARGATE", "weight": 1, "base": 2},
    {"capacityProvider": "FARGATE_SPOT", "weight": 3}
  ]' \
  --settings '[{"name": "containerInsights", "value": "enabled"}]'

# List clusters
aws ecs list-clusters

# Describe cluster details
aws ecs describe-clusters --clusters production --include STATISTICS ATTACHMENTS
```

## Push Image to ECR

```bash
# Create ECR repository
aws ecr create-repository \
  --repository-name myapp \
  --image-scanning-configuration scanOnPush=true \
  --encryption-configuration encryptionType=KMS

# Authenticate Docker to ECR
aws ecr get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

# Build, tag, and push
docker build -t myapp:latest .
docker tag myapp:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
```

## Task Definition

```json
{
  "family": "myapp",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
  "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
  "containerDefinitions": [
    {
      "name": "myapp",
      "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 8080,
          "protocol": "tcp"
        }
      ],
      "environment": [
        {"name": "NODE_ENV", "value": "production"},
        {"name": "PORT", "value": "8080"}
      ],
      "secrets": [
        {
          "name": "DB_PASSWORD",
          "valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/db-password"
        },
        {
          "name": "API_KEY",
          "valueFrom": "arn:aws:ssm:us-east-1:123456789012:parameter/myapp/api-key"
        }
      ],
      "healthCheck": {
        "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
        "interval": 30,
        "timeout": 5,
        "retries": 3,
        "startPeriod": 60
      },
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/myapp",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "true"
        }
      },
      "ulimits": [
        {"name": "nofile", "softLimit": 65536, "hardLimit": 65536}
      ]
    }
  ]
}
```

```bash
# Register the task definition
aws ecs register-task-definition --cli-input-json file://task-definition.json

# List task definition revisions
aws ecs list-task-definitions --family-prefix myapp

# Deregister an old revision
aws ecs deregister-task-definition --task-definition myapp:1
```

## Create Service with ALB

```bash
# Create the CloudWatch log group first
aws logs create-log-group --log-group-name /ecs/myapp
aws logs put-retention-policy --log-group-name /ecs/myapp --retention-in-days 30

# Create ECS service with load balancer
aws ecs create-service \
  --cluster production \
  --service-name myapp \
  --task-definition myapp:2 \
  --desired-count 3 \
  --launch-type FARGATE \
  --platform-version LATEST \
  --deployment-configuration '{
    "deploymentCircuitBreaker": {"enable": true, "rollback": true},
    "maximumPercent": 200,
    "minimumHealthyPercent": 100
  }' \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-private-a", "subnet-private-b"],
      "securityGroups": ["sg-app"],
      "assignPublicIp": "DISABLED"
    }
  }' \
  --load-balancers '[{
    "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/myapp-tg/abc123",
    "containerName": "myapp",
    "containerPort": 8080
  }]' \
  --service-registries '[{
    "registryArn": "arn:aws:servicediscovery:us-east-1:123456789012:service/srv-abc123"
  }]' \
  --enable-execute-command \
  --propagate-tags SERVICE
```

## Deployments

```bash
# Rolling update - update task definition and force new deployment
aws ecs update-service \
  --cluster production \
  --service myapp \
  --task-definition myapp:3 \
  --force-new-deployment

# Watch deployment progress
aws ecs describe-services \
  --cluster production \
  --services myapp \
  --query "services[0].deployments[].{Status:status,Running:runningCount,Desired:desiredCount,TaskDef:taskDefinition}" \
  --output table

# Wait for service to stabilize
aws ecs wait services-stable --cluster production --services myapp

# Exec into a running container for debugging
aws ecs execute-command \
  --cluster production \
  --task arn:aws:ecs:us-east-1:123456789012:task/production/abc123 \
  --container myapp \
  --interactive \
  --command "/bin/sh"
```

## Auto Scaling

```bash
# Register ECS service as a scalable target
aws application-autoscaling register-scalable-target \
  --service-namespace ecs \
  --resource-id service/production/myapp \
  --scalable-dimension ecs:service:DesiredCount \
  --min-capacity 2 \
  --max-capacity 20

# Target tracking policy - scale on CPU utilization
aws application-autoscaling put-scaling-policy \
  --service-namespace ecs \
  --resource-id service/production/myapp \
  --scalable-dimension ecs:service:DesiredCount \
  --policy-name cpu-target-tracking \
  --policy-type TargetTrackingScaling \
  --target-tracking-scaling-policy-configuration '{
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ECSServiceAverageCPUUtilization"
    },
    "TargetValue": 70.0,
    "ScaleInCooldown": 300,
    "ScaleOutCooldown": 60
  }'

# Scale on request count per target (ALB)
aws application-autoscaling put-scaling-policy \
  --service-namespace ecs \
  --resource-id service/production/myapp \
  --scalable-dimension ecs:service:DesiredCount \
  --policy-name request-count-tracking \
  --policy-type TargetTrackingScaling \
  --target-tracking-scaling-policy-configuration '{
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ALBRequestCountPerTarget",
      "ResourceLabel": "app/my-alb/abc123/targetgroup/myapp-tg/def456"
    },
    "TargetValue": 1000.0,
    "ScaleInCooldown": 300,
    "ScaleOutCooldown": 60
  }'
```

## Terraform ECS Fargate Service

```hcl
resource "aws_ecs_cluster" "main" {
  name = "production"

  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}

resource "aws_ecs_task_definition" "myapp" {
  family                   = "myapp"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = 512
  memory                   = 1024
  execution_role_arn       = aws_iam_role.ecs_execution.arn
  task_role_arn            = aws_iam_role.ecs_task.arn

  container_definitions = jsonencode([{
    name      = "myapp"
    image     = "${aws_ecr_repository.myapp.repository_url}:latest"
    essential = true

    portMappings = [{
      containerPort = 8080
      protocol      = "tcp"
    }]

    logConfiguration = {
      logDriver = "awslogs"
      options = {
        awslogs-group         = aws_cloudwatch_log_group.myapp.name
        awslogs-region        = "us-east-1"
        awslogs-stream-prefix = "ecs"
      }
    }

    healthCheck = {
      command     = ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
      interval    = 30
      timeout     = 5
      retries     = 3
      startPeriod = 60
    }
  }])
}

resource "aws_ecs_service" "myapp" {
  name            = "myapp"
  cluster         = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.myapp.arn
  desired_count   = 3
  launch_type     = "FARGATE"

  deployment_circuit_breaker {
    enable   = true
    rollback = true
  }

  network_configuration {
    subnets          = aws_subnet.private[*].id
    security_groups  = [aws_security_group.app.id]
    assign_public_ip = false
  }

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

  enable_execute_command = true
  propagate_tags         = "SERVICE"
}
```

## Viewing Logs

```bash
# Tail logs from CloudWatch
aws logs tail /ecs/myapp --follow --since 1h

# Get logs for a specific task
aws logs get-log-events \
  --log-group-name /ecs/myapp \
  --log-stream-name "ecs/myapp/abc123def456" \
  --start-from-head

# Filter logs for errors
aws logs filter-log-events \
  --log-group-name /ecs/myapp \
  --filter-pattern "ERROR" \
  --start-time $(date -d '1 hour ago' +%s000)
```

## Troubleshooting

| Problem | Cause | Fix |
|---|---|---|
| Task stuck in PROVISIONING | No available capacity in subnets | Check subnet availability and capacity provider |
| Task fails immediately | Container crashes on startup | Check CloudWatch logs; run image locally first |
| Health check failing | App not ready within startPeriod | Increase `startPeriod`; verify health endpoint |
| Cannot pull ECR image | Execution role missing ECR permissions | Attach `AmazonECSTaskExecutionRolePolicy` |
| Service stuck at 0 running | Security group blocks ALB health check | Allow ALB SG to reach container port |
| Exec command fails | SSM agent not initialized | Ensure `enableExecuteCommand` is true; check task role |
| High Fargate costs | Not using Fargate Spot for tolerant workloads | Add FARGATE_SPOT capacity provider |
| Container OOM killed | Memory limit too low | Increase `memory` in task definition; check for leaks |
| Slow deployments | minimumHealthyPercent too high | Set to 50% for faster rolling updates |

## Related Skills

- [docker-management](../../../devops/containers/docker-management/) - Container fundamentals
- [container-registries](../../../devops/containers/container-registries/) - ECR and image management
- [aws-vpc](../aws-vpc/) - Networking for ECS tasks
- [aws-iam](../aws-iam/) - Task and execution roles
- [terraform-aws](../terraform-aws/) - Infrastructure as Code deployment

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой