En esta guía, se explica cómo realizar implementaciones azul-verde sin tiempo de inactividad en Grupos de instancias administrados de Compute Engine (MIG) que usan Cloud Build y en Terraform.
Cloud Build te permite automatizar varios procesos de desarrollador, incluida la compilación y la implementación de aplicaciones en varios entornos de ejecución de Google Cloud, como Compute Engine, Google Kubernetes Engine, GKE Enterprise, y Cloud Run Functions.
Los MIG de Compute Engine te permiten operar aplicaciones en varias máquinas virtuales (VMs) idénticas. Puedes hacer que tu cargas de trabajo escalables y con alta disponibilidad aprovechando los MIG servicios, incluidos los de ajuste de escala automático, reparación automática y regionales (en varias zonas) la implementación y la actualización automática. Con el modelo de implementación continua azul-verde, aprenderás a transferir gradualmente el tráfico de los usuarios de un MIG (azul) a otro MIG (verde), ambos en ejecución en producción.
Descripción general del diseño
En el siguiente diagrama, se muestra el modelo de implementación azul-verde que usa el código ejemplo descritos en este documento:
En un nivel alto, este modelo incluye los siguientes componentes:
- Dos grupos de VM de Compute Engine: azul y verde.
- Tres balanceadores de cargas HTTP(S) externos:
- Un balanceador de cargas Azul-verde, que enruta el tráfico de los usuarios finales a el grupo azul o verde de las instancias de VM.
- Un balanceador de cargas Blue que enruta el tráfico de los ingenieros de QA y desarrolladores al grupo de instancias de VM azul.
- Un balanceador de cargas Green que enruta el tráfico de los ingenieros de QA y desarrolladores al grupo de instancias Green.
- Dos conjuntos de usuarios:
- Los usuarios finales que tienen acceso al balanceador de cargas Azul-verde, que señala al grupo de instancias Azul o Verde.
- Ingenieros y desarrolladores de QA que necesiten acceso a ambos conjuntos de grupos para fines de desarrollo y pruebas Pueden acceder tanto a la red móvil como a la Balanceadores de cargas verdes, que los enrutan al grupo de instancias azul y al Grupo de instancias verde, respectivamente.
Los grupos de VMs azul y verde se implementan como MIG de Compute Engine. Las direcciones IP externas se enrutan a las VMs del MIG con HTTP(S) externo de cargas HTTP(S) externos regionales. En la muestra de código descrita en este documento, se usa Terraform para configurar esta infraestructura.
En el siguiente diagrama, se ilustran las operaciones del desarrollador que se realizan en la implementación:
En el diagrama anterior, las flechas rojas representan el flujo de arranque que se produce cuando se configura la infraestructura de implementación por primera vez Las flechas azules representan el flujo de GitOps que ocurre durante cada implementación.
Para configurar esta infraestructura, ejecuta una secuencia de comandos de configuración que inicie el arranque y configura los componentes para el flujo de GitOps.
La secuencia de comandos de configuración ejecuta una canalización de Cloud Build que ejecuta siguientes operaciones:
- Crea un repositorio en Cloud Source Repositories
llamado
copy-of-gcp-mig-simple
y copia el código fuente del repositorio de muestra de GitHub al repositorio de Cloud Source Repositories. - Crea dos activadores de Cloud Build llamados
apply
ydestroy
.
El activador apply
se adjunta a un archivo Terraform llamado main.tfvars
en Cloud Source Repositories. Este archivo contiene las variables de Terraform que representan
los balanceadores de cargas azul y verde.
Para configurar la implementación, actualiza las variables en el archivo main.tfvars
.
El activador apply
ejecuta una canalización de Cloud Build que se ejecuta
tf_apply
y realiza las siguientes operaciones:
- Crea dos MIG de Compute Engine (uno para el verde y otro para el azul), cuatro Instancias de VM de Compute Engine (dos para el MIG verde y dos para el azul) MIG), los tres balanceadores de cargas (azul, verde y el divisor) y tres direcciones IP públicas.
- Imprime las direcciones IP que puedes usar para ver las direcciones IP en las instancias azul y verde.
El activador de destrucción se activa de forma manual para borrar todos los recursos que creó con el activador de aplicación.
Objetivos
Usar Cloud Build y Terraform para configurar la carga de HTTP(S) externa balanceadores de cargas con backends de grupos de instancias de VM de Compute Engine.
Realizar implementaciones azul-verde en las instancias de VM
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
Haz una prueba
Ejecuta la secuencia de comandos de configuración del repositorio de muestra de código de Google:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/setup.sh)
Cuando la secuencia de comandos de configuración solicite el consentimiento del usuario, ingresa yes.
La secuencia de comandos terminará de ejecutarse en unos segundos.
En la consola de Google Cloud, abre la página Historial de compilaciones de Cloud Build:
Haz clic en la compilación más reciente.
Verás la página Detalles de compilación, que muestra un Cloud Build de compilación con tres pasos de compilación: el primero crea un repositorio en Cloud Source Repositories, el segundo paso clona el contenido de la muestra en GitHub a Cloud Source Repositories y, en el tercer paso, se agregan activadores de compilación.
Abre Cloud Source Repositories:
En la lista de repositorios, haz clic en
copy-of-gcp-mig-simple
.En la pestaña Historial, en la parte inferior de la página, verás una confirmación con la descripción
A copy of https://github.com/GoogleCloudPlatform/cloud-build-samples.git
de Cloud Build para crear un repositorio llamadocopy-of-gcp-mig-simple
Abre la página Activadores de Cloud Build:
Para iniciar el proceso de implementación, actualiza el archivo
infra/main.tfvars
:En la ventana de la terminal, crea una carpeta llamada
deploy-compute-engine
:mkdir ~/deploy-compute-engine cd ~/deploy-compute-engine
Clona el repositorio
copy-of-gcp-mig-simple
:gcloud source repos clone copy-of-mig-blue-green
Navega al directorio clonado:
cd ./copy-of-mig-blue-green
Actualiza
infra/main.tfvars
para reemplazar azul por verde:sed -i'' -e 's/blue/green/g' infra/main.tfvars
Agrega el archivo actualizado:
git add .
Confirma el archivo:
git commit -m "Promote green"
Envía el archivo:
git push
Realizar cambios en
infra/main.tfvars
activa la ejecución deapply
. activador, que inicia la implementación.
Abre Cloud Source Repositories:
En la lista de repositorios, haz clic en
copy-of-gcp-mig-simple
.Verás la confirmación con la descripción
Promote green
en el Historial en la parte inferior de la página.Para ver la ejecución del activador
apply
, abre la página Historial de compilaciones en la consola de Google Cloud:Haz clic en la primera compilación para abrir la página Detalles de compilación.
Verás la canalización del activador
apply
con dos pasos de compilación. El primer paso de compilación ejecuta Terraform apply para crear Compute Engine y los recursos de balanceo de cargas para la implementación. En el segundo paso de compilación, se imprime Es la dirección IP en la que se ejecuta la aplicación.Abre la dirección IP correspondiente al MIG verde en un navegador. Verás lo siguiente: una captura de pantalla similar a la siguiente que muestra la implementación:
Ve a la página Grupo de instancias de Compute Engine para ver los grupos de instancias azul y verde:
Abre la página Instancias de VM para ver las cuatro instancias de VM:
Abre la página Direcciones IP externas para ver los tres balanceadores de cargas:
Verás dos activadores de compilación llamados apply
y destroy
. El activador apply
se adjunta al archivo infra/main.tfvars
en la rama main
. Este activador
se ejecuta cada vez que se actualiza el archivo. El activador destroy
es un activador
un activador.
Comprende el código
El código fuente para esta muestra de código incluye lo siguiente:
- Código fuente relacionado con la secuencia de comandos de configuración
- Código fuente relacionado con las canalizaciones de Cloud Build
- Código fuente relacionado con las plantillas de Terraform
Guion de configuración
setup.sh
es la secuencia de comandos de configuración que ejecuta el proceso de arranque y crea la
para la implementación azul-verde. La secuencia de comandos realiza las siguientes acciones
operaciones:
- Habilita Cloud Build, Resource Manager, Compute Engine y las APIs de Cloud Source Repositories.
- Otorga el rol de IAM
roles/editor
a la Cuenta de servicio de Cloud Build en tu proyecto. Este rol es necesarios para que Cloud Build cree y configure componentes de GitOps para la implementación. - Otorga el rol de IAM
roles/source.admin
a la Cuenta de servicio de Cloud Build en tu proyecto. Este rol es necesario para que la cuenta de servicio de Cloud Build cree el Cloud Source Repositories en tu proyecto y clona el contenido de la muestra repositorio de GitHub a tus repositorios de Cloud Source Repositories. Genera una canalización de Cloud Build llamada
bootstrap.cloudbuild.yaml
intercalado, que:- Crea un repositorio nuevo en Cloud Source Repositories.
- Copia el código fuente del repositorio de GitHub de muestra al repositorio nuevo en Cloud Source Repositories.
- Crea los activadores de compilación de aplicación y destrucción.
Canalizaciones de Cloud Build
apply.cloudbuild.yaml
y destroy.cloudbuild.yaml
son los archivos de configuración de Cloud Build que usa la secuencia de comandos de configuración para configurar los recursos del flujo de GitOps. apply.cloudbuild.yaml
contiene dos pasos de compilación:
- Paso de compilación de
tf_apply build
que llama a la funcióntf_install_in_cloud_build_step
, que instala Terraformtf_apply
que crea los recursos que se usan en el flujo de GitOps. Las funcionestf_install_in_cloud_build_step
ytf_apply
se definen enbash_utils.sh
y el paso de compilación usa el comandosource
para llamar de ellos. - Paso de compilación de
describe_deployment
que llama a la funcióndescribe_deployment
que imprime las direcciones IP de la carga balanceadores de cargas.
destroy.cloudbuild.yaml
llama a tf_destroy
, que borra todos los recursos.
creado por tf_apply
.
Las funciones tf_install_in_cloud_build_step
, tf_apply
describe_deployment
y tf_destroy
se definen en el archivo bash_utils.sh
.
Los archivos de configuración de compilación usan el comando source
para llamar a las funciones.
El siguiente código muestra la función tf_install_in_cloud_build_step
que se
definido en bash_utils.sh
. Los archivos de configuración de compilación llaman a esta función para
instalar Terraform sobre la marcha. Crea un bucket de Cloud Storage para
registrar el estado de Terraform.
En el siguiente fragmento de código, se muestra la función tf_apply
que se define en bash_utils.sh
. Primero, llama a terraform init
, que carga todos los módulos y
bibliotecas personalizadas y, luego, ejecuta terraform apply
para cargar las variables desde
el archivo main.tfvars
.
En el siguiente fragmento de código, se muestra la función describe_deployment
que se
definido en bash_utils.sh
. Usa gcloud compute addresses describe
para recuperar las direcciones IP de los balanceadores de cargas con el nombre y las imprime.
En el siguiente fragmento de código, se muestra la función tf_destroy
que se define en
bash_utils.sh
Llama a terraform init
, que carga todos los módulos y datos
y, luego, ejecuta terraform destroy
que descarga las variables de Terraform.
Plantillas de Terraform
Encontrarás todos los archivos y variables de configuración de Terraform en la
carpeta copy-of-gcp-mig-simple/infra/
.
main.tf
: Este es el archivo de configuración de Terraform.main.tfvars
: Este archivo define las variables de Terraform.mig/
ysplitter/
: Estas carpetas contienen los módulos que definen la de cargas HTTP(S) externos regionales. La carpetamig/
contiene el archivo de configuración de Terraform que define el MIG para los balanceadores de cargas azul y verde. El objetivo azul y los MIG verdes son idénticos, por lo que se definen una vez y se crearon instancias de los objetos azul y verde. La configuración de Terraform del balanceador de cargas del divisor está en la carpetasplitter/
.
En el siguiente fragmento de código, se muestra el contenido de infra/main.tfvars
. Integra
contiene tres variables, dos que determinan qué versión de la aplicación implementar
a los grupos Azul y Verde, y una variable para el color activo: azul o
Verde. Los cambios en este archivo activan la implementación.
El siguiente es un fragmento de código de infra/main.tf
. En este fragmento:
- Se define una variable para el proyecto de Google Cloud.
- Google se establece como el proveedor de Terraform.
- Se define una variable para el espacio de nombres. Todos los objetos que crea Terraform se con el prefijo esta variable para que varias versiones de la aplicación puedan implementar en el mismo proyecto y los nombres de los objetos no colisionen entre sí.
- Las variables
MIG_VER_BLUE
,MIG_VER_BLUE
yMIG_ACTIVE_COLOR
son las vinculaciones para las variables en el archivoinfra/main.tfvars
.
En el siguiente fragmento de código de infra/main.tf
, se muestra la creación de una instancia de la
divisor. Este módulo toma el color activo para que el divisor cargue
de red sabe qué MIG implementar la aplicación.
En el siguiente fragmento de código de infra/main.tf
, se definen dos módulos idénticos
para MIG azul y verde. Toma el color, la red y la subred
que se definen en el módulo divisor.
El archivo splitter/main.tf
define los objetos que se crean para el
o un MIG separador. El siguiente es un fragmento de código de splitter/main.tf
que
contiene la lógica para alternar entre el MIG verde y azul. Cuenta con el respaldo
el servicio google_compute_region_backend_service
, que puede dirigir el tráfico a
dos regiones de backend: var.instance_group_blue
o var.instance_group_green
.
capacity_scaler
define cuánto tráfico se debe enrutar.
El siguiente código enruta el 100% del tráfico al color especificado, pero puede actualizar este código para que la implementación de versiones canary enrute el tráfico a un subconjunto a los usuarios.
El archivo mig/main.tf
define los objetos relacionados con el azul y el verde.
MIG. El siguiente fragmento de código de este archivo define la Compute Engine
plantilla de instancias
que se usa para crear los grupos de VM. Ten en cuenta que esta instancia
tiene la propiedad del ciclo de vida de Terraform establecida en create_before_destroy
.
Esto se debe a que, cuando actualizas la versión del grupo, no puedes usar el
plantilla para crear la versión nueva de los grupos cuando aún la están usando
la versión anterior del grupo. Pero si la versión anterior del grupo es
antes de crear la nueva plantilla, habrá un período en el que
las piscinas están fuera de servicio. Para evitar esta situación, configuramos el ciclo de vida de Terraform para
create_before_destroy
para que primero se cree la versión más reciente de un grupo de VM
antes de que se destruya la versión anterior.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra los recursos individuales
Borra los recursos de Compute Engine que creó el activador de aplicación:
Abre la página Activadores de Cloud Build:
En la tabla Activadores, localiza la fila correspondiente a destroy. y haz clic en Ejecutar. Cuando el activador completa la ejecución, el se borran los recursos creados por el activador apply.
Ejecuta el siguiente comando en la ventana de la terminal para borrar los recursos creados durante el inicio:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/teardown.sh)
Borra el proyecto
Borra un proyecto de Google Cloud:
gcloud projects delete PROJECT_ID
¿Qué sigue?
- Obtén más información sobre los activadores de compilación.
- Aprende a ver la procedencia de la compilación.