Skip to content
English
On this page

Guía de Configuración de AWS Copilot CLI

1. Requisitos Previos

1.1 Requerimientos Base

bash
# Docker instalado y en ejecución
docker --version

# AWS CLI configurado
aws configure list

# Credenciales AWS configuradas
aws sts get-caller-identity

1.2 Permisos AWS Necesarios

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

2. Instalación

2.1 macOS

bash
# Usando Homebrew
brew install aws/tap/copilot-cli

# Verificar instalación
copilot --version

2.2 Linux

bash
# Descargar el binario
curl -Lo copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-linux

# Hacer ejecutable e instalar
chmod +x copilot
sudo mv copilot /usr/local/bin/copilot

2.3 Windows

powershell
# Usando Chocolatey
choco install aws-copilot-cli

# Verificar instalación
copilot --version

3. Inicialización y Configuración Básica

3.1 Iniciar una Nueva Aplicación

bash
# Crear nueva aplicación
copilot init

# Opciones típicas durante la inicialización:
# 1. Nombre de la aplicación
# 2. Tipo de servicio (Load Balanced Web Service, Backend Service, Worker Service)
# 3. Dockerfile path
# 4. Puerto de la aplicación

3.2 Estructura del Proyecto

mi-aplicacion/
├── copilot/
│   ├── environments/
│   │   ├── dev/
│   │   └── prod/
│   └── services/
│       └── api/
│           └── manifest.yml
├── Dockerfile
└── app/

4. Comandos Principales

4.1 Gestión de Aplicación

bash
# Listar aplicaciones
copilot app ls

# Mostrar información de la aplicación
copilot app show

# Eliminar aplicación
copilot app delete

4.2 Gestión de Entornos

bash
# Crear nuevo entorno
copilot env init

# Listar entornos
copilot env ls

# Mostrar información del entorno
copilot env show

# Eliminar entorno
copilot env delete

4.3 Gestión de Servicios

bash
# Crear nuevo servicio
copilot svc init

# Desplegar servicio
copilot svc deploy

# Listar servicios
copilot svc ls

# Mostrar logs del servicio
copilot svc logs

# Eliminar servicio
copilot svc delete

5. Configuración de Servicios

5.1 Manifest para Web Service

yaml
# copilot/services/api/manifest.yml
name: api
type: Load Balanced Web Service

image:
  build: Dockerfile
  port: 8080

http:
  path: '/'
  healthcheck:
    path: '/health'
    healthy_threshold: 3
    unhealthy_threshold: 2
    interval: 15s
    timeout: 10s

cpu: 256
memory: 512
count: 2

variables:
  LOG_LEVEL: info
  API_VERSION: v1

secrets:
  DB_PASSWORD: /prod/api/db-password

scaling:
  range: 1-10
  target_cpu_percentage: 70
  target_memory_percentage: 80

5.2 Manifest para Worker Service

yaml
# copilot/services/worker/manifest.yml
name: worker
type: Worker Service

image:
  build: Dockerfile

cpu: 256
memory: 512
count: 1

variables:
  QUEUE_NAME: processing-queue

secrets:
  API_KEY: /prod/worker/api-key

logging:
  retention: 30
  exports:
    - s3

6. Pipelines y CI/CD

6.1 Configuración de Pipeline

bash
# Inicializar pipeline
copilot pipeline init

# Mostrar status del pipeline
copilot pipeline status

# Actualizar pipeline
copilot pipeline update

6.2 Pipeline Manifest

yaml
# copilot/pipeline.yml
name: pipeline-demo
version: 1

source:
  provider: GitHub
  properties:
    branch: main
    repository: https://github.com/user/repo
    connection_name: GitHub-Connection

stages:
  - name: test
    test_commands:
      - make test
      - echo "Running tests"
    
  - name: prod
    requires_approval: true

7. Monitoreo y Diagnóstico

7.1 Logs y Monitoreo

bash
# Ver logs en tiempo real
copilot svc logs --follow

# Ver métricas del servicio
copilot svc stats

# Ejecutar diagnóstico
copilot svc status

7.2 Debugging

bash
# Ejecutar shell en contenedor
copilot svc exec

# Ver configuración del servicio
copilot svc show

# Ver eventos del servicio
copilot svc events

8. Patrones y Mejores Prácticas

8.1 Estructura de Proyecto Recomendada

proyecto/
├── copilot/
│   ├── environments/
│   │   ├── dev/
│   │   │   └── manifest.yml
│   │   └── prod/
│   │       └── manifest.yml
│   ├── services/
│   │   ├── api/
│   │   │   └── manifest.yml
│   │   └── worker/
│   │       └── manifest.yml
│   └── pipeline.yml
├── infrastructure/
│   └── additional-resources.yml
├── scripts/
│   ├── build.sh
│   └── deploy.sh
└── src/

8.2 Scripts de Automatización

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

# Validar parámetros
if [[ -z "$ENVIRONMENT" || -z "$SERVICE" ]]; then
    echo "Uso: deploy.sh <environment> <service>"
    exit 1
fi

# Desplegar
copilot svc deploy --name $SERVICE --env $ENVIRONMENT

9. Solución de Problemas

9.1 Problemas Comunes

bash
# Problemas de despliegue
copilot svc status
copilot svc logs

# Problemas de red
copilot svc show
aws ec2 describe-security-groups

# Problemas de permisos
copilot svc status --resources

9.2 Comandos de Diagnóstico

bash
# Validar configuración
copilot svc package

# Ver recursos de AWS
copilot svc show --resources

# Ver configuración de tareas
copilot svc show --json

10. Seguridad

10.1 Gestión de Secretos

bash
# Añadir secreto
copilot secret init

# Listar secretos
copilot secret ls

# Eliminar secreto
copilot secret delete

10.2 IAM y Permisos

yaml
# copilot/services/api/manifest.yml
name: api
type: Load Balanced Web Service

permissions:
  IAM:
    - Effect: Allow
      Action:
        - s3:GetObject
        - s3:PutObject
      Resource: arn:aws:s3:::my-bucket/*

11. Comandos Útiles Adicionales

bash
# Generar diagrama de arquitectura
copilot app show --resources

# Validar manifests
copilot svc package

# Ver diferencias antes de desplegar
copilot svc deploy --diff

# Ejecutar tareas ad-hoc
copilot task run

12. Integración con Otros Servicios

12.1 RDS

yaml
# copilot/addons/db.yml
Parameters:
  App:
    Type: String
  Env:
    Type: String
  Name:
    Type: String

Resources:
  DB:
    Type: AWS::RDS::DBInstance
    Properties:
      Engine: postgres
      DBName: !Ref App
      DBInstanceClass: db.t3.micro

12.2 ElastiCache

yaml
# copilot/addons/cache.yml
Parameters:
  App:
    Type: String
  Env:
    Type: String

Resources:
  Cache:
    Type: AWS::ElastiCache::CacheCluster
    Properties:
      Engine: redis
      CacheNodeType: cache.t3.micro

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