🤝Integrando CodeCatalyst con GitHub y Terraform: 🚀 Desplegando AWS Cognito

5 min de lectura Ver original en Hashnode
Compartir:

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

📋 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:

alt text />

Aceptamos trminos y condiciones:

alt text />

Especificar el repositorio y aceptar:

alt text />

# 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:

Workflow ejecutndose />

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: EC2 con Fleet: Linux.x86-64.Large para mejor rendimiento
  • Environment: dev con conexin a la cuenta AWS
  • Artefactos: Transfiere el plan entre etapas (con incidencia conocida)
  • Variables: environment=dev y region=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

Gracias por leer, Saludos


Artículo original: 🤝Integrando CodeCatalyst con GitHub y Terraform: 🚀 Desplegando AWS Cognito