Configurar Cloud Run, Cloud Functions o App Engine

En esta página, se muestra cómo crear un balanceador de cargas de aplicaciones externo para enrutar solicitudes a backends sin servidores. El término “sin servidores” hace referencia a los siguientes productos de procesamiento sin servidores:

  • App Engine
  • Cloud Functions
  • Cloud Run

La integración de balanceadores de cargas de aplicaciones externos con API Gateway permite que los backends sin servidores aprovechen todas las funciones de Cloud Load Balancing. Si deseas configurar un balanceador de cargas de aplicaciones externo para enrutar el tráfico a una API Gateway, consulta Comienza a usar un balanceador de cargas de aplicaciones externo para API Gateway. La compatibilidad del balanceador de cargas de aplicaciones externo con API Gateway se encuentra en versión preliminar.

Los NEG sin servidores te permiten usar las apps sin servidores de Google Cloud con balanceadores de cargas de aplicaciones externos. Después de configurar un balanceador de cargas con el backend de NEG sin servidores, las solicitudes al balanceador de cargas se enrutan al backend de la app sin servidores.

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

Antes de comenzar

  1. Implementa un servicio de App Engine, Cloud Functions o Cloud Run.
  2. Si aún no lo hiciste, instala Google Cloud CLI.
  3. Configura permisos.
  4. Agrega un recurso de certificado SSL.

Implementa un servicio de App Engine, Cloud Functions o Cloud Run

En las instrucciones de esta página, se supone que ya tienes un servicio de Cloud Run, Cloud Functions o App Engine en ejecución.

En el ejemplo de esta página, se usa la guía de inicio rápido de Python de Cloud Run a fin de implementar un servicio de Cloud Run en la región us-central1. En el resto de esta página, se muestra cómo configurar un balanceador de cargas de aplicaciones externo que usa un backend de NEG sin servidores para enrutar las solicitudes a este servicio.

Si aún no implementaste una app sin servidores o si quieres probar un NEG sin servidores con una app de muestra, usa una de las siguientes guías de inicio rápido. Puedes crear una app sin servidores en cualquier región, pero debes usar la misma región más adelante para crear el NEG sin servidores y el balanceador de cargas.

Cloud Run

Para crear una aplicación Hello World sencilla, empaquetarla en una imagen de contenedor y, luego, implementar la imagen de contenedor en Cloud Run, consulta la Guía de inicio rápido: Compila e implementa.

Si ya subiste un contenedor de muestra a Container Registry, consulta la Guía de inicio rápido: Implementa un contenedor de muestra ya compilado.

Cloud Functions

Consulta Cloud 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:

Instala Google Cloud CLI

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

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

Configura permisos

Para seguir esta guía, debes crear un NEG sin servidores y un balanceador de cargas de HTTP(S) externo en un proyecto. Debes ser propietario o editor de un proyecto o tener las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear balanceador de cargas y componentes de herramientas de redes Administrador de redes
Crear y modificar los NEG Administrador de instancias de procesamiento
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 usen para llegar a tu balanceador de cargas.

Console

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

    Ir a Direcciones IP externas

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

  3. En Nombre, ingresa example-ip.

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

  5. Para Versión de la IP, selecciona IPv4.

  6. En Tipo, selecciona Global.

  7. Haz clic en Reservar.

gcloud

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

Toma nota de la dirección IPv4 que se reservó:

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

Crea un recurso de certificado SSL

Si quieres crear un balanceador de cargas de HTTPS, debes agregar un recurso de certificado SSL al frontend del balanceador de cargas. Crea un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.

  • Certificados administrados por Google. Se recomienda usar certificados administrados por Google, ya que Google Cloud obtiene, administra y renueva estos certificados de manera automática. Si quieres crear un certificado administrado por Google, debes tener un dominio y los registros DNS para ese dominio a fin de que se aprovisione el certificado. Si aún no tienes un dominio, puedes obtener uno en Google Domains. Si deseas obtener más información, consulta Primeros pasos con Google Domains. Además, deberás actualizar el registro DNS A del dominio a fin de que apunte a la dirección IP del balanceador de cargas que se creó en el paso anterior (example-ip). Para obtener instrucciones detalladas, consulta Usa certificados administrados por Google.

  • Certificados autofirmados. Si no deseas configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para realizar una prueba.

En este ejemplo, se supone que ya creaste un recurso de certificado SSL.

