Invocar con una solicitud HTTPS

Después de crear un servicio o una función, Cloud Run te proporciona un endpoint HTTPS para el servicio. Puedes habilitar el servicio para que se ejecute en respuesta a solicitudes HTTPS.

Todos los servicios de Cloud Run tienen una URL de HTTPS estable, que representa el punto de conexión HTTPS predeterminado del servicio, aunque también puedes configurar dominios personalizados.

Estos son algunos de los casos prácticos:

  • API web RESTful personalizada
  • Microservicio privado
  • Middleware HTTP o proxy inverso para tus aplicaciones web
  • Aplicación web preempaquetada

Crear servicios públicos

Para crear un servicio público en Cloud Run, se necesita lo siguiente:

  • Acceso al servicio desde Internet público
  • Una URL destinada a un uso público

Para hacer público un servicio, configúralo para que permita el acceso público sin autenticación cuando lo despliegues o en cualquier momento después de desplegarlo.

URL de servicio

Cloud Run asigna una URL no determinista basada en hash a todos los servicios. Si la longitud del nombre del servicio lo permite, Cloud Run también asigna una URL determinista al servicio.

Puedes inhabilitar estas URLs run.apppredeterminadas.

Para obtener la URL de tu servicio, haz clic en el nombre del servicio en laGoogle Cloud consola o ejecuta el siguiente comando en la CLI de gcloud:

gcloud run services describe SERVICE --format 'value(status.url)'

Se da prioridad a la URL determinista cuando se muestra.

Si el servicio de Cloud Run se ha creado como una función con la API Cloud Functions v2, también se le asigna una URL cloudfunctions.net.

URL determinista

La URL determinista te permite predecir la URL de servicio antes de que se cree el servicio, lo que puede ser útil para la comunicación entre servicios.

La URL determinista solo está disponible para segmentos de DNS de 63 caracteres o menos. El segmento de DNS contiene el nombre del servicio, el número del proyecto y las etiquetas de tráfico.

La URL determinista de un servicio de Cloud Run tiene el siguiente formato:

https://[TAG---]SERVICE_NAME-PROJECT_NUMBER.REGION.run.app

donde:

  • TAG es la etiqueta de tráfico opcional de la revisión que solicitas.
  • PROJECT_NUMBER es el Google Cloud número de proyecto.
  • SERVICE_NAME es el nombre del servicio de Cloud Run.
  • REGION es el nombre de la región, como europe-west1.

URL no determinista

Las URLs no deterministas no tienen un formato determinista, lo que significa que, como el segundo campo de la URL es un hash aleatorio, no puedes predecir cuál será la URL completa antes de implementar los servicios. Sin embargo, una vez que hayas implementado el servicio, la URL seguirá siendo estable.

La URL no determinista de un servicio de Cloud Run tiene el formato https://[TAG---]SERVICE_IDENTIFIER.run.app, donde TAG hace referencia a la etiqueta de tráfico opcional de la revisión que solicitas y SERVICE_IDENTIFIER es un identificador estable y único de un servicio de Cloud Run. No analices el SERVICE_IDENTIFIER, ya que no tiene un formato fijo y la lógica para generar SERVICE_IDENTIFIER está sujeta a cambios.

Respuestas graduales

Cloud Run admite respuestas HTTP de streaming. No es necesario configurar nada para habilitar la función. El servidor debe responder con un encabezado de respuesta Transfer-Encoding: chunked.

Redirección de HTTP a HTTPS

Cloud Run redirige todas las solicitudes HTTP a HTTPS, pero finaliza TLS antes de que lleguen a tu servicio web. Si tu servicio genera recursos web que hacen referencia a otros recursos web con URLs no seguras (http://), es posible que tu página muestre advertencias o errores de contenido mixto. Usa el protocolo https para todos los URIs web de referencia o para las directivas de proxy en la solicitud HTTP, como el encabezado HTTP X-Forwarded-Proto.

HTTP y HTTP/2

De forma predeterminada, Cloud Run reduce la versión de las solicitudes HTTP/2 a HTTP/1 cuando se envían al contenedor. Si quieres configurar explícitamente tu servicio para que use HTTP/2 de extremo a extremo, consulta el artículo Usar HTTP/2.

Crear servicios privados

Para crear un servicio privado en Cloud Run, debes limitar el acceso al servicio mediante el permiso de invocador de gestión de identidades y accesos.

También puedes limitar el acceso a un servicio mediante un mecanismo de autorización y autenticación a nivel de aplicación, por ejemplo, con Identity Platform.

Probar servicios privados

La forma más sencilla de probar los servicios privados es usar el proxy de Cloud Run en Google Cloud CLI. De esta forma, se envía el servicio privado a http://localhost:8080 (o al puerto especificado con --port) y se proporciona el token de la cuenta activa u otro token que especifiques. De esta forma, puedes usar un navegador web o una herramienta como curl. Esta es la forma recomendada de probar de forma privada un sitio web o una API en tu navegador.

Puedes usar un proxy para un servicio de forma local con la siguiente línea de comandos en un entorno Linux, macOS, WSL (opción preferida) o cygwin:

gcloud run services proxy SERVICE --project PROJECT-ID

También puedes probar servicios privados sin el proxy mediante una herramienta como curl, pasando un token de autenticación en el encabezado Authorization:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

Servicio a servicio privado

Un servicio de Cloud Run puede llamar a otro servicio de Cloud Run con la autenticación de servicio a servicio.

Código de ejemplo que invoca un servicio privado

Para ver ejemplos de código que muestran cómo obtener un token de ID y hacer una solicitud HTTP a un servicio privado, consulta el tema Autenticación de servicio a servicio.

Usar un middleware para mejorar tu servicio

Los proxies HTTPS pueden descargar funciones comunes de un servicio HTTP, como el almacenamiento en caché, la validación de solicitudes o la autorización. En el caso de los microservicios, muchos proxies HTTP forman parte de una solución de API Gateway o de una malla de servicios como Istio.

Google Cloud productos que puedes usar para mejorar tu servicio de Cloud Run: