Thanks to visit codestin.com
Credit goes to github.com

Skip to content

somospragma/cloudops-deployments-pipe-azuredevops-terraform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Pipeline de Infraestructura como Código (IaC) con Terraform y AWS

Este repositorio contiene un template de pipeline para Azure DevOps diseñado para desplegar infraestructura en AWS utilizando Terraform. El pipeline implementa prácticas de CI/CD seguras y eficientes para la gestión de infraestructura como código.

Diagrama Despligue IaC - Azure DevOps - Terraform - AWS

Diagrama de Arquitectura DevOps IaC

Este diagrama muestra la arquitectura completa del flujo de despliegue de infraestructura como código (IaC). Ilustra cómo Azure DevOps orquesta el proceso de CI/CD, desde el repositorio de código hasta el despliegue en AWS. Se visualizan las diferentes etapas del pipeline (Prerequisites, Integration, Validation, Approval y Deploy), así como la interacción con los servicios de AWS como IAM para la gestión de roles, S3 para el almacenamiento del estado de Terraform y los recursos finales desplegados. También se muestra el flujo de aprobación y las notificaciones a los equipos involucrados.

Diagrama de Integración Azure DevOps - AWS

Diagrama de Integración Azure DevOps - AWS

Este diagrama detalla la integración técnica entre Azure DevOps y AWS. Muestra cómo el Service Connection de Azure DevOps se conecta con AWS, el proceso de asunción de roles (role assumption) para acceder a la cuenta de destino, y cómo Terraform utiliza estas credenciales para desplegar la infraestructura. Se visualiza el flujo de autenticación y autorización entre los diferentes componentes, incluyendo cómo el pipeline asume el rol de despliegue para crear y gestionar recursos en la cuenta AWS de destino. También ilustra la separación de responsabilidades y el principio de privilegio mínimo implementado en la arquitectura.

Descripción General

Este pipeline está diseñado para automatizar el despliegue de infraestructura en AWS siguiendo las mejores prácticas de DevOps e IaC. Proporciona un flujo de trabajo completo que incluye:

  • Verificación de prerrequisitos
  • Integración continua (CI)
  • Validación de código
  • Proceso de aprobación
  • Despliegue continuo (CD)

Diseño del Pipeline

El pipeline está estructurado en las siguientes etapas:

  1. Prerequisites: Verifica y configura los requisitos previos necesarios para el despliegue, como la creación del bucket S3 para el estado de Terraform.
  2. Integration (CI): Instala Terraform, configura el entorno y ejecuta análisis de seguridad con Checkov.
  3. Validation: Inicializa Terraform, valida la configuración y genera un plan de despliegue.
  4. Approval: Implementa un proceso de aprobación dual (CloudOps y Arquitectura) con notificaciones.
  5. Deploy (CD): Aplica los cambios de infraestructura utilizando Terraform.

Requisitos Previos

Para utilizar este pipeline, necesitarás:

  • Una cuenta de AWS con los permisos adecuados
  • Un rol IAM en la cuenta de destino para el despliegue
  • Una conexión de servicio de AWS configurada en Azure DevOps
  • Variables de biblioteca configuradas en Azure DevOps

Variables Requeridas

El pipeline utiliza las siguientes variables que deben configurarse en Azure DevOps:

Variable Descripción Ejemplo
AWS_DEPLOY_ROLE ARN del rol IAM para despliegue arn:aws:iam::123456789012:role/TerraformDeployRole
AWS_REGION Región AWS donde se desplegará la infraestructura us-east-1
AWS_SERVICE_CONNECTION Nombre de la conexión de servicio de AWS en Azure DevOps aws-service-connection
CLIENT Identificador del cliente (máx. 5 caracteres) pragma
ENVIRONMENT Entorno de despliegue dev, qa, prod
INFRASTRUCTURE Identificador del componente de infraestructura network, compute, storage
PROJECT Identificador del proyecto hefesto
TERRAFORM_VERSION Versión de Terraform a utilizar 1.5.7
CODE_APP Código de la aplicación (máx. 5 caracteres) app01
CLOUDOPSAPPROVERS Correos electrónicos de los aprobadores de CloudOps [email protected]
ARCHITECTUREAPPROVERS Correos electrónicos de los aprobadores de Arquitectura [email protected]

Estructura del Repositorio

.
├── terraform/
│   ├── iac-pipeline.yml         # Pipeline principal
│   └── templates/
│       ├── prerequisites.yml    # Etapa de prerrequisitos
│       ├── integration.yml      # Etapa de integración
│       ├── validation.yml       # Etapa de validación
│       ├── approval.yml         # Etapa de aprobación
│       └── deploy.yml           # Etapa de despliegue
├── environments/                # Configuraciones específicas por entorno
│   ├── dev/
│   │   ├── .env.yml            # Variables de entorno para desarrollo
│   │   └── terraform.tfvars    # Variables de Terraform para desarrollo
│   ├── qa/
│   │   ├── .env.yml            # Variables de entorno para QA
│   │   └── terraform.tfvars    # Variables de Terraform para QA
│   └── prod/
│       ├── .env.yml            # Variables de entorno para producción
│       └── terraform.tfvars    # Variables de Terraform para producción
├── azure-pipelines.yaml         # Archivo de configuración del pipeline
├── main.tf                      # Configuración principal de Terraform
├── variables.tf                 # Definición de variables de Terraform
├── outputs.tf                   # Definición de salidas de Terraform
├── providers.tf                 # Configuración de proveedores de Terraform
└── README.md                    # Documentación del proyecto

