🔗 Configuración de la Conexión CodeStar de GitHub
📋 Descripción General
AWS CodeStar Connections proporciona una forma segura de conectar tus repositorios de GitHub a AWS CodePipeline sin almacenar tokens de OAuth. Este enfoque moderno:
- ✅ Mejora la seguridad al eliminar la necesidad de tokens de acceso personales.
- ✅ Simplifica la gestión con un manejo centralizado de conexiones.
- ✅ Permite un control de acceso detallado a repositorios específicos.
🛠️ Implementación Paso a Paso
1️⃣ Crear la Conexión CodeStar (CLI)
Ejecuta el siguiente comando para crear una nueva conexión CodeStar de GitHub y guarda el ARN en una variable:
# Crear la conexión y guardar el ARN en una variable
CONNECTION_ARN=$(aws codestar-connections create-connection \
--provider-type GitHub \
--connection-name my-github-connection \
--query 'ConnectionArn' \
--output text)
# Verificar que el ARN de la conexión se capturó correctamente
echo $CONNECTION_ARN
# Guardar el ARN de la conexión en un archivo para uso posterior
echo "export CONNECTION_ARN=$CONNECTION_ARN" > connection-config.sh✅ Salida Esperada:
arn:aws:codestar-connections:us-west-2:123456789012:connection/tu-id-de-conexion2️⃣ Autorizar la Conexión (Paso Manual)
El paso final de autorización debe realizarse en la Consola de AWS:
- Navega a la sección Developer Tools > Connections en la Consola de AWS.
- Localiza tu conexión recién creada (denominada "my-github-connection").
- Haz clic en "Update pending connection".
- Se te pedirá que inicies sesión en tu cuenta de GitHub.
- IMPORTANTE: Después de iniciar sesión, asegúrate de hacer clic en "Install a new app".

- Se te pedirá que inicies sesión en GitHub de nuevo.
- En la página de instalación, puedes elegir entre:
- Todos los repositorios de tu cuenta de GitHub.
- Solo repositorios seleccionados (recomendado).
- Selecciona "Only select repositories" y haz clic en el desplegable.
- Busca el repositorio "Rent-A-Room" del cual hiciste el fork.
- Selecciona el repositorio y haz clic en "Install and Authorize".

- Haz clic en Connect.
- Una vez completado, serás redirigido de vuelta a AWS y el estado de la conexión debería cambiar a
Available.

