🤝Integrando CodeCatalyst con GitHub y Terraform: 🚀 Desplegando AWS Cognito
Buenas de nuevo, siguiendo con el descubrimiento del servicio AWS CodeCatalyst. En este post exploraremos cmo integrar AWS CodeCatalyst con un repositorio de GitHub existente para automatizar el despliegue de infraestructura usando Terraform, en este caso especfico , desplegaremos un AWS Cognito.
🚀 Qu papel cumple cada uno de los actores?
Utilizaremos, AWS CodeCatalyst como plataforma de CI/CD, GitHub como repositorio de cdigo fuente, y Terraform como Infrastructure as Code, desplegando recursos de AWS Cognito.
🛠 Prerrequisitos
- AWS Builder ID configurado
- Cuenta de AWS (Aunque estemos en la capa gratuita necesitamos una cuenta de AWS)
- Acceso a CodeCatalyst
- Repositorio GitHub: https://github.com/olcortesb/cognito-terraform
📋 Configuracin Inicial
Paso 1: Conectar repositorio GitHub a CodeCatalyst
Dentro de code catalyst: https://codecatalyst.aws/ en el espacio de trabajo que tengamos activo creamos un nuevo proyecto:
/>
Aceptamos trminos y condiciones:
/>
Especificar el repositorio y aceptar:
/>
# Clonar el repositorio de ejemplogit clone https://github.com/olcortesb/cognito-terraform.git
Paso 2: Configurar variables de Terraform
El cdigo de Terraform es el mismo que utilizamos en un post anterior para desplegar AWS Cognito. Ver artculo
# Variables principales para Cognitovariable "user_pool_name" { description = "Name of the Cognito User Pool" type = string}
🔧 Implementacin
Creacin del Workflow de Terraform
En CodeCatalyst, creamos un workflow que automatiza el proceso de despliegue de Terraform en dos etapas: Plan y Apply. Aqu una recomendacin es crear el yaml directamente dentro del cdigo del proyecto similar a como trabajamos con GitHub Actions y GitLab. La direccin y estructura es la siguiente:
# Ruta del .yaml que define el pipeline.codecatalyst/workflows/onPushToMainDeploymentWorkflow.yaml
Y el cdigo dentro del yaml:
Name: onPushToMainDeploymentWorkflowSchemaVersion: "1.0"# ---------------------------------------------------------------------------------# Trigger: Se activa con cada push a la rama 'main'# ---------------------------------------------------------------------------------Triggers: - Type: PUSH Branches: - main# ---------------------------------------------------------------------------------# Actions: Define los pasos del flujo de trabajo# ---------------------------------------------------------------------------------Actions: # ------------------------------------------------------------------------------- # PASO 1: Inicializa Terraform y crea un plan de ejecucin. # El plan se guarda como un artefacto para usarlo en el siguiente paso. # ------------------------------------------------------------------------------- TerraformInitAndPlan: Identifier: aws/build@v1 Compute: Type: EC2 Fleet: Linux.x86-64.Large Inputs: Sources: - WorkflowSource Outputs: Artifacts: - Name: ART01 Files: - "tfplan" - ".terraform.lock.hcl" - ".terraform/**/*" - ".terraform/providers/**/*" - ".terraform/modules/**/*" Configuration: Steps: - Run: | wget https://releases.hashicorp.com/terraform/1.9.8/terraform_1.9.8_linux_amd64.zip unzip terraform_1.9.8_linux_amd64.zip chmod +x terraform - Run: ./terraform init - Run: ./terraform plan -var="environment=dev" -var="region=eu-central-1" -out=tfplan Environment: Name: dev Connections: - Name: olcortesb-account Role: CodeCatalystWorkflowDevelopmentRole-olcortesb # ------------------------------------------------------------------------------- # PASO 2: Aplica el plan de Terraform creado en el paso anterior. # Depende de que 'TerraformInitAndPlan' haya finalizado con xito. # ------------------------------------------------------------------------------- TerraformApply: Identifier: aws/build@v1 DependsOn: - TerraformInitAndPlan Compute: Type: EC2 Fleet: Linux.x86-64.Large Inputs: Sources: - WorkflowSource Artifacts: - ART01 Configuration: Steps: - Run: cd $CATALYST_SOURCE_DIR_ART01 - Run: | wget https://releases.hashicorp.com/terraform/1.9.8/terraform_1.9.8_linux_amd64.zip unzip terraform_1.9.8_linux_amd64.zip chmod +x terraform - Run: ./terraform apply -auto-approve tfplan Environment: Name: dev Connections: - Name: olcortesb-account Role: CodeCatalystWorkflowDevelopmentRole-olcortesb
Ejemplo de como se ve visualmente el pipeline que hemos implementado despus de ejecutarlo:
/>
Caractersticas del Workflow
Estructura de dos etapas:
- TerraformInitAndPlan: Descarga Terraform, inicializa el proyecto y crea un plan
- TerraformApply: Aplica los cambios usando el plan generado
Configuracin clave:
- Compute:
EC2conFleet: Linux.x86-64.Largepara mejor rendimiento - Environment:
devcon conexin a la cuenta AWS - Artefactos: Transfiere el plan entre etapas (con incidencia conocida)
- Variables:
environment=devyregion=eu-central-1
Como trabajar con los Artifacts
💡 Agrego este apartado porque es interesante y me llevo un tiempo hacerlo andar, es necesario colocar un prefijo al nombre del artefacto, $CATALYST_SOURCE_DIR_{NAME} est en la documentacin cada caso especfico y colocar patrones de acceso al subirlos para que tome los subdirectorios como se ve en cdigo del pipeline que desplegamos:
# References: https://docs.aws.amazon.com/codecatalyst/latest/userguide/workflows-working-artifacts-ex.htmlActions: BuildActionG: Identifier: aws/build@v1 Outputs: Artifacts: - Name: ART8 Files: - build-output/file8.txt BuildActionH: Identifier: aws/build@v1 Inputs: Sources: - WorkflowSource Artifacts: - ART8 Configuration: Steps: - run: cd $CATALYST_SOURCE_DIR_ART8/build-output && cat file8.txt
Workaround implementado:
- Se reinstala Terraform en ambas etapas
- Se regenera el plan en la etapa Apply
- Se mantiene la estructura de dos etapas para demostracin
🧪 Pruebas y Validacin
Verificar el despliegue de Cognito
Una vez ejecutado el workflow, verificamos que los recursos se crearon correctamente:
# Verificar User Pool en AWS CLIaws cognito-idp list-user-pools --max-results 10 --region eu-central-1 | \ jq '.UserPools[] | select(.Name | contains("<your-user-pool-name>"))'# Output# {# "Id": "eu-central-1_XXXXXXXXX",# "Name": "<your-user-pool-name>",# "LambdaConfig": {},# "LastModifiedDate": "2025-08-26T19:42:05.460000+02:00",# "CreationDate": "2025-08-26T19:42:05.460000+02:00"# }# Verificar desde la consola AWS# Cognito User Pools Buscar el pool creado
🚀 Anlisis del Despliegue
Configurado para push en rama main
El despliegue se ejecuta automticamente con cada push a la rama main:
Anlisis de los elementos del .yaml
- Trigger: Push a main activa el workflow
- Plan Stage: Descarga Terraform, inicializa y planifica
- Apply Stage: Aplica los cambios en AWS
- Resultado: Recursos de Cognito desplegados
📊 Resultados y conclusiones
- Integracin entre CodeCatalyst, GitHub y Terraform
- Automatizacin del despliegue de infraestructura
- Despliegue de AWS Cognito usando Terraform
- Pipeline de CI/CD funcional con dos etapas
Recursos creados:
- AWS Cognito User Pool
- Configuracin de cliente para autenticacin
- Polticas de seguridad asociadas
💡 Buenas Prcticas
- Usar Environment especfico para cada etapa de despliegue
- Separar Plan y Apply en etapas diferentes para mejor control, tambin podemos configurar el apply manual, pero lo dejamos para otro post…
- Incluir validacin antes del plan para detectar errores temprano
- Usar Fleet EC2 Large para mejor rendimiento en proyectos grandes
🔗 Referencias y Enlaces tiles
- Post anterior: Probando AWS CodeCatalyst desde el AWS Builder ID
- Post anterior de cognito + terraform
- AWS CodeCatalyst Documentation
- CodeCatalyst Workflows
- Terraform AWS Cognito
- Repositorio de ejemplo
- GitHub Integration with CodeCatalyst
- CodeCatalyst Artifacts
Gracias por leer, Saludos
Artículo original: 🤝Integrando CodeCatalyst con GitHub y Terraform: 🚀 Desplegando AWS Cognito