Esta guía documenta el proceso completo para desplegar la aplicación TechNotes en AWS Elastic Beanstalk, basada en el despliegue exitoso realizado.
- Shell zsh
- .NET SDK 8 instalado (
dotnet --version) - EB CLI instalado (
eb --version)- Instalar con la guía: elasticbeanstalk-eb-cli3-install
- Cuenta de AWS con permisos para Elastic Beanstalk, EC2, IAM y S3: crear cuenta
- Aws ToolKit(Opcional) : Instalar extensión
Paso a paso desde la consola con el servicio IAM.
- El usuario tiene que crearse con las siguientes políticas de permisos:
- Con el usuario podemos crear las claves de acceso
- AWS Access Key ID.
- AWS Secret Access Key.
Desde la raíz del proyecto:
cd /Users/teddypaz/Desktop/Fullstack (Ubicación raíz de tu proyecto)
eb initDurante la inicialización:
- Region:
us-east-2c(tu región o la misma que la base de datos) - Application name:
TechNotes - Platform:
.NET 8 running on 64bit Amazon Linux 2023 - CodeCommit: No
- SSH: No (pero es recomendado para debugging)
Esto crea el directorio .elasticbeanstalk/ con el archivo config.yml.
eb create technotes-env --profile eb-cliNotas importantes:
- Usa
technotes-env(sin guión bajo) para evitar problemas. - La creación toma aproximadamente 5-10 minutos
- Si el entorno falla al crear, usa
eb terminate technotes-env --profile eb-cliy vuelve a crearlo
cd /Users/teddypaz/Desktop/Fullstack
rm -rf artifactsdotnet restoredotnet publish ./TechNotes/TechNotes.csproj -c Release -o ./artifacts/publishImportante: El flag -o ./artifacts/publish especifica la carpeta de salida.
cd ./artifacts/publish
zip -r ../TechNotes.zip .
cd ../..Nota: El punto . al final del comando zip empaqueta el contenido de la carpeta actual, no la carpeta misma.
ls -lh ./artifacts/TechNotes.zip
unzip -l ./artifacts/TechNotes.zip | head -20Debes ver archivos como:
TechNotes.dllTechNotes.runtimeconfig.json← Crítico para EBTechNotes.deps.jsonappsettings.jsonwwwroot/
Asegúrate de que .elasticbeanstalk/config.yml contenga:
branch-defaults:
main:
environment: technotes-env
group_suffix: null
deploy:
artifact: artifacts/TechNotes.zip
global:
application_name: TechNotes
branch: null
default_ec2_keyname: null
default_platform: .NET 8 running on 64bit Amazon Linux 2023
default_region: sa-east-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: eb-cli
repository: null
sc: git
workspace_type: Applicationeb listDeberías ver:
* technotes-env
El asterisco * indica el entorno activo.
eb deploy --profile eb-cliO si no especificaste el perfil en config.yml:
eb deployLa carga y despliegue toma aproximadamente 2-5 minutos.
eb status --profile eb-clieb open --profile eb-cliSi necesitas configurar variables de entorno (base de datos, secretos, etc.):
eb setenv ASPNETCORE_ENVIRONMENT=Production \
ConnectionStrings__Default="Host=...;Port=5432;Database=...;Username=...;Password=..." \
--profile eb-clieb health --profile eb-clieb ssh --profile eb-clieb scale 2 --profile eb-cli # 2 instanciaseb terminate technotes-env --profile eb-cliPara despliegues futuros, puedes crear un script deploy.sh:
#!/bin/bash
set -e
echo "🧹 Limpiando artefactos..."
rm -rf artifacts
echo "📦 Restaurando dependencias..."
dotnet restore
echo "🏗️ Publicando aplicación..."
dotnet publish ./TechNotes/TechNotes.csproj -c Release -o ./artifacts/publish
echo "📦 Empaquetando..."
cd ./artifacts/publish
zip -r ../TechNotes.zip .
cd ../..
echo "✅ Paquete creado: $(ls -lh ./artifacts/TechNotes.zip | awk '{print $5}')"
echo "🚀 Desplegando a AWS..."
eb deploy --profile eb-cli
echo "✅ Despliegue completado!"
eb open --profile eb-cliDar permisos de ejecución:
chmod +x deploy.sh
./deploy.shCausa: Estás desplegando código fuente en lugar del artefacto publicado.
Solución: Asegúrate de ejecutar dotnet publish y empaquetar desde ./artifacts/publish.
Causa: El entorno falló al crearse (permisos IAM, VPC, etc.).
Solución:
- Ver eventos:
eb events --all --profile eb-cli - Terminar entorno:
eb terminate technotes-env --profile eb-cli - Crear nuevamente:
eb create technotes-env --profile eb-cli
Causa: No hay un entorno seleccionado por defecto.
Solución:
eb use technotes-env --profile eb-cliCausa: La aplicación no está escuchando en el puerto correcto o hay errores de configuración.
Solución:
- Ver logs:
eb logs --profile eb-cli - Verificar que
Program.csuseWebApplication.CreateBuilder(args)(detecta puerto automáticamente) - Verificar variables de entorno y connection strings
- Elastic Beanstalk: Gratis (solo pagas recursos)
- EC2 t3.micro (1 instancia): ~$8-10 USD/mes
- Load Balancer (si habilitado): ~$16 USD/mes
- S3 (almacenamiento de versiones): ~$1 USD/mes
- RDS db.t3.micro (si usas): ~$15-20 USD/mes
Total estimado: $25-50 USD/mes (configuración básica)
-
Configurar HTTPS/SSL:
- Solicitar certificado en AWS Certificate Manager (ACM)
- Configurar listener HTTPS en el Load Balancer
-
Configurar Auto Scaling:
- Ajustar capacidad mínima/máxima de instancias
-
Configurar CI/CD:
- GitHub Actions para despliegue automático
- CodePipeline de AWS
-
Configurar Base de Datos:
- Amazon RDS (PostgreSQL/MySQL)
- Configurar connection string en variables de entorno
-
Monitoreo:
- CloudWatch para logs y métricas
- Configurar alarmas
Historial de comandos exitosos:
eb init
aws configure sso
eb create technotes-env --profile eb-cli
dotnet restore
dotnet publish ./TechNotes/TechNotes.csproj -c Release -o ./artifacts/publish
cd ./artifacts/publish && zip -r ../TechNotes.zip . && cd ../..
eb deploy --profile eb-cli
eb open --profile eb-cli