¿Qué es Cloud Run?

Cloud Run es una plataforma de procesamiento administrada que te permite ejecutar contenedores directamente sobre la infraestructura escalable de Google.

Puedes implementar código escrito en cualquier lenguaje de programación en Cloud Run si puedes compilar una imagen de contenedor a partir de él. De hecho, la compilación de imágenes de contenedor es opcional. Si usas Go, Node.js, Python, Java, .NET Core o Ruby, puedes usar la opción de implementación basada en la fuente que compila el contenedor por ti, con las prácticas recomendadas para el lenguaje que usas.

Google creó Cloud Run para que funcione bien junto con otros servicios de Google Cloud, de modo que puedas compilar aplicaciones con todas las funciones.

En resumen, Cloud Run permite a los desarrolladores dedicar su tiempo a escribir su código y muy poco tiempo a operar, configurar y escalar el servicio de Cloud Run. No es necesario crear un clúster ni administrar la infraestructura para ser productivo con Cloud Run.

Servicios y trabajos: dos formas de ejecutar tu código

En Cloud Run, tu código puede ejecutarse de forma continua como un servicio o como un trabajo. Los servicios y los trabajos se ejecutan en el mismo entorno y pueden usar las mismas integraciones con otros servicios en Google Cloud.

  • Servicios de Cloud Run. Se usan para ejecutar código que responde a solicitudes web o eventos.
  • Trabajos de Cloud Run. Se usan para ejecutar código que realiza trabajo (un trabajo) y se cierra cuando el trabajo finaliza.

Servicios de Cloud Run

Un servicio de Cloud Run ejecuta contenedores para entregar solicitudes web y eventos

Un servicio de Cloud Run te proporciona la infraestructura necesaria para ejecutar un extremo HTTPS confiable. Tu responsabilidad es asegurarte de que tu código escuche en un puerto TCP y maneje las solicitudes HTTP.

Entre las funciones de servicio estándar, se incluyen las siguientes:

Extremo HTTPS único para cada servicio
Cada servicio de Cloud Run se proporciona con un extremo HTTPS en un subdominio único del dominio *.run.app, y también puedes configurar dominios personalizados. Cloud Run administra TLS por ti y, además, incluye compatibilidad con WebSockets, HTTP/2 (de extremo a extremo) y gRPC (de extremo a extremo).
Rápido ajuste de escala automático basado en solicitudes
Cloud Run está diseñado para escalar horizontalmente con rapidez para controlar todas las solicitudes entrantes o manejar un mayor uso de CPU fuera de las solicitudes si la asignación de CPU se configura como always on. Un servicio puede escalar horizontalmente con rapidez hasta mil instancias o incluso más si solicitas un aumento de la cuota. Si la demanda disminuye, Cloud Run quita los contenedores inactivos. Si te preocupan los costos o la sobrecarga de los sistemas descendentes, puedes limitar la cantidad máxima de instancias.
Administración de tráfico integrada
Cada implementación crea una nueva revisión inmutable. Puedes enrutar el tráfico entrante a la revisión más reciente, revertir a una revisión anterior o dividir el tráfico a varias revisiones al mismo tiempo para realizar un lanzamiento gradual. Esto es útil si deseas reducir el riesgo de implementar una revisión nueva. Puedes comenzar con el envío del 1% de las solicitudes a una revisión nueva y aumentar ese porcentaje mientras supervisas la telemetría.
Servicios privados y públicos
Se puede acceder a un servicio de Cloud Run desde Internet, o bien puedes restringir el acceso de las siguientes tres maneras:

Puedes priorizar un servicio de Cloud Run con una red de distribución de contenidos (CDN) para entregar elementos que se pueden almacenar en caché desde una ubicación perimetral más cercana a los clientes. Tanto Firebase Hosting como Cloud CDN proporcionan esta función.

Reduce la escala a cero y un mínimo de instancias

Cloud Run agrega y quita instancias de forma automática para controlar todas las solicitudes entrantes o controlar el aumento del uso de CPU fuera de las solicitudes si la asignación de CPU se establece como always on. Si no hay solicitudes entrantes en tu servicio, se quitará la última instancia restante. Por lo general, este comportamiento se conoce como reducción de escala a cero.