3️⃣ Obtener tu nombre de usuario de GitHub automáticamente
Usemos la GitHub CLI para obtener tu nombre de usuario real:
# Obtener tu nombre de usuario de GitHub usando GitHub CLI
GITHUB_USERNAME=$(gh api user -q '.login')
echo "Tu nombre de usuario de GitHub: $GITHUB_USERNAME"
# Verificar que sea correcto
read -p "¿Es este tu nombre de usuario de GitHub? (s/n): " CONFIRM
if [[ $CONFIRM != "s" && $CONFIRM != "S" ]]; then
read -p "Por favor, ingresa tu nombre de usuario de GitHub: " GITHUB_USERNAME
fi
# Configurar información del repositorio y la rama
GITHUB_REPO="Rent-A-Room"
GITHUB_BRANCH="main"
echo "Usuario GitHub: $GITHUB_USERNAME"
echo "Repositorio GitHub: $GITHUB_REPO"
echo "Rama GitHub: $GITHUB_BRANCH"4️⃣ Crear y Enviar el Dockerfile y Archivos Requeridos
Antes de desplegar nuestro pipeline, necesitamos crear y enviar un Dockerfile y archivos de configuración relacionados a nuestro repositorio de GitHub.
# Asegúrate de estar en el directorio Rent-A-Room
cd Rent-A-Room
# Hacer commit y push de todos los archivos a GitHub
git add Dockerfile nginx.conf src/ package.json
git commit -m "Add Docker configuration files for CI/CD pipeline"
git push origin main
echo "✅ Dockerfile y archivos de configuración enviados con éxito al repositorio de GitHub"5️⃣ Descargar y Desplegar la Plantilla de CloudFormation
Ahora, descarguemos y despleguemos la plantilla de CloudFormation que configurará nuestro pipeline de CI/CD completo:
# Descargar la plantilla de CloudFormation
curl -s -f https://raw.githubusercontent.com/aws-samples/aws-modernization-with-docker/main/static/infrastructure/ecs-pipeline-setup.yaml -o ecs-pipeline-setup.yaml
# Crear credenciales de Docker Hub en Secrets Manager
echo "Verificando credenciales de Docker Hub existentes en Secrets Manager..."
if ! aws secretsmanager describe-secret --secret-id dockerhub-credentials &>/dev/null; then
echo "Secreto de credenciales de Docker Hub no encontrado. Creando nuevo secreto..."
if [[ -z "$DOCKER_USERNAME" || -z "$DOCKER_TOKEN" ]]; then
read -p "Ingresa tu nombre de usuario de Docker Hub: " DOCKER_USERNAME
read -s -p "Ingresa tu token de Docker Hub: " DOCKER_TOKEN
echo
fi
aws secretsmanager create-secret \
--name dockerhub-credentials \
--description "Docker Hub credentials for CI/CD pipeline" \
--secret-string "{\"DOCKER_USERNAME\":\"$DOCKER_USERNAME\",\"DOCKER_TOKEN\":\"$DOCKER_TOKEN\"}"
echo "✅ Secreto de credenciales de Docker Hub creado con éxito"
else
echo "✅ El secreto de credenciales de Docker Hub ya existe"
fi
# Desplegar el stack de CloudFormation
echo "Desplegando el stack de CloudFormation..."
aws cloudformation deploy \
--template-file ecs-pipeline-setup.yaml \
--stack-name docker-workshop-pipeline \
--parameter-overrides \
GitHubOwner=$GITHUB_USERNAME \
GitHubRepo=$GITHUB_REPO \
GitHubBranch=$GITHUB_BRANCH \
CodeStarConnectionArn=$CONNECTION_ARN \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM \
--no-fail-on-empty-changeset
# Verificar el estado del despliegue
STATUS=$(aws cloudformation describe-stacks --stack-name docker-workshop-pipeline --query "Stacks[0].StackStatus" --output text)
echo "Estado del stack: $STATUS"
if [ "$STATUS" == "CREATE_COMPLETE" ] || [ "$STATUS" == "UPDATE_COMPLETE" ]; then
echo "✅ ¡Despliegue exitoso!"
PIPELINE_URL=$(aws cloudformation describe-stacks --stack-name docker-workshop-pipeline --query "Stacks[0].Outputs[?OutputKey=='PipelineURL'].OutputValue" --output text)
echo "🔗 URL del Pipeline: $PIPELINE_URL"
else
echo "⚠️ Estado del despliegue: $STATUS - Revisa la Consola de AWS para más detalles"
fi6️⃣ Acceder al sitio web de ECS usando el Balanceador de Carga
Haz clic aquí para abrir CodePipeline en la Consola y selecciona tu pipeline. Una vez completado, puedes verificar el sitio web:
# Obtener el nombre DNS del balanceador de carga
ALB_DNS=$(aws elbv2 describe-load-balancers \
--names rent-a-room-alb \
--query 'LoadBalancers[0].DNSName' \
--output text)
echo "✅ URL de la Aplicación: http://$ALB_DNS"⚠️ Solución de Problemas
- ARN de Conexión perdido: Puedes recuperarlo con:bash
aws codestar-connections list-connections --query "Connections[?ConnectionName=='my-github-connection'].ConnectionArn" --output text - El estado de la conexión debe aparecer como
Availableen la Consola de AWS. - Asegúrate de haber hecho un fork del repositorio Rent-A-Room.
✅ Resumen
🚀 Paso 1: Crear la conexión CodeStar vía CLI.
🔗 Paso 2: Autorizar manualmente en la consola.
🔍 Paso 3: Obtener el usuario de GitHub automáticamente.
📄 Paso 4: Enviar archivos al repositorio.
📦 Paso 5: Desplegar el stack de CloudFormation.
🌐 Paso 6: Acceder a la aplicación vía Load Balancer.