Si quieres probar este proceso sin crear un recurso de certificado SSL (o un dominio requerido por los certificados administrados por Google), puedes seguir las instrucciones de esta página para configurar un balanceador de cargas de HTTP en su lugar.

Crea el balanceador de cargas

En el siguiente diagrama, el balanceador de cargas usa un backend de NEG sin servidores para dirigir las solicitudes a un servicio de Cloud Run sin servidores. En este ejemplo, usamos la guía de inicio rápido de Python de Cloud Run para implementar un servicio de Cloud Run.

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

Debido a que las verificaciones de estado no admiten los servicios de backend con backends de NEG sin servidores, no necesitas crear una regla de firewall que permita verificaciones de estado si el balanceador de cargas solo tiene backends de NEG sin servidores.

Console

Inicia la configuración

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

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (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 de 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 cargas, selecciona Balanceador de cargas de aplicaciones clásico y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. Para el Nombre del balanceador de cargas, ingresa serverless-lb.
  2. Mantén la ventana abierta para continuar.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. En Nombre, ingresa un nombre.
  3. Si quieres crear un balanceador de cargas de HTTPS, debes tener un certificado SSL (gcloud compute ssl-certificates list).

    Recomendamos usar un certificado administrado por Google como se describió antes.

  4. Para configurar un balanceador de cargas de aplicaciones externo, completa los campos como se muestra a continuación.

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

    Propiedad Valor (escribe un valor o selecciona una opción como se especifica)
    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 existente o crea uno nuevo.

    Si quieres crear un balanceador de cargas de HTTPS, debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.
    Para crear un certificado administrado por Google, debes tener un dominio. El registro A del dominio debe resolverse en la dirección IP del balanceador de cargas (en este ejemplo, example-ip). Se recomienda usar certificados administrados por Google porque Google Cloud obtiene, administra y renueva estos certificados de forma automática. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para las pruebas.
    (Opcional) Habilitar el redireccionamiento de HTTP a HTTPS Usa esta casilla de verificación para habilitar los redireccionamientos HTTP a HTTPS.

    Si habilitas esta casilla de verificación, se creará un balanceador de cargas HTTP parcial adicional que usa la misma dirección IP que tu balanceador de cargas HTTPS y redirecciona las solicitudes HTTP al frontend de HTTPS del balanceador de cargas.

    Esta casilla de verificación solo se puede seleccionar cuando 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 buckets de backend, haz clic en Crear un servicio de backend.
  3. En Nombre, ingresa un nombre.
  4. En Tipo de backend, selecciona Grupo de extremos de red sin servidores.
  5. Deja Protocolo sin modificar. Este parámetro se ignora.
  6. En la sección Backends, para Nuevo backend, selecciona Crear grupo de extremos de red sin servidores.
  7. En Nombre, ingresa un nombre.
  8. Haz clic en Crear.
  9. En la sección Backend nuevo, haz clic en Listo.
  10. Selecciona Habilitar Cloud CDN.
  11. Modifica la configuración del modo de almacenamiento en caché y TTL (opcional).
  12. Haz clic en Crear.

Reglas de enrutamiento

Las reglas de enrutamiento determinan cómo se dirige el tráfico. Para configurar el enrutamiento, deberás configurar reglas de host y comparadores de rutas de acceso, que son componentes de configuración de un mapa de URL del balanceador de cargas de aplicaciones externo.

  1. Haz clic en Reglas de host y ruta.

  2. Conserva los hosts y las rutas de acceso predeterminados. Para este ejemplo, todas las solicitudes se envían al servicio de backend que creaste en el paso anterior.

Revisa la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa toda la configuración.
  3. Opcional: Haz clic en Código equivalente a fin de ver la solicitud a la API de REST que se usará para crear el balanceador de cargas.
  4. Haz clic en Crear.
  5. Espera a que se cree el balanceador de cargas.
  6. Haz clic en el nombre del balanceador de cargas (serverless-lb).
  7. Anote la dirección IP del balanceador de cargas para la siguiente tarea. Se hace referencia a ella como IP_ADDRESS.

gcloud

  1. Crea un NEG sin servidores para tu app sin servidores. Si quieres ver más opciones, consulta la guía de referencia de gcloud para 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}'
       

    Para establecer el modo de almacenamiento en caché, reemplaza CACHE_MODE por uno de los siguientes valores:

    • CACHE_All_STATIC (predeterminado): Almacena en caché el contenido estático de forma automática.
    • USE_ORIGIN_HEADERS: Se requiere que se configuren encabezados de almacenamiento en caché válidos para el contenido de la caché en el origen.
    • FORCE_CACHE_ALL: Almacena en caché todo el contenido, sin importar las directivas private, no-store o no-cache en los encabezados de respuesta Cache-Control.

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

  3. Agrega el NEG sin servidores como un 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 URL 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 URL de ejemplo solo se orienta a un servicio de backend que representa una sola app sin servidores, por lo que no es necesario configurar reglas de host ni comparadores de rutas de acceso. Si tienes más de un servicio de backend, puedes usar reglas de host a fin de dirigir las solicitudes a diferentes servicios según el nombre de host y configurar comparadores de rutas de acceso para dirigir solicitudes a diferentes servicios según la ruta de acceso de la solicitud.

  5. Si quieres crear un balanceador de cargas de HTTPS, debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado. Se recomienda usar certificados administrados por Google, ya que Google Cloud obtiene, administra y renueva estos certificados de manera automática.

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

    Si deseas crear un recurso de certificado SSL que administra Google, ingresa el comando siguiente:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --domains DOMAIN
       
    Si deseas crear un recurso de certificado SSL autoadministrado, haz lo siguiente:
       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 al mapa de URL.

    Para un balanceador de cargas de HTTPS, crea un proxy HTTPS de destino. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas de HTTPS, por lo que también debes cargar el 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 enrutar las solicitudes entrantes al proxy.

    Para un balanceador de cargas de HTTPS, ingresa el siguiente comando:

       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
       

Conecta tu dominio al balanceador de cargas

Después de crear el balanceador de cargas, toma nota de la dirección IP asociada con este: por ejemplo, 30.90.80.100. Para apuntar tu dominio al balanceador de cargas, crea un registro A mediante tu servicio de registro de dominio. Si agregaste varios dominios a tu certificado SSL, debes agregar un registro A para cada uno, que apunte a la dirección IP del balanceador de cargas. Por ejemplo, para crear registros A para 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 Agrega, modifica y borra registros.

Prueba el balanceador de cargas

Ahora que ya configuraste el balanceador de cargas, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas. Si configuraste un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede llevar un tiempo en completarse, por lo que puedes comenzar a usar la dirección IP para realizar pruebas.

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

    Ir a Balanceo de cargas

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

  3. Toma nota de la Dirección IP del balanceador de cargas.

  4. En el caso de un balanceador de cargas de HTTPS, puedes probar tu balanceador de cargas mediante un navegador web en https://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Deberías dirigirte a la página principal del servicio helloworld.
    Si eso no funciona y usas un certificado administrado por Google, confirma que el estado del recurso de certificado sea ACTIVO. Para obtener más información, consulta el estado de los recursos del certificado SSL administrado por Google.
    Si usaste un certificado autofirmado para las pruebas, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado. Haz clic en la advertencia para ver la página real.

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

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

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

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

    Si usas un certificado autofirmado, también debes especificar la marca -k. 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 no se deben ignorar sus advertencias.

    El resultado debe contener los encabezados personalizados Cache-ID y Cache-Status que configuraste para indicar si la respuesta se entregó desde la caché:

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

    El resultado contiene los encabezados de respuesta que indican que hubo un acierto de caché, lo que significa que el recurso estático de la app sin servidores se entregó al usuario desde una caché perimetral de Cloud CDN.

    El encabezado cache-status indica el valor disabled para las respuestas que no se almacenan en caché en Cloud CDN. Para las respuestas almacenadas en caché, el valor del encabezado cache-status es hit, miss o revalidated.

Inhabilita Cloud CDN

Console

Inhabilita Cloud CDN para un solo servicio de backend

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

    Ir a Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Editar.

  3. Desmarca las casillas de verificación de los servicios de backend que deseas que dejen de usar Cloud CDN.

  4. Haz clic en Actualizar.

Quita Cloud CDN de todos los servicios de backend de un origen

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

    Ir a Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Quitar.

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

gcloud

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

Inhabilitar Cloud CDN no invalida ni borra definitivamente las memorias caché. Si desactivas Cloud CDN y vuelves a activarlo, es probable que la mayor parte del contenido almacenado en caché, o todo ese contenido, aún siga almacenado en caché. Para evitar que las memorias caché usen el contenido, debes invalidarlo.

¿Qué sigue?