Si no hay instancias activas, se crea una instancia nueva a pedido apenas ingresa una solicitud. Esto afecta negativamente el tiempo de respuesta de estas primeras solicitudes, según la rapidez con la que tu contenedor esté listo para manejar solicitudes.

A fin de asegurarte de que tu servicio no escale la reducción de escala a cero instancias, puedes configurar Cloud Run para mantener una cantidad mínima de instancias activas.

Precios de pago por uso para los servicios

La reducción de escala a cero es atractiva por razones económicas, ya que se te cobran por la CPU y la memoria asignadas a una instancia con un nivel de detalle de 100 ms. Si no configuras un mínimo de instancias, no se te cobrará si tu servicio no se usa.

Hay dos modelos de precios que puedes habilitar:

Basado en solicitudes
Si una instancia no procesa solicitudes, la CPU no se asigna y no se te cobrará. Además, debes pagar una tarifa por solicitud.
Basada en instancias
Se te cobra por la vida útil completa de una instancia y siempre se asigna la CPU. No hay tarifa por solicitud.

Hay un nivel gratuito amplio. Consulta los precios para obtener más información y la asignación de CPU a fin de aprender cómo habilitar los precios basados en solicitudes o en instancias para tu servicio.

Un sistema de archivos de contenedores desechable

Las instancias en Cloud Run son desechables. Cada contenedor tiene una superposición en el sistema de archivos en la que se puede escribir, que no es persistente si el contenedor se cierra. Cloud Run decide de forma independiente cuándo dejar de enviar solicitudes a una instancia y cerrarla, por ejemplo, cuando reduce la escala.

Para recibir una advertencia cuando Cloud Run está a punto de cerrar una instancia, tu aplicación puede capturar el indicador SIGTERM. Esto permite que tu código limpie los búferes locales y conserve los datos locales en un almacén de datos externo.

Para conservar archivos de forma permanente, puedes integrar a Cloud Storage o activar un sistema de archivos de red (NFS).

Cuándo usar los servicios de Cloud Run

Los servicios de Cloud Run son excelentes para los códigos que controlan solicitudes o eventos. Como ejemplo, se incluyen los siguientes casos prácticos:

Sitios y aplicaciones web
Compila tu aplicación web con tu pila favorita, accede a tu base de datos de SQL y renderiza páginas HTML dinámicas.
API y microservicios
Puedes compilar una API de REST o una API de GraphQL, o microservicios privados que se comuniquen a través de HTTP o gRPC.
Procesamiento de datos de transmisión
Los servicios de Cloud Run pueden recibir mensajes de suscripciones de envío de Pub/Sub y eventos de Eventarc.

Trabajos de Cloud Run

Si tu código realiza trabajos y, luego, se detiene (una secuencia de comandos es un buen ejemplo), puedes usar un trabajo de Cloud Run para ejecutar tu código. Puedes ejecutar un trabajo desde la línea de comandos con gcloud CLI, programa un trabajo recurrente o ejecutarlo como parte de un flujo de trabajo.

Los trabajos de arrays son una forma más rápida de ejecutar trabajos

Un trabajo puede iniciar una instancia para ejecutar tu código; esa es una forma común de ejecutar una secuencia de comandos o una herramienta. Sin embargo, también puedes iniciar muchas instancias independientes idénticas en paralelo, es decir, un trabajo de array.

Los trabajos de arrays son una forma más rápida de procesar trabajos que se pueden dividir en varias tareas independientes, como se muestra a continuación:

Los trabajos de arrays son una forma más rápida de ejecutar trabajos paralelizables

Por ejemplo, si cambias el tamaño y recortas 1,000 imágenes desde Cloud Storage, su procesamiento consecutivo es más lento que en paralelo con muchas instancias, que Cloud Run administra con el ajuste de escala automático.

Cuándo usar trabajos de Cloud Run

Los trabajos de Cloud Run son adecuados para ejecutar código que realiza trabajo (un trabajo) y se cierra cuando este se completa. Estos son algunos ejemplos:

