Automatiza la conmutación por error interregional con el estado del servicio

En esta guía, se muestra cómo implementar un servicio de Cloud Run multirregional y de alta disponibilidad con conmutación por error y recuperación automáticas para el tráfico externo. Puedes configurar un servicio de Cloud Run con estas funciones configurando NEG sin servidores, un balanceador de cargas de aplicaciones externo global y una sonda de disponibilidad. Para obtener más información, consulta Entrega tráfico desde varias regiones.

Objetivos

En este instructivo, podrás:

  1. Prepara la aplicación de ejemplo
  2. Implementa servicios de Cloud Run en dos regiones con sondeos de disponibilidad
  3. Configura un balanceador de cargas de aplicaciones externo global
  4. Agrega tus servicios a través del NEG sin servidores
  5. Prueba la conmutación por error

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Habilita las APIs de Artifact Registry, Cloud Build, Cloud Run Admin, Network Services y Compute Engine.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar las API

  7. Instala y, luego, inicializa gcloud CLI.
  8. Actualiza los componentes, como se indica a continuación:
    gcloud components update
  9. Establece las variables de configuración que se usan en este instructivo:
    PROJECT_ID= gcloud config set core/project PROJECT_ID
    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    SERVICE=health-example
    REGION_A=us-west1
    REGION_B=europe-west1
    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud .

Establece los roles requeridos

Para realizar la implementación desde la fuente con compilación, tú o tu administrador deben otorgar a la cuenta de servicio de Cloud Build los siguientes roles de IAM.

Haz clic para ver los roles necesarios para la cuenta de servicio de Cloud Build

Cloud Build usa automáticamente la cuenta de servicio predeterminada de Compute Engine como la cuenta de servicio predeterminada de Cloud Build para compilar tu código fuente y el recurso de Cloud Run, a menos que anules este comportamiento. Para que Cloud Build pueda compilar tus fuentes, pídele a tu administrador que otorgue el rol de Compilador de Cloud Run (roles/run.builder) a la cuenta de servicio predeterminada de Compute Engine en tu proyecto:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Reemplaza PROJECT_NUMBER por el número de tu proyecto Google Cloudy PROJECT_ID por el ID del proyecto Google Cloud. Para obtener instrucciones detalladas sobre cómo encontrar el ID del proyecto y el número de tu proyecto, consulta Crea y administra proyectos.

El otorgamiento del rol de compilador de Cloud Run a la cuenta de servicio predeterminada de Compute Engine tarda un par de minutos en propagarse.

Para obtener los permisos que tu identidad de servicio necesita para acceder al archivo y al bucket de Cloud Storage, pídele a tu administrador que otorgue a la identidad de servicio el rol de Administrador de almacenamiento (roles/storage.admin). Si deseas obtener más detalles sobre los roles y los permisos de Cloud Storage, consulta IAM para Cloud Storage.

Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con lasGoogle Cloud APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta los permisos de implementación y cómo administrar el acceso.

Prepara la aplicación de ejemplo

A fin de recuperar la muestra de código para su uso, haz lo siguiente:

  1. Clona el repositorio de muestra en tu máquina local:

    git clone https://github.com/GoogleCloudPlatform/golang-samples
    
  2. Ve al directorio que contiene el código de muestra de Cloud Run:

    cd golang-samples/run/service-health
    

Implementa el servicio de Cloud Run en dos regiones con sondeos de disponibilidad

Las conmutaciones por error requieren al menos dos servicios de regiones diferentes. Para implementar tus servicios desde el código fuente en dos regiones diferentes con sondeos de disponibilidad, ejecuta los siguientes comandos:

  1. Implementa tu servicio health-example en us-west1 y europe-west1 desde el directorio del código fuente. Necesitas al menos una instancia mínima para configurar el estado del servicio con sondeos de disponibilidad:

    gcloud beta run deploy $SERVICE \
    --source=. \
    --regions=$REGION_A,$REGION_B \
    --min=10 \
    --readiness-probe httpGet.path="/are_you_ready"
    
  2. Responde a cualquier solicitud para instalar las API obligatorias. Para ello, responde y cuando se te solicite. Solo debes hacer esto una vez en un proyecto. Para responder a otras solicitudes, suministra la plataforma y la región si no configuraste los valores predeterminados de estas como se describe en la sección Antes de comenzar.