Nota importante: La estructura de directorios terraform/ con el archivo iac-pipeline.yml y los templates puede estar en un repositorio separado y ser referenciada como un template en el archivo azure-pipelines.yaml de tu proyecto, como se muestra en el siguiente ejemplo:

resources:
  repositories:
    - repository: templates
      type: git
      name: pragma-hefesto-template-idp/pragma-hefesto-template-iac-pipeline
      ref: refs/heads/main

extends:
  template: terraform/iac-pipeline.yml@templates
  parameters:
    environmentName: $(ENVIRONMENT)

Esta es la forma recomendada de utilizar este template, permitiendo la reutilización del pipeline en múltiples proyectos.

Cómo Usar Este Template

1. Configuración del Repositorio

  1. Crea un nuevo repositorio en Azure DevOps
  2. Clona este template en tu repositorio
  3. Configura la estructura de directorios y archivos según tus necesidades

2. Configuración de Variables en Azure DevOps

  1. Crea una biblioteca de variables en Azure DevOps para cada entorno (dev, qa, prod)
  2. Configura las variables requeridas en cada biblioteca
  3. Asegúrate de que las variables sensibles estén marcadas como secretas

3. Configuración del Pipeline en Azure DevOps

  1. Crea un nuevo pipeline en Azure DevOps
  2. Configura el pipeline para usar el archivo azure-pipelines.yaml de tu repositorio
  3. Configura las conexiones de servicio necesarias

4. Ejemplo de azure-pipelines.yaml

trigger:
  branches:
    include:
      - main
      - qa
      - develop
  paths:
    exclude:
      - README.md
      - azure-pipelines.yaml

pool:
  vmImage: 'ubuntu-latest'

variables:
  - name: BRANCH_NAME
    value: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
  - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}:
    - template: environments/prod/.env.yml
  - ${{ elseif eq(variables['Build.SourceBranch'], 'refs/heads/qa') }}:
    - template: environments/qa/.env.yml
  - ${{ elseif eq(variables['Build.SourceBranch'], 'refs/heads/develop') }}:
    - template: environments/dev/.env.yml

resources:
  repositories:
    - repository: templates
      type: git
      name: pragma-hefesto-template-idp/pragma-hefesto-template-iac-pipeline
      ref: refs/heads/main

extends:
  template: terraform/iac-pipeline.yml@templates
  parameters:
    environmentName: $(ENVIRONMENT)

Flujo de Trabajo del Pipeline

Etapa de Prerequisites

Esta etapa verifica y configura los requisitos previos necesarios para el despliegue:

  1. Instala AWS CLI
  2. Asume el rol de despliegue en la cuenta destino
  3. Verifica si existe el bucket S3 para el estado de Terraform
  4. Si no existe, crea el bucket con configuraciones de seguridad adecuadas

Etapa de Integration (CI)

Esta etapa prepara el entorno y realiza análisis de seguridad:

  1. Instala Terraform en la versión especificada
  2. Configura las variables de entorno
  3. Instala y configura Checkov
  4. Ejecuta análisis de seguridad con Checkov
  5. Crea y publica artefactos para las siguientes etapas

Etapa de Validation

Esta etapa valida la configuración de Terraform:

  1. Inicializa Terraform con la configuración de backend en S3
  2. Valida la sintaxis y estructura de los archivos de Terraform
  3. Genera un plan de despliegue
  4. Publica el plan como artefacto para revisión

Etapa de Approval

Esta etapa implementa un proceso de aprobación dual:

  1. Envía notificaciones a Google Chat para solicitar aprobaciones
  2. Espera la aprobación del equipo de CloudOps
  3. Espera la aprobación del equipo de Arquitectura
  4. Continúa solo si ambas aprobaciones son concedidas

Etapa de Deploy (CD)

Esta etapa aplica los cambios de infraestructura:

  1. Inicializa Terraform con la configuración de backend en S3
  2. Aplica el plan de Terraform con auto-aprobación

Mejores Prácticas Implementadas

  • Separación de Entornos: Configuraciones específicas para cada entorno (dev, qa, prod)
  • Gestión de Estado Remoto: Uso de S3 para almacenar el estado de Terraform
  • Análisis de Seguridad: Integración con Checkov para detectar problemas de seguridad
  • Proceso de Aprobación: Aprobación dual para cambios en infraestructura
  • Asunción de Roles: Uso de roles IAM para el principio de privilegio mínimo
  • Cifrado: Configuración automática de cifrado para el bucket S3
  • Bloqueo de Acceso Público: Configuración automática de bloqueo de acceso público para el bucket S3

Solución de Problemas

Problemas Comunes

  1. Error al asumir el rol:

    • Verifica que el rol exista en la cuenta de destino
    • Verifica que la conexión de servicio tenga permisos para asumir el rol
    • Verifica la política de confianza del rol
  2. Error al crear el bucket S3:

    • Verifica que el nombre del bucket sea único globalmente
    • Verifica que la región especificada sea válida
    • Verifica que el rol tenga permisos para crear buckets S3
  3. Error en la validación de Terraform:

    • Verifica la sintaxis de los archivos de Terraform
    • Verifica que las variables requeridas estén definidas
    • Verifica que los proveedores estén configurados correctamente

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published