Secuencia de comandos o herramienta
Ejecutar una secuencia de comandos para realizar migraciones de bases de datos o realizar otras tareas operativas
Trabajo de arrays
Realizar un procesamiento altamente paralelo de todos los archivos en un bucket de Cloud Storage
Trabajo programado
Crea y envía facturas a intervalos regulares o guarda los resultados de una consulta de base de datos en formato XML y sube el archivo cada pocas horas.

Integraciones en Cloud Run

Cloud Run se integra al ecosistema más amplio de Google Cloud, lo que te permite compilar aplicaciones con todas las funciones.

Las integraciones esenciales incluyen las siguientes:

Almacenamiento de datos
Cloud Run se integra a Cloud SQL (MySQL administrado, PostgreSQL y SQL Server), Memorystore (Redis y Memcached administrados), Firestore, Spanner, Cloud Storage y más. Consulta Almacenamiento de datos para obtener una lista completa.
Logging y Error Reporting
Cloud Logging transfiere de forma automática los registros de contenedor. Si hay excepciones en los registros, Error Reporting las agrega y, luego, te notifica. Se admiten los siguientes lenguajes: Go, Java, Node.js, PHP, Python, Ruby y .NET.
Identidad del servicio
Cada revisión de Cloud Run está vinculada a una cuenta de servicio, y las bibliotecas cliente de Google Cloud usan esta cuenta de servicio con transparencia para autenticarse con las API de Google Cloud.
Entrega continua
Si almacenas tu código fuente en GitHub, Bitbucket o Cloud Source Repositories, puedes configurar Cloud Run para implementar confirmaciones nuevas de forma automática.
Herramientas de redes privadas
Las instancias de Cloud Run pueden alcanzar recursos en la red de nube privada virtual (VPC) a través del conector de acceso a VPC sin servidores. Así es como tu servicio se puede conectar con máquinas virtuales o productos de Compute Engine basados en Compute Engine, como Google Kubernetes Engine o Memorystore.
APIs de Google Cloud
El código de tu servicio se autentica con transparencia con las APIs de Google Cloud. Algunos ejemplos son las API de IA y aprendizaje automático, como la API de Cloud Vision, la API de Speech-to-Text, la AutoML API de Natural Language, la API de Cloud Translation y muchas más.
Tareas en segundo plano
Si deseas programar el código para que se ejecute de forma posterior o inmediata después de mostrar una solicitud web, Cloud Run funciona bien con Cloud Tasks a fin de proporcionar una ejecución asíncrona escalable y confiable.

Consulta Conéctate a los servicios de Google Cloud para obtener una lista de todos los servicios de Google Cloud que funcionan bien con Cloud Run.

Los servicios o los trabajos deben empaquetarse en una imagen de contenedor

Para que tu servicio o trabajo se pueda implementar en Cloud Run, debes empaquetarlo en una imagen de contenedor. En caso de que no esté familiarizado con los contenedores, aquí hay una breve introducción conceptual.

Compila imágenes de contenedores

Una imagen de contenedor es un paquete con todo lo que tu servicio necesita para ejecutarse. Eso incluye artefactos de compilación, recursos, paquetes del sistema y, de forma opcional, un entorno de ejecución. Esto hace que una aplicación alojada en contenedores sea inherentemente portátil, es decir, se ejecuta en cualquier lugar donde se pueda ejecutar un contenedor. Los ejemplos de artefactos de compilación incluyen archivos binarios o archivos de secuencias de comandos compilados, y ejemplos de entornos de ejecución son el entorno de ejecución de JavaScript de Node.js o una máquina virtual Java (JVM).

Los profesionales avanzados valoran el hecho de que Cloud Run no impone cargas adicionales en la ejecución de su código: puedes ejecutar cualquier objeto binario en Cloud Run. Cloud Run se integra con los paquetes de código abierto de Google Cloud para ofrecer una implementación basada en la fuente para usuarios, incluidos expertos que buscan más comodidad o que quieren delegar la creación de contenedores de su aplicación a Google.

¿Qué sigue?