Migrar un dominio personalizado de App Engine a Cloud Load Balancing

ID de región

El REGION_ID es un código abreviado que Google asigna en función de la región que selecciones al crear tu aplicación. El código no corresponde a un país o provincia, aunque algunos IDs de región pueden parecerse a los códigos de país y provincia que se usan habitualmente. En las aplicaciones creadas después de febrero del 2020, REGION_ID.r se incluye en las URLs de App Engine. En las aplicaciones creadas antes de esa fecha, el ID de región es opcional en la URL.

Más información sobre los IDs de región

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

Con Cloud Load Balancing, puedes configurar tu endpoint de dominio personalizado como un servicio de frontend y tu aplicación de App Engine como un servicio de backend mediante un grupo de endpoints de red (NEG) sin servidor. El tráfico al endpoint del servicio frontend de Cloud Load Balancing se enruta de la misma forma que antes, incluidas todas las reglas de enrutamiento que definas en el archivo dispatch.yaml de tu aplicación.

En el siguiente diagrama se describen los cambios que se han realizado en tu aplicación:

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

Al migrar a Cloud Load Balancing, obtendrá mucha más flexibilidad en la forma de gestionar el tráfico cuando llegue a su dominio, como servir contenido estático desde Cloud Storage o añadir servicios que se ejecuten en otras plataformas de computación, como Cloud Run y Google Kubernetes Engine.

También tendrás acceso a funciones clave Google Cloud que no están disponibles en App Engine, como las siguientes:

  • Google Cloud Armor, para mejorar la seguridad con protección avanzada contra ataques DDoS, controles de acceso basados en IP y en geolocalización, reglas de cortafuegos de aplicaciones web y más
  • Cloud CDN para la distribución de contenido almacenado en caché
  • Políticas de SSL para gestionar qué funciones de SSL y versiones de TLS aceptará tu aplicación

En esta guía se incluyen las instrucciones de configuración para redirigir 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 que tienes los permisos necesarios
  2. Crear un certificado gestionado por Google
  3. Configurar Cloud Load Balancing
  4. Probar el balanceador de carga
  5. Conectar tu dominio a tu balanceador de carga
  6. Eliminar la asignación de dominio personalizado de App Engine
  7. Configurar el control de entrada para permitir el acceso solo a través de Cloud Load Balancing

Antes de empezar

Tener una aplicación de App Engine con un dominio personalizado configurado en los ajustes de App Engine.

Configurar permisos

Para seguir esta guía, debes crear un certificado gestionado por Google, un NEG sin servidor y un balanceador de carga HTTP(S) externo en un proyecto. Debes tener el rol de propietario o editor del proyecto o los siguientes roles de gestión de identidades y accesos:

Tarea Rol obligatorio
Crear un certificado SSL gestionado por Google con Certificate Manager Propietario de Certificate Manager o Editor de Certificate Manager y Administrador de balanceadores de carga de Compute
Actualizar los registros DNS del dominio personalizado Administrador de Cloud DNS si usas Cloud DNS como solución de DNS.

Si usas otro proveedor de DNS, necesitarás permisos para añadir y actualizar los registros DNS del dominio personalizado.
Crear balanceadores de carga y componentes de red Administrador de red de Compute
Crear y modificar grupos de puntos de conexión de red Administrador de instancias de Compute
Crear y modificar certificados SSL Administrador de seguridad de Compute
Eliminar 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.

Crear un certificado SSL gestionado por Google

Un certificado SSL gestionado por Google (también conocido como certificado TLS en la documentación) permite obtener, gestionar y renovar certificados automáticamente. Google Cloud Para migrar al frontend de Cloud Load Balancing sin provocar tiempo de inactividad en tu servicio de App Engine, debes usar Certificate Manager para crear la autorización de DNS y tu certificado gestionado por Google.

Ten en cuenta que la documentación de Cloud Load Balancing incluye instrucciones similares para crear un certificado SSL gestionado por Google, pero en esas instrucciones se usa la autorización del balanceador de carga, lo que requiere un tiempo de inactividad para tu servicio de App Engine que puede durar varias horas. Para obtener más información, consulta Autorización de dominio para certificados gestionados por Google.

Para evitar que tu aplicación deje de funcionar, sigue los pasos que se indican en esta página.

Crear una autorización de DNS

  1. Crea la autorización de DNS en Certificate Manager ejecutando los siguientes comandos:

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

    Haz los cambios siguientes:

    • AUTHORIZATION_NAME es un nombre único que describe esta autorización de DNS.
    • DOMAIN_NAME es el nombre del dominio personalizado de App Engine para el que vas a crear esta autorización de DNS.
  2. Anota el CNAME devuelto por el comando gcloud. Debes usarlo para actualizar tu registro DNS en los pasos siguientes.

Añadir el registro CNAME a tu configuración de DNS

En función de si usas Cloud DNS u otra solución de DNS de terceros, sigue las instrucciones que correspondan a tu caso práctico:

Cloud DNS

