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:
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:
- Asegúrate de tener los permisos necesarios
- Crea un certificado administrado por Google
- Configura Cloud Load Balancing
- Prueba el balanceador de cargas
- Conecta tu dominio al balanceador de cargas
- Borra la asignación del dominio personalizado de App Engine
- 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 | Función requerida |
---|---|
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
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.
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:
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.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 comandogcloud
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.
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:
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.
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
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.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.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.
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.
Console
Ve a la página Direcciones IP externas en la consola de Google Cloud.
Haz clic en Reservar dirección estática para reservar una dirección IPv4.
Asigna un Nombre a la dirección estática, por ejemplo,
appengine-external-ip
.Establece el nivel de red en Premium.
Configura la Versión de IP como IPv4.
Configura el Tipo como Global.
Haz clic en Reservar.
gcloud
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.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.
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 archivodispatch.yaml
. Este es el mismo comportamiento que tienen los dominios personalizados configurados con App Engine.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.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.
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.
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.
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.
- Ve a la página Balanceo de cargas en Google Cloud Console.
Ir al balanceo de cargas - Haz clic en el balanceador de cargas que acabas de crear.
- Toma nota de la Dirección IP del balanceador de cargas.
En el caso de un balanceador de cargas de HTTPS, puedes probar tu balanceador de cargas con un navegador web en
https://IP_ADDRESS
. ReemplazaIP_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 esACTIVE
- 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.
- Si eso no funciona y usas un certificado administrado por Google, confirma que tu el certificado es
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:
Ve a la pestaña Dominios personalizados de la página Configuración de App Engine.
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.