Migra un dominio personalizado de App Engine a Cloud Load Balancing

ID de región

REGION_ID es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.

Obtén más información acerca de los ID de región.

En esta guía, se explica cómo configurar un extremo público nuevo para tu aplicación de App Engine con Cloud Load Balancing.

Con Cloud Load Balancing, configuras el extremo de dominio personalizado como un servicio de frontend y la app de App Engine como un servicio de backend mediante un grupo de extremos de red (NEG) sin servidores. El tráfico al extremo del servicio de frontend de Cloud Load Balancing se enruta de la misma manera que antes, incluidas todas las reglas de enrutamiento que definas en el archivo dispatch.yaml de tu app.

En el siguiente diagrama, se describen los cambios en tu app:

Toma un dominio personalizado de App Engine y cambia las solicitudes entrantes a un servicio de frontend de Cloud Load Balancing que distribuye las solicitudes al servicio de backend de App Engine.

Cuando migras a Cloud Load Balancing, obtienes una flexibilidad mucho mayor para controlar el tráfico cuando llegas a tu dominio, como entregar contenido estático desde Cloud Storage o agregar servicios que se ejecutan en otras plataformas de procesamiento, como Cloud Ejecuta y Google Kubernetes Engine.

También obtienes acceso a funciones clave de Google Cloud que no están disponibles en App Engine, incluidas las siguientes:

  • Google Cloud Armor, para mejorar la seguridad con protección avanzada contra DSD, controles de acceso basados en IP y en la ubicación geográfica, reglas de firewall de aplicaciones web y mucho más
  • Cloud CDN, para entrega de contenido almacenado en caché
  • Políticas de SSL, para administrar las características de SSL y las versiones de TLS que aceptará tu app

En esta guía, se abordan las instrucciones de configuración para cambiar las solicitudes entrantes de tu servicio de App Engine con un dominio personalizado a un servicio de frontend de Cloud Load Balancing:

  1. Asegúrate de tener los permisos necesarios
  2. Crea un certificado administrado por Google
  3. Configura Cloud Load Balancing
  4. Prueba el balanceador de cargas
  5. Conecta tu dominio al balanceador de cargas
  6. Borra la asignación del dominio personalizado de App Engine
  7. Configura el control de entrada para permitir solo el acceso mediante Cloud Load Balancing

Antes de comenzar

Ten una app de App Engine con un dominio personalizado configurado en la configuración de App Engine

Configura permisos

Para seguir esta guía, debes crear un certificado administrado por Google, 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 los siguientes roles de IAM:

Tarea Rol requerido
Crea un certificado SSL administrado por Google con el Administrador de certificados Propietario del Administrador de certificados o Editor del administrador de certificados, y Administrador del balanceador de cargas de Compute
Actualiza los registros DNS del dominio personalizado Administrador de Cloud DNS si usas Cloud DNS como tu solución de DNS.

Si usas otro proveedor de DNS, necesitarás permisos para agregar y actualizar los registros DNS del dominio personalizado.
Crear balanceador de cargas y componentes de herramientas de redes Administrador de red de Compute
Crear y modificar los NEG Administrador de instancias de procesamiento
Crear y modificar certificados SSL Administrador de seguridad de Compute
Borra dominios personalizados en la configuración de App Engine Rol de administrador de App Engine o un rol que contenga el permiso appengine.applications.update.

Crea un certificado SSL administrado por Google

Un certificado SSL administrado por Google (también conocido como certificado TLS en la documentación) permite que Google Cloud obtenga, administre y renueve certificados de forma automática. Para migrar al frontend de Cloud Load Balancing sin causar tiempo de inactividad para tu servicio existente de App Engine, debes usar el Administrador de certificados a fin de crear autorización DNS y tu certificado administrado por Google.

Ten en cuenta que la documentación de Cloud Load Balancing tiene instrucciones similares sobre cómo crear un certificado SSL administrado por Google, pero las instrucciones allí usan la autorización del balanceador de cargas, lo que requiere tiempo de inactividad el servicio de App Engine que puede durar varias horas. Para obtener más información, consulta Autorización de dominio para certificados administrados por Google.