Cuando creas una autorización de DNS, el comando gcloud devuelve el registro CNAME correspondiente. Debes añadir este registro CNAME a tu configuración de DNS en la zona 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"
    

    Sustituye DNS_ZONE_NAME por el nombre de la zona DNS pública. Si usas Google Cloud para gestionar tu dominio y recibir tráfico en él, ya habrás creado una zona DNS pública. Para ver tu zona DNS pública, consulta Listar y describir zonas gestionadas.

  2. Añade el registro CNAME a la zona DNS de destino:

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

    Haz los cambios siguientes:

    • CNAME_RECORD es el valor completo del registro CNAME devuelto por 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 del dominio de destino.
    • DNS_ZONE_NAME es el nombre de la zona DNS de destino que hemos usado antes.
  3. Ejecuta la transacción del registro DNS para guardar los cambios:

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

    Sustituye DNS_ZONE_NAME por el nombre de la zona DNS de destino que has usado antes.

Otra solución de DNS

Añade un registro CNAME a la configuración DNS de tu dominio con los campos de nombre de host (_acme-challenge.DOMAIN_NAME) y de datos de la sección anterior. Consulta la documentación de tu solución de DNS de terceros.

Crear un certificado gestionado por Google que haga referencia a la autorización de DNS

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

  1. Crea un certificado gestionado por Google:

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

    Haz los cambios siguientes:

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

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

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Sustituye CERTIFICATE_NAME por el nombre del certificado gestionado por Google que has creado anteriormente.

    La herramienta gcloud devuelve 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 gcloud devuelve un resultado diferente, consulta el artículo Solucionar problemas de Gestor de certificados.

Crear un mapa de certificados

  1. Crea un CertificateMap:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

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

  2. Crea una entrada de mapa de certificados y asóciala al certificado y al mapa de certificados que has creado antes:

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

    Haz los cambios siguientes:

    • 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 quieres asociar a esta entrada de asignación de certificados.

    Puedes añadir la marca --set-primary para asegurarte de que el certificado se usa como certificado predeterminado si no se especifica ningún 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 el mapa de certificados correspondiente al proxy de destino:

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

    Haz los cambios siguientes:

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

    La herramienta gcloud devuelve 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 cómo usar Certificate Manager, consulta Cómo funciona Certificate Manager.

Configurar Cloud Load Balancing

Una vez que tengas un certificado gestionado por Google, puedes sustituir tu dominio personalizado de App Engine por un servicio frontend de Cloud Load Balancing.

En el siguiente diagrama se muestra un balanceador de carga HTTPS con un solo servicio de backend y un NEG sin servidor.

Distribuir el tráfico a una aplicación de App Engine

Las reglas de reenvío dirigen las solicitudes entrantes desde direcciones IP externas y las solicitudes directas al proxy HTTPS de destino. Los balanceadores de carga HTTPS usan mapas de URLs para dirigir las solicitudes al servicio de backend, que contiene un NEG sin servidor 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 puedan acceder a tu balanceador de carga.

Consola

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

    Ir a direcciones IP externas

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

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

  4. Configure el nivel de red como Premium.

  5. Configura IPv4 (versión de IP) como IPv4.

  6. En Tipo, seleccione 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 van a crear.

  2. Anota la dirección IPv4 que se ha reservado:

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

Configurar el servicio de backend de App Engine

Un grupo de puntos finales de red (NEG) se usa para especificar un grupo de puntos finales de backend de un balanceador de carga. Para especificar un backend que apunte a un servicio de App Engine, configure el NEG sin servidor y, a continuación, el servicio de backend, las reglas de enrutamiento y el servicio de frontend en Cloud Load Balancing.

  1. Crea un NEG sin servidor para tu aplicación de App Engine:

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

    Haz los cambios siguientes:

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

    Puedes añadir la marca --app-engine-app anterior para usar el enrutamiento predeterminado en lugar de dirigir a un servicio de App Engine específico. Si usas el enrutamiento predeterminado, las solicitudes se enviarán al servicio predeterminado (https://PROJECT_ID.REGION_ID.r.appspot.com) y, por lo demás, se seguirán todas las reglas de enrutamiento que definas en el archivo dispatch.yaml. Este comportamiento es el mismo que el de 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
    

    Sustituye APP_ENGINE_BACKEND por el nombre del servicio de backend que quieras crear.

  3. Añade el NEG sin servidor 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
    

    Haz los cambios siguientes:

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

    Haz los cambios siguientes:

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

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

    Haz los cambios siguientes:

    • 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 del mapa de certificados y al certificado asociado.
    • URL_MAP_NAME es el nombre del mapa de URLs que hemos usado antes.
  6. Crea una regla de reenvío para dirigir 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
    

    Haz los cambios siguientes:

    • 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 el nombre del proxy HTTPS que hemos usado antes.
    • EXTERNAL_IP es el nombre de la dirección IPv4 que se creó anteriormente.

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

  1. Ve a la página Balanceo de carga de la Google Cloud consola.
    Ve 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. Por ejemplo, 30.90.80.100.

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

    Para ver más opciones de configuración, consulta Configurar un balanceador de carga HTTP(S) externo global con plataformas sin servidor.

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.

Eliminar la asignación de dominio personalizado de App Engine

En la Google Cloud consola:

  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 de dominio personalizado y haz clic en Eliminar.

También puedes usar comandos de gcloud o la API Admin para eliminar el dominio personalizado.

Configurar el control de entrada para permitir el acceso solo a través de Cloud Load Balancing

Después de probar el balanceador de carga, te recomendamos que actualices tu aplicación de App Engine para que solo acepte tráfico de Cloud Load Balancing. Para saber cómo configurar los controles de acceso internal-and-cloud-load-balancing, consulta Ajustes de acceso.