Configurar un balanceador de cargas de aplicaciones externo global

Para configurar un balanceador de cargas de aplicaciones externo global que enrute el tráfico entre us-west1 y europe-west1, sigue estos pasos:

  1. Crea un servicio de backend:

    gcloud compute backend-services create $SERVICE-bs \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --global
    
  2. Configura una dirección IP externa estática global para acceder a tu balanceador de cargas:

    gcloud compute addresses create $SERVICE-ip \
      --network-tier=PREMIUM \
      --ip-version=IPV4 \
      --global
    
  3. Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend:

    gcloud compute url-maps create $SERVICE-lb \
      --default-service $SERVICE-bs
    
  4. Crea un Proxy HTTP de destino para enrutar las solicitudes a tu mapa de URLs:

    gcloud compute target-http-proxies create $SERVICE-hp \
    --url-map=$SERVICE-lb
    
  5. Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy:

    gcloud compute forwarding-rules create $SERVICE-fr \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=PREMIUM \
      --address=$SERVICE-ip \
      --target-http-proxy=$SERVICE-hp \
      --global \
      --ports=80
    

Agrega tus servicios a través de un NEG sin servidores

Para agregar los servicios que implementaste en us-west1 y europe-west1 con el NEG sin servidores, sigue estos pasos:

  1. Crea un grupo de extremos de red (NEG) sin servidores para tu servicio de Cloud Run en us-west1 y europe-west1:

    gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_A \
        --region $REGION_A \
        --network-endpoint-type=serverless \
        --cloud-run-service=$SERVICE
    
    gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_B \
        --region $REGION_B \
        --network-endpoint-type=serverless \
        --cloud-run-service=$SERVICE
    
  2. Agrega el NEG sin servidores como un backend a los servicios de backend en us-west1 y europe-west1:

    gcloud compute backend-services add-backend $SERVICE-bs \
        --global \
        --network-endpoint-group=$SERVICE-neg-$REGION_A \
        --network-endpoint-group-region=$REGION_A
    
    gcloud compute backend-services add-backend $SERVICE-bs \
        --global \
        --network-endpoint-group=$SERVICE-neg-$REGION_B \
        --network-endpoint-group-region=$REGION_B
    

Para obtener más opciones de configuración, consulta Configura un balanceador de cargas de aplicaciones externo global con Cloud Run.

Prueba la conmutación por error

Para probar la conmutación por error y garantizar la confiabilidad y la resiliencia de tus servicios de Cloud Run, sigue estos pasos:

  1. Ejecuta el siguiente comando para obtener la dirección IP de tu balanceador de cargas:

    LBIP=$(gcloud compute addresses describe $SERVICE-ip --global --format='value(address)')
    
  2. Opcional: Envía una solicitud a tu balanceador de cargas si tus servicios requieren autenticación:

    curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LBIP
    
  3. Ejecuta el comando echo $LBIP para obtener el valor de la variable LBIP. Esto genera la dirección IP del balanceador de cargas. Por ejemplo, 11.22.33.44

  4. Para probar una conmutación por error, navega a la URL http://LOAD_BALANCER_IP, donde LOAD_BALANCER_IP es el valor que obtuviste en el paso anterior. Haz clic en el botón de activación de tu región en la sección Serving Regions. Esto designa la región en buen estado y la instancia que entrega tráfico:

    Automatiza la conmutación por error entre regiones con el estado del servicio de Cloud Run

Realiza una limpieza

Para evitar cargos adicionales en tu cuenta de Google Cloud , borra todos los recursos que implementaste con este instructivo.

Borra el proyecto

Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y necesitas conservarlo sin los cambios que agregaste en este instructivo, borra los recursos que creaste para el instructivo.

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Elimina recursos de instructivos

  1. Borra el servicio de Cloud Run que implementaste en este instructivo. Los servicios de Cloud Run no generan costos hasta que reciben solicitudes.

    Para borrar tu servicio de Cloud Run, ejecuta el siguiente comando:

    gcloud run services delete SERVICE-NAME

    SERVICE-NAME por el nombre del servicio

    También puedes borrar los servicios de Cloud Run desde la consola deGoogle Cloud .

  2. Quita la configuración de región predeterminada de gcloud que agregaste durante la configuración del instructivo:

     gcloud config unset run/region
    
  3. Quita la configuración del proyecto:

     gcloud config unset project
    

¿Qué sigue?