Para evitar el tiempo de inactividad de tu app, sigue los pasos que se indican en esta página.

Crea autorización de DNS

  1. Para crear la autorización de DNS en el Administrador de certificados, ejecuta los siguientes comandos:

    gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
        --domain="DOMAIN_NAME"
    gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
    

    Reemplaza lo siguiente:

    • AUTHORIZATION_NAME es un nombre único que describe esta autorización de DNS.
    • DOMAIN_NAME es el nombre de dominio personalizado de App Engine para el que estás creando esta autorización de DNS.
  2. Ten en cuenta el CNAME que muestra el comando gcloud. Debes usarlo para actualizar tu registro DNS en los pasos siguientes.

Agrega el registro CNAME a tu configuración de DNS

Según si usas Cloud DNS o cualquier otra solución de DNS de terceros, sigue las instrucciones que sean adecuadas para tu caso de uso:

Cloud DNS

Cuando creas una autorización de DNS, el comando gcloud muestra el registro CNAME correspondiente. Debes agregar este registro CNAME a tu configuración de DNS en la zona del DNS del dominio de destino de la siguiente manera:

  1. Inicia la transacción del registro DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Reemplaza DNS_ZONE_NAME por el nombre de la zona del DNS pública. Si usas Google Cloud para administrar tu dominio y recibir tráfico en ese dominio, ya creaste una zona del DNS pública. Para ver tu zona del DNS pública, consulta Enumera y describe zonas administradas.

  2. Agrega el registro CNAME a la zona del DNS de destino:

    gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"
    

    Reemplaza lo siguiente:

    • CNAME_RECORD es el valor completo del registro CNAME que muestra el comando gcloud que creó la autorización de DNS correspondiente.
    • DOMAIN_NAME es el nombre de dominio personalizado de App Engine. Debes incluir el punto final después del nombre de dominio de destino.
    • DNS_ZONE_NAME es el nombre de la zona del DNS de destino anterior.
  3. Ejecuta la transacción del registro DNS para guardar los cambios:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Reemplaza DNS_ZONE_NAME por el nombre de la zona del DNS de destino anterior.

Otra solución de DNS

Agrega un registro CNAME a la configuración de DNS de tu dominio mediante el uso del campo (host) (_acme-challenge.DOMAIN_NAME) y los campos de datos de la sección anterior. Consulta la documentación de tu solución de DNS de terceros.

Crea un certificado administrado por Google que haga referencia a la autorización de DNS

Para crear un certificado administrado por Google que haga referencia a la autorización de DNS que creaste en los pasos anteriores, ejecuta los siguientes comandos:

  1. Crea un certificado administrado por Google:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
    

    Reemplaza lo siguiente:

    • CERTIFICATE_NAME es un nombre único que describe el certificado.
    • DOMAIN_NAME es el nombre de dominio personalizado de App Engine.
    • AUTHORIZATION_NAME es el nombre de la autorización de DNS que se creó antes.
  2. Verifica que el certificado esté activo.

    Usa el siguiente comando para verificar que el certificado esté activo antes de implementarlo en tu balanceador de cargas. Ten en cuenta que el estado del certificado puede tomar varias horas en cambiar a ACTIVE.

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Reemplaza CERTIFICATE_NAME por el nombre del certificado administrado por Google que se creó antes.

    La herramienta gcloud muestra un resultado similar al siguiente:

    certificatePem: myPEM
    createTime: '2021-10-20T12:19:53.370778666Z'
    expireTime: '2022-05-07T05:03:49Z'
    managed:
      authorizationAttemptInfo:
      - domain: example.com
        state: AUTHORIZED
      dnsAuthorizations:
      - projects/my-project/locations/global/dnsAuthorizations/myAuth
      domains:
      - example.com
      state: ACTIVE
    name: projects/myProject/locations/global/certificates/myCert
    scope: myScope
    sanDnsnames:
    - example.com
    updateTime: '2021-10-20T12:19:55.083385630Z'
    

    Si la herramienta de gcloud muestra un resultado diferente, consulta Soluciona problemas del administrador de certificados.

