AWS CodeDeploy: Cómo Configurar un Pipeline CI/CD para Desplegar Aplicaciones en EC2 Usando GitHub
Desplegar aplicaciones manualmente es tedioso, propenso a errores e ineficiente. AWS CodeDeploy simplifica la automatización de despliegues, mejorando la eficiencia y minimizando el tiempo de inactividad. En esta guía, aprenderás paso a paso cómo configurar un pipeline robusto de Integración Continua y Despliegue Continuo (CI/CD) para desplegar tus aplicaciones directamente desde GitHub a una instancia Amazon EC2.
Lo que necesitarás:
- Cuenta de AWS
- Instancia EC2 ejecutando Amazon Linux
- Repositorio de GitHub con tu aplicación
- AWS CLI instalado en tu máquina local
Paso 1: Preparar tu instancia EC2
Conéctate a tu instancia EC2 vía SSH:
ssh -i "your-key.pem" ec2-user@your-ec2-instance-public-ip
Instala e inicia el agente de CodeDeploy:
sudo yum update
sudo yum install ruby -y
sudo yum install wget -y
cd /home/ec2-user
wget https://aws-codedeploy-region.s3.region.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
Reemplaza region con tu región de AWS, como us-east-1.
Paso 2: Crear un Rol IAM para CodeDeploy
En la consola de AWS:
- Navega a IAM → Roles → Crear Rol.
- Elige Servicio de AWS, luego selecciona CodeDeploy.
- Adjunta políticas: selecciona AWSCodeDeployRole.
- Nombra tu rol (por ejemplo,
CodeDeployRole) y créalo.
Paso 3: Configurar la Aplicación de CodeDeploy
- Ve a AWS CodeDeploy → Applications → Create application.
- Ingresa un nombre de aplicación.
- Elige la plataforma de cómputo: EC2/On-premises.
Crea un grupo de despliegue:
- Nombre del grupo de despliegue (por ejemplo,
Production) - Selecciona tu Rol IAM (
CodeDeployRole) - Selecciona instancias EC2 por etiqueta o selecciona manualmente tu instancia EC2.
- Tipo de despliegue: In-place.
Paso 4: Preparar tu Repositorio de GitHub
Crea un archivo appspec.yml en la raíz de tu repositorio:
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
AfterInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: root
Crea los scripts necesarios, por ejemplo, scripts/install_dependencies.sh:
#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo service httpd start
sudo chkconfig httpd on
Asegúrate de que tus scripts tengan permisos de ejecución:
chmod +x scripts/*.sh
Confirma y sube los cambios a GitHub:
git add .
git commit -m "Added appspec.yml and deployment scripts"
git push origin main
Paso 5: Conectar AWS CodeDeploy con GitHub
- En la consola de CodeDeploy, selecciona tu aplicación y grupo de despliegue.
- Haz clic en Create Deployment.
- Selecciona GitHub como tipo de repositorio.
- Conéctate a GitHub y autoriza a AWS.
- Elige tu repositorio y la rama de commits (por ejemplo,
main). - Haz clic en Deploy.
Paso 6: Automatizar con CI/CD Usando GitHub Actions
Crea .github/workflows/deploy.yml en tu repositorio:
name: AWS Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS CodeDeploy
uses: aws-actions/aws-codedeploy@v1
with:
application-name: your-codedeploy-app-name
deployment-group-name: your-deployment-group
region: your-region
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Configura las credenciales de AWS como secretos de GitHub:
- Ve a GitHub → Settings → Secrets and variables → Actions → New repository secret
- Agrega tu
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY.
Ahora, cada push a main activará despliegues automáticos.
Paso 7: Verificar tu Despliegue
Visita la IP pública de tu EC2 en un navegador web:
http://your-ec2-instance-public-ip
¡Deberías ver tu aplicación desplegada exitosamente!
Conclusión
¡Felicitaciones! Has configurado exitosamente un pipeline CI/CD de AWS CodeDeploy integrado con GitHub para desplegar automáticamente aplicaciones en EC2. Esta automatización optimizará significativamente tu proceso de despliegue, reducirá el tiempo de inactividad y simplificará las actualizaciones.