Skip to content
English
On this page

Guía de Configuración de AWS ECS CLI

1. Requisitos Previos

1.1 Requerimientos Básicos

  • AWS CLI instalado y configurado
  • Docker instalado y funcionando
  • Credenciales AWS con permisos para ECS
  • Python 3.6 o superior

1.2 Permisos AWS Necesarios

json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:*",
                "ecr:*",
                "iam:PassRole",
                "ec2:*",
                "elasticloadbalancing:*"
            ],
            "Resource": "*"
        }
    ]
}

2. Instalación

2.1 Windows

bash
# Descargar el instalador
curl -o amazon-ecs-cli.exe https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe

# Mover al PATH
move amazon-ecs-cli.exe C:\Windows\System32\

2.2 macOS/Linux

bash
# Descargar el binario
sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-$(uname -s | tr '[:upper:]' '[:lower:]')-amd64-latest

# Dar permisos de ejecución
sudo chmod +x /usr/local/bin/ecs-cli

# Verificar instalación
ecs-cli --version

3. Configuración Básica

3.1 Configuración de Credenciales

bash
# Configurar credenciales
ecs-cli configure profile --profile-name mi-perfil \
    --access-key AWS_ACCESS_KEY_ID \
    --secret-key AWS_SECRET_ACCESS_KEY

# Configurar cluster
ecs-cli configure --cluster mi-cluster \
    --default-launch-type EC2 \
    --region us-east-1 \
    --config-name mi-configuracion

3.2 Configuración del Cluster

bash
# Crear cluster con EC2
ecs-cli up --capability-iam --size 2 \
    --instance-type t2.micro \
    --cluster-config mi-configuracion \
    --ecs-profile mi-perfil

# Para Fargate
ecs-cli up --launch-type FARGATE \
    --cluster-config mi-configuracion \
    --ecs-profile mi-perfil

4. Comandos Principales

4.1 Gestión de Cluster

bash
# Listar clusters
ecs-cli ps --cluster-config mi-configuracion

# Verificar estado de las instancias
ecs-cli ps --cluster-config mi-configuracion --desired-status RUNNING

# Escalar cluster
ecs-cli scale --capability-iam --size 3 \
    --cluster-config mi-configuracion

4.2 Gestión de Servicios

bash
# Crear servicio
ecs-cli compose --project-name mi-proyecto service up \
    --cluster-config mi-configuracion \
    --ecs-profile mi-perfil

# Actualizar servicio
ecs-cli compose --project-name mi-proyecto service up \
    --force-deployment

# Eliminar servicio
ecs-cli compose --project-name mi-proyecto service down

5. Configuración de Aplicaciones

5.1 docker-compose.yml

yaml
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    logging:
      driver: awslogs
      options:
        awslogs-group: mi-grupo-logs
        awslogs-region: us-east-1
        awslogs-stream-prefix: web

  api:
    image: node:14
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

5.2 ecs-params.yml

yaml
version: 1
task_definition:
  task_execution_role: ecsTaskExecutionRole
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - subnet-xxxxxxxx
        - subnet-yyyyyyyy
      security_groups:
        - sg-xxxxxxxx
      assign_public_ip: ENABLED

6. Despliegue de Aplicaciones

6.1 Despliegue Básico

bash
# Crear y ejecutar task
ecs-cli compose --project-name mi-proyecto \
    --file docker-compose.yml \
    --ecs-params ecs-params.yml \
    service up \
    --deployment-max-percent 200 \
    --deployment-min-healthy-percent 100

# Verificar estado
ecs-cli compose --project-name mi-proyecto service ps

6.2 Despliegue con Load Balancer

bash
# Crear servicio con load balancer
ecs-cli compose --project-name mi-proyecto \
    service up \
    --target-group-arn arn:aws:elasticloadbalancing:region:account:targetgroup/target-group-name/xxx \
    --container-name web \
    --container-port 80

7. Monitoreo y Logs

7.1 Monitoreo

bash
# Ver eventos del cluster
ecs-cli logs --container-name web \
    --task-id task-id \
    --follow

# Verificar estado de tareas
ecs-cli ps --cluster-config mi-configuracion

7.2 Configuración de Logs

yaml
# CloudWatch Logs en docker-compose.yml
logging:
  driver: awslogs
  options:
    awslogs-group: /ecs/mi-aplicacion
    awslogs-region: us-east-1
    awslogs-stream-prefix: ecs

8. Patrones y Mejores Prácticas

8.1 Estructura de Proyecto

mi-proyecto/
├── docker-compose.yml
├── ecs-params.yml
├── .env
└── config/
    ├── prod/
    │   ├── docker-compose.prod.yml
    │   └── ecs-params.prod.yml
    └── dev/
        ├── docker-compose.dev.yml
        └── ecs-params.dev.yml

8.2 Scripts de Automatización

bash
#!/bin/bash
# deploy.sh
ENVIRONMENT=$1

ecs-cli compose \
    --project-name mi-proyecto \
    --file docker-compose.yml \
    --file config/$ENVIRONMENT/docker-compose.$ENVIRONMENT.yml \
    --ecs-params config/$ENVIRONMENT/ecs-params.$ENVIRONMENT.yml \
    service up \
    --cluster-config mi-configuracion \
    --ecs-profile mi-perfil

9. Troubleshooting

9.1 Problemas Comunes

bash
# Verificar conectividad
ecs-cli check-attributes

# Diagnosticar problemas de red
ecs-cli compose --project-name mi-proyecto service ps

# Verificar logs
ecs-cli logs --container-name web --task-id TASK_ID

9.2 Soluciones

  1. Problemas de Memoria/CPU
yaml
# Ajustar en ecs-params.yml
task_definition:
  task_size:
    mem_limit: 1GB
    cpu_limit: 512
  1. Problemas de Red
bash
# Verificar security groups
aws ec2 describe-security-groups --group-ids sg-xxxxxxxx

# Verificar subnets
aws ec2 describe-subnets --subnet-ids subnet-xxxxxxxx

10. Comandos Útiles Adicionales

bash
# Listar tareas
ecs-cli ps --cluster-config mi-configuracion

# Ejecutar comando en contenedor
ecs-cli execute --cluster-config mi-configuracion \
    --task-id TASK_ID \
    --container web \
    --command "/bin/bash"

# Limpiar recursos
ecs-cli down --force

11. Seguridad

11.1 Mejores Prácticas

  1. Gestión de Secretos
bash
# Usar AWS Secrets Manager
aws secretsmanager create-secret \
    --name mi-secreto \
    --secret-string '{"username":"user","password":"pass"}'
  1. IAM Roles
json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:region:account:secret:mi-secreto-*"
        }
    ]
}

Esta guía proporciona una base sólida para trabajar con ECS CLI. Recuerda mantener actualizadas las herramientas y seguir las mejores prácticas de seguridad de AWS.