Crea un mapa de certificados

  1. Crea un mapa de certificados:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Reemplaza CERTIFICATE_MAP_NAME por un nombre único que describa el mapa de certificados.

  2. Crea una entrada de mapa de certificado y asóciala con tu certificado y tu mapa de certificados anterior:

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME \
        --certificates=CERTIFICATE_NAME \
        --set-primary
    

    Reemplaza lo siguiente:

    • CERTIFICATE_MAP_ENTRY_NAME es un nombre único que describe esta entrada de mapa de certificados.
    • CERTIFICATE_MAP_NAME es el nombre del mapa de certificados al que se adjunta esta entrada de mapa de certificados.
    • CERTIFICATE_NAME es el nombre del certificado que deseas asociar con esta entrada de mapa de certificados.

    Puedes agregar la marca --set-primary para asegurarte de que el certificado se use como certificado predeterminado si no se especifica un nombre de dominio.

  3. Verifica que el mapa de certificados esté activo.

    Usa el siguiente comando para verificar que la entrada de mapa de certificados esté activa antes de adjuntar tu mapa de certificados correspondiente al proxy de destino:

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME
    

    Reemplaza lo siguiente:

    • CERTIFICATE_MAP_ENTRY_NAME es el nombre de entrada del mapa de certificados anterior.
    • CERTIFICATE_MAP_NAME es el nombre del mapa del certificado al que se adjunta esta entrada del mapa del certificado.

    La herramienta gcloud muestra un resultado similar al siguiente:

    createTime: '2021-09-06T10:01:56.229472109Z'
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

Para obtener más información sobre el uso del Administrador de certificados, consulta Cómo funciona el Administrador de certificados.

Configura Cloud Load Balancing

Cuando tengas un certificado administrado por Google, puedes reemplazar tu dominio personalizado de App Engine por un servicio de frontend de Cloud Load Balancing.

En el siguiente diagrama, se muestra un balanceador de cargas de HTTPS con un solo servicio de backend y NEG sin servidores.

Distribuye el tráfico a una app de App Engine

Las reglas de reenvío enrutan las solicitudes entrantes desde direcciones IP externas y solicitudes directas al proxy HTTPS de destino. Los balanceadores de cargas de HTTPS usan mapas de URL a fin de dirigir las solicitudes al servicio de backend, que contiene un NEG sin servidores para el servicio de App Engine.

Reservar una dirección IP externa

Antes de configurar Cloud Load Balancing, debes configurar una dirección IP externa estática global para que los usuarios lleguen a tu balanceador de cargas.

Consola

  1. Ve a la página Direcciones IP externas en la consola de Google Cloud.

    Ir a Direcciones IP externas

  2. Haz clic en Reservar dirección estática para reservar una dirección IPv4.

  3. Asigna un Nombre a la dirección estática, por ejemplo, appengine-external-ip.

  4. Establece el nivel de red en Premium.

  5. Configura la Versión de IP como IPv4.

  6. Configura el Tipo como Global.

  7. Haz clic en Reservar.

gcloud

  1. Crea una reserva de dirección IP externa:

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

    EXTERNAL_IP es el nombre de las direcciones que se crearán.

  2. Tome nota de la dirección IPv4 que estaba reservada:

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

Configura el servicio de backend para App Engine

Un grupo de extremos de red (NEG) se usa a fin de especificar un grupo de extremos de backend para un balanceador de cargas. Para especificar un backend que apunte a un servicio de App Engine, configura el NEG sin servidores y, luego, configura el servicio de backend, las reglas de enrutamiento y el servicio de frontend en Cloud Load Balancing.

  1. Crea un NEG sin servidores para tu app de App Engine:

    gcloud compute network-endpoint-groups create APP_ENGINE_NEG \
    --network-endpoint-type=serverless \
    --app-engine-app \
    --region=APP_ENGINE_REGION
    

    Reemplaza lo siguiente:

    • APP_ENGINE_NEG es el nombre del grupo de extremos de red.
    • APP_ENGINE_REGION es la región que se configuró en App Engine.

    Puedes agregar la marca --app-engine-app anterior para usar el enrutamiento predeterminado, en lugar de dirigir a un servicio específico de App Engine. El uso del enrutamiento predeterminado significa que las solicitudes se enviarán al servicio predeterminado (https://PROJECT_ID.REGION_ID.r.appspot.com) y, de lo contrario, seguirán todas las reglas de enrutamiento que defines en el archivo dispatch.yaml. Este es el mismo comportamiento que tienen los dominios personalizados configurados con App Engine.

  2. Crea el servicio de backend:

    gcloud compute backend-services create APP_ENGINE_BACKEND \
      --global \
      --load-balancing-scheme=EXTERNAL_MANAGED
    

    Reemplaza APP_ENGINE_BACKEND por el nombre del servicio de backend que deseas crear.

  3. Agrega el NEG sin servidores al servicio de backend de App Engine:

    gcloud compute backend-services add-backend APP_ENGINE_BACKEND \
    --global --network-endpoint-group=APP_ENGINE_NEG \
    --network-endpoint-group-region=APP_ENGINE_REGION
    

    Reemplaza lo siguiente:

    • APP_ENGINE_BACKEND es el nombre del servicio de backend anterior.
    • APP_ENGINE_NEG es el nombre del grupo de extremos de red.
    • APP_ENGINE_REGION es la región que se configuró en App Engine.
  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 APP_ENGINE_BACKEND
    

    Reemplaza lo siguiente:

    • URL_MAP_NAME es un nombre único para el recurso de mapa de URL que define la asignación de URLs a los servicios de backend.
    • APP_ENGINE_BACKEND es el nombre del servicio de backend anterior.
  5. Crea un Proxy HTTPS de destino para enrutar las solicitudes a tu mapa de URL:

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --certificate-map=CERTIFICATE_MAP_NAME \
          --url-map=URL_MAP_NAME
    

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME es un nombre único que eliges para describir tu proxy HTTPS.
    • CERTIFICATE_MAP_NAME es el nombre del mapa de certificados que hace referencia a la entrada de tu certificado y a su certificado asociado.
    • URL_MAP_NAME es el nombre del mapa de URL de antes.
  6. Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy:

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

    Reemplaza lo siguiente:

    • HTTPS_FORWARDING_RULE_NAME es un nombre único que describe la regla de reenvío para dirigir el tráfico de red al proxy HTTPS.
    • TARGET_HTTPS_PROXY_NAME es un nombre del proxy HTTPS anterior.
    • EXTERNAL_IP es el nombre de la dirección IPv4 que se creó antes.

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 para realizar pruebas antes de migrar el dominio.

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir al 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 con un navegador web en https://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas, por ejemplo, 30.90.80.100.

    • Si eso no funciona y usas un certificado administrado por Google, confirma que tu el certificado es ACTIVE y que el mapa de certificados es ACTIVE
    • 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.

    Para obtener más opciones de configuración, consulta Configura un balanceador de cargas de HTTP(S) global externo con plataformas sin servidores.

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.

Borra la asignación del dominio personalizado de App Engine

En la consola de Google Cloud:

  1. Ve a la pestaña Dominios personalizados de la página Configuración de App Engine.

    Ir a Dominios personalizados

  2. Selecciona el nombre del dominio personalizado y haz clic en Borrar.

De manera alternativa, puedes usar comandos de gcloud o la API de Administrador para borrar el dominio personalizado.

Configura el control de entrada para permitir solo el acceso mediante Cloud Load Balancing

Después de probar el balanceador de cargas, recomendamos actualizar la app de App Engine para aceptar tráfico solo desde Cloud Load Balancing. Para obtener información sobre cómo configurar los controles de entrada internal-and-cloud-load-balancing, consulta Configuración de entrada.