Configurar Cloud Run, Cloud Functions o App Engine

En esta página se explica cómo crear un balanceador de carga de aplicaciones externo para enrutar solicitudes a back-ends sin servidor. En este caso, el término "sin servidor" hace referencia a los siguientes productos de computación sin servidor:

  • App Engine
  • Cloud Run Functions
  • Cloud Run

La integración de balanceadores de carga de aplicaciones externos con API Gateway permite que tus backends sin servidor aprovechen todas las funciones que ofrece Cloud Load Balancing. Para configurar un balanceador de carga de aplicación externo que enrute el tráfico a una API Gateway, consulta Primeros pasos con un balanceador de carga de aplicación externo para API Gateway. La compatibilidad con el balanceador de carga de aplicaciones externo para API Gateway está en vista previa.

Los NEGs sin servidor te permiten usar Google Cloud aplicaciones sin servidor con balanceadores de carga de aplicaciones externos. Una vez que hayas configurado un balanceador de carga con el backend de NEG sin servidor, las solicitudes al balanceador de carga se dirigirán al backend de la aplicación sin servidor.

Para obtener más información sobre los NEGs sin servidor, consulta la descripción general de NEGs sin servidor.

Antes de empezar

  1. Despliega un servicio de App Engine, Cloud Run functions o Cloud Run.
  2. Si aún no lo has hecho, instala la CLI de Google Cloud.
  3. Configura los permisos.
  4. Añade un recurso de certificado SSL.

Desplegar un servicio de App Engine, Cloud Run functions o Cloud Run

En estas instrucciones, se presupone que ya tienes un servicio Cloud Run, Cloud Run functions o App Engine en ejecución.

En el ejemplo de esta página, hemos usado la guía de inicio rápido de Python de Cloud Run para desplegar un servicio de Cloud Run en la región us-central1. En el resto de esta página se explica cómo configurar un balanceador de carga de aplicaciones externo que utilice un backend de NEG sin servidor para enrutar las solicitudes a este servicio.

Si aún no has implementado una aplicación sin servidor o quieres probar una NEG sin servidor con una aplicación de ejemplo, usa una de las siguientes guías de inicio rápido. Puedes crear una aplicación sin servidor en cualquier región, pero debes usar la misma región más adelante para crear el NEG sin servidor y el balanceador de carga.

Cloud Run

Para crear una aplicación Hello World sencilla, empaquétala en una imagen de contenedor y, luego, despliega la imagen de contenedor en Cloud Run. Consulta la guía de inicio rápido: compilación y despliegue.

Si ya has subido un contenedor de muestra a Container Registry, consulta la guía de inicio rápido sobre cómo desplegar un contenedor de ejemplo prediseñado.

Cloud Run Functions

Consulta Cloud Run Functions: guía de inicio rápido de Python.

App Engine

Consulta las siguientes guías de inicio rápido de App Engine para Python 3:

Instalar Google Cloud CLI

Instala Google Cloud CLI. Consulta la descripción general de gcloud para obtener información conceptual y sobre la instalación de la herramienta.

Si no has ejecutado la CLI de gcloud anteriormente, ejecuta primero gcloud init para inicializar tu directorio de gcloud.

Configurar permisos

Para seguir esta guía, debes crear un NEG sin servidor y un balanceador de carga HTTP(S) externo en un proyecto. Debes ser propietario o editor de un proyecto, o bien tener los siguientes roles de gestión de identidades y accesos de Compute Engine:

Tarea Rol obligatorio
Crear balanceadores de carga y componentes de red Administrador de red
Crear y modificar grupos de puntos de conexión de red Administrador de instancias de Compute
Crear y modificar certificados SSL Administrador de seguridad

Reservar una dirección IP externa

Ahora que tus servicios están en funcionamiento, configura una dirección IP externa estática global que tus clientes usan para llegar a tu balanceador de carga.

Consola

  1. En la Google Cloud consola, ve a la página Direcciones IP externas.

    Ir a direcciones IP externas

  2. Haz clic en Reservar dirección IP estática externa.

  3. En Nombre, escribe example-ip.

  4. En Nivel de servicio de red, selecciona Premium.

  5. En Versión de IP, selecciona IPv4.

  6. En Type (Tipo), selecciona Global (Global).

  7. Haz clic en Reservar.

gcloud

gcloud compute addresses create EXAMPLE_IP \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Anota la dirección IPv4 que se ha reservado:

gcloud compute addresses describe EXAMPLE_IP \
    --format="get(address)" \
    --global

Sustituye EXAMPLE_IP por el nombre de la dirección IP.

Crear un recurso de certificado SSL

Para crear un balanceador de carga HTTPS, debes añadir un recurso de certificado SSL al frontend del balanceador de carga. Crea un recurso de certificado SSL con un certificado SSL gestionado por Google o un certificado SSL autogestionado.

  • Certificados gestionados por Google. Te recomendamos que uses certificados gestionados por Google porque Google Cloud obtiene, gestiona y renueva estos certificados automáticamente. Para crear un certificado gestionado por Google, debes tener un dominio y los registros DNS de ese dominio para que se pueda aprovisionar el certificado.

    Además, debe actualizar el registro A de DNS del dominio para que apunte a la dirección IP del balanceador de carga que ha creado en el paso anterior. Si tiene varios dominios en un certificado gestionado por Google, debe actualizar los registros DNS de todos los dominios y subdominios para que apunten a la dirección IP de su balanceador de carga. Para obtener instrucciones detalladas, consulta Usar certificados gestionados por Google.

  • Certificados autofirmados. Si no quieres configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para hacer pruebas.

En este ejemplo se da por hecho que ya has creado un recurso de certificado SSL.

Si quieres probar este proceso sin crear un recurso de certificado SSL (o un dominio, como requieren los certificados gestionados por Google), puedes seguir las instrucciones de esta página para configurar un balanceador de carga HTTP.

Crear el balanceador de carga

En el siguiente diagrama, el balanceador de carga usa un backend de NEG sin servidor para dirigir las solicitudes a un servicio de Cloud Run sin servidor. En este ejemplo, hemos usado la guía de inicio rápido de Python de Cloud Run para desplegar un servicio de Cloud Run.

Arquitectura de balanceador de carga de aplicación externo para una aplicación de Cloud Run.
Arquitectura de balanceador de carga de aplicación externo para una aplicación de Cloud Run (haz clic para ampliar).

Como las comprobaciones de estado no se admiten en los servicios de backend con backends de NEG sin servidor, no es necesario que cree una regla de firewall que permita las comprobaciones de estado si el balanceador de carga solo tiene backends de NEG sin servidor.

Consola

Selecciona el tipo de balanceador de carga

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en Crear balanceador de carga.
  3. En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Público o interno, selecciona Público (externo) y haz clic en Siguiente.
  5. En Implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo globales y haz clic en Siguiente.
  6. En Generación del balanceador de carga, selecciona Balanceador de carga de aplicación clásico y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. En el nombre del balanceador de carga, introduce serverless-lb.
  2. Mantén la ventana abierta para continuar.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. En Name (Nombre), escribe un nombre.
  3. Para crear un balanceador de carga HTTPS, debe tener un certificado SSL (gcloud compute ssl-certificates list).

    Te recomendamos que uses un certificado gestionado por Google, tal como se describe anteriormente.

  4. Para configurar un balanceador de carga de aplicación externo, rellena los campos como se indica a continuación.

    Verifica que las siguientes opciones estén configuradas con estos valores:

    Propiedad Valor (escribe un valor o selecciona una opción según se especifique)
    Protocolo HTTPS
    Nivel de servicio de red Premium
    Versión de IP IPv4
    Dirección IP example-ip
    Puerto 443
    Certificado Selecciona un certificado SSL o crea uno.

    Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL con un certificado SSL gestionado por Google o con un certificado SSL autogestionado.
    Para crear un certificado gestionado por Google, debes tener un dominio. El registro A del dominio debe resolverse en la dirección IP del balanceador de carga que has creado anteriormente en este procedimiento. Te recomendamos que uses certificados gestionados por Google porque Google Cloud obtiene, gestiona y renueva estos certificados automáticamente. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para hacer pruebas.
    Opcional: Habilita la opción de redireccionamiento de HTTP a HTTPS Usa esta casilla para habilitar las redirecciones de HTTP a HTTPS.

    Si marcas esta casilla, se creará un balanceador de carga HTTP parcial adicional que usará la misma dirección IP que tu balanceador de carga HTTPS y redirigirá las solicitudes HTTP al frontend HTTPS de tu balanceador de carga.

    Esta casilla solo se puede marcar si se selecciona el protocolo HTTPS y se usa una dirección IP reservada.

  5. Haz clic en Listo.

Configuración de backend

  1. Haz clic en Configuración de backend.
  2. En la lista Servicios y segmentos de backend, haz clic en Crear un servicio de backend.
  3. En Name (Nombre), escribe un nombre.
  4. En Tipo de backend, selecciona Grupo de endpoints de red sin servidor.
  5. No modifiques el valor de Protocol. Este parámetro se ignora.
  6. En la sección Backends (Backends), en New backend (Nuevo backend), selecciona Create Serverless network endpoint group (Crear grupo de endpoints de red sin servidor).
  7. En Name (Nombre), escribe un nombre.
  8. Haz clic en Crear.
  9. En la sección Nuevo backend, haz clic en Hecho.
  10. Selecciona Habilitar Cloud CDN.
  11. Opcional: Modifica los ajustes de modo de caché y TTL.
  12. Haz clic en Crear.

Reglas de enrutamiento

Las reglas de enrutamiento determinan cómo se dirige el tráfico. Para configurar el enrutamiento, debes configurar reglas de host y matchers de ruta, que son componentes de configuración del mapa de URLs de un balanceador de carga de aplicaciones externo.

  1. Haz clic en Reglas de host y ruta.

  2. Mantén los hosts y las rutas predeterminados. En este ejemplo, todas las solicitudes se dirigen al servicio de backend creado en el paso anterior.

Revisar la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa todos los ajustes.
  3. Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
  4. Haz clic en Crear.
  5. Espera a que se cree el balanceador de carga.
  6. Haz clic en el nombre del balanceador de carga (serverless-lb).
  7. Anota la dirección IP del balanceador de carga para la siguiente tarea. Se denomina IP_ADDRESS.

gcloud

  1. Crea un NEG sin servidor para tu aplicación sin servidor. Para ver más opciones, consulta la gcloud guía de referencia de gcloud compute network-endpoint-groups create.
  2. Crea un servicio de backend.
       gcloud compute backend-services create BACKEND_SERVICE_NAME \
           --load-balancing-scheme=LOAD_BALANCING_SCHEME \
           --global \
           --enable-cdn \
           --cache-mode=CACHE_MODE \
           --custom-response-header='Cache-Status: {cdn_cache_status}' \
           --custom-response-header='Cache-ID: {cdn_cache_id}'
       

    Define el modo de caché. Para ello, sustituye CACHE_MODE por uno de los siguientes valores:

    • CACHE_All_STATIC (valor predeterminado): almacena en caché automáticamente el contenido estático.
    • USE_ORIGIN_HEADERS: requiere que el origen defina encabezados de almacenamiento en caché válidos para almacenar contenido en caché.
    • FORCE_CACHE_ALL: almacena en caché todo el contenido, ignorando las directivas private, no-store o no-cache de los encabezados de respuesta Cache-Control.

    Para obtener información sobre las directivas de caché que interpreta Cloud CDN y sobre lo que no almacena en caché, consulta Contenido que se puede almacenar en caché y Contenido que no se puede almacenar en caché.

  3. Añade el NEG sin servidor como backend al servicio de backend:
       gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
           --global \
           --network-endpoint-group=SERVERLESS_NEG_NAME \
           --network-endpoint-group-region=us-central1
       
  4. Crea un mapa de URLs para enrutar las solicitudes entrantes al servicio de backend:
       gcloud compute url-maps create URL_MAP_NAME \
           --default-service BACKEND_SERVICE_NAME
       

    Este mapa de URLs de ejemplo solo se dirige a un servicio de backend que representa una aplicación sin servidor, por lo que no es necesario configurar reglas de host ni matchers de ruta. Si tienes más de un servicio de backend, puedes usar reglas de host para dirigir las solicitudes a diferentes servicios en función del nombre de host. También puedes configurar matchers de ruta para dirigir las solicitudes a diferentes servicios en función de la ruta de la solicitud.

  5. Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSLque usar en el proxy HTTPS de destino. Puedes crear un recurso de certificado SSL con un certificado SSL gestionado por Google o con un certificado SSL autogestionado. Te recomendamos que uses certificados gestionados por Google, ya que Google Cloud obtiene, gestiona y renueva estos certificados automáticamente.

    Para crear un certificado gestionado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para hacer pruebas.

    Para crear un recurso de certificado SSL gestionado por Google, sigue estos pasos:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --domains DOMAIN
       
    Para crear un recurso de certificado SSL autogestionado, sigue estos pasos:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --certificate CRT_FILE_PATH \
           --private-key KEY_FILE_PATH
       
  6. Crea un proxy HTTP(S) de destino para enrutar las solicitudes a tu mapa de URLs.

    En el caso de un balanceador de carga HTTPS, crea un proxy HTTPS de destino. El proxy es la parte del balanceador de carga que contiene el certificado SSL para el balanceo de carga HTTPS, por lo que también debes cargar tu certificado en este paso.

       gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --ssl-certificates=SSL_CERTIFICATE_NAME \
          --url-map=URL_MAP_NAME
       
  7. Crea una regla de reenvío para dirigir las solicitudes entrantes al proxy.

    En el caso de un balanceador de carga HTTPS:

       gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
           --load-balancing-scheme=EXTERNAL \
           --network-tier=PREMIUM \
           --address=EXAMPLE_IP \
           --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
           --global \
           --ports=443
       

Conectar tu dominio a tu balanceador de carga

Una vez creado el balanceador de carga, anota la dirección IP asociada a él. Por ejemplo, 30.90.80.100. Para dirigir tu dominio a tu balanceador de carga, crea un registro A con tu servicio de registro de dominios. Si has añadido varios dominios a tu certificado SSL, debes añadir un registro A para cada uno de ellos, todos apuntando a la dirección IP del balanceador de carga. Por ejemplo, para crear registros A de www.example.com y example.com, usa lo siguiente:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Si usas Cloud DNS como proveedor de DNS, consulta el artículo sobre cómo añadir, modificar y eliminar registros.

Probar el balanceador de carga

Ahora que has configurado el balanceador de carga, puedes empezar a enviar tráfico a la dirección IP del balanceador de carga. Si has configurado un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede tardar en completarse, por lo que puedes empezar usando la dirección IP para hacer pruebas.

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haz clic en el balanceador de carga que acabas de crear.

  3. Anota la dirección IP del balanceador de carga.

  4. En el caso de un balanceador de carga HTTPS, puedes probarlo con un navegador web. Para ello, ve a https://IP_ADDRESS. Sustituye IP_ADDRESS por la dirección IP del balanceador de carga. Se te debería dirigir a la página principal del servicio helloworld.
    Si no funciona y usas un certificado gestionado por Google, confirma que el estado de tu recurso de certificado es ACTIVE. Para obtener más información, consulta el estado del recurso de certificado SSL gestionado por Google.
    Si has usado un certificado autofirmado para hacer pruebas, tu navegador mostrará una advertencia. Debes indicar explícitamente a tu navegador que acepte un certificado autofirmado. Haz clic en la advertencia para ver la página.

  5. Para verificar las respuestas de la caché, usa curl desde la línea de comandos de tu máquina local. Sustituye IP_ADDRESS por la dirección IPv4 del balanceador de carga.

    Si usas un certificado gestionado por Google, prueba el dominio que apunta a la dirección IP del balanceador de carga. Por ejemplo:

    curl -v -o/dev/null https://IP_ADDRESS
    

    Si utilizas un certificado autofirmado, también debes especificar la marca -k. Por ejemplo:

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    La opción -k de curl permite que curl funcione si tienes un certificado autofirmado. Solo debes usar el parámetro -k para probar tu propio sitio. En circunstancias normales, un certificado válido es una medida de seguridad importante y las advertencias de certificados no deben ignorarse.

    El resultado debe contener los encabezados personalizados Cache-ID y Cache-Status que hayas configurado para indicar si la respuesta se ha proporcionado desde la caché:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    El resultado contiene los encabezados de respuesta que indican que se ha producido un acierto de caché, lo que significa que el recurso estático de la aplicación sin servidor se ha proporcionado al usuario desde una caché perimetral de Cloud CDN.

    El encabezado cache-status indica el valor disabled de las respuestas que no están almacenadas en caché en Cloud CDN. En el caso de las respuestas almacenadas en caché, el valor del encabezado cache-status es hit, miss o revalidated.

Inhabilitar Cloud CDN

Consola

Inhabilitar Cloud CDN en un solo servicio de backend

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

    Ir a Cloud CDN

  2. En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Editar.

  3. Desmarque las casillas de los servicios backend que quiera dejar de usar en Cloud CDN.

  4. Haz clic en Actualizar.

Quitar Cloud CDN de todos los servicios backend de un origen

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

    Ir a Cloud CDN

  2. En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Quitar.

  3. Para confirmar la acción, haz clic en Eliminar.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME 
--no-enable-cdn

Si inhabilita Cloud CDN, no se invalidarán ni se purgarán las cachés. Si desactivas Cloud CDN y lo vuelves a activar, es posible que la mayoría o todo tu contenido almacenado en caché siga en caché. Para evitar que las cachés usen el contenido, debes invalidarlo.

Siguientes pasos