Sincroniza Cloud Run con Firebase Hosting para generar y entregar tu contenido dinámico o compilar las APIs de REST como microservicios.
Con Cloud Run, puedes implementar aplicaciones empaquetadas en imágenes de contenedor. Luego, puedes usar Firebase Hosting para dirigir las solicitudes HTTPS y activar la app alojada en contenedores.
- Cloud Run admite varios lenguajes (como Go, Node.js, Python y Java), por lo que puedes usar el framework y lenguaje de programación que prefieras.
- Cloud Run escala la imagen de contenedor de manera automática y horizontal para controlar las solicitudes que se reciben y, luego, reduce la escala verticalmente cuando disminuye la demanda.
- Solo debes pagar por la CPU, la memoria y las herramientas de redes que se utilicen durante la administración de la solicitud.
Para ver casos de uso y muestras de ejemplo de Cloud Run integrado en Firebase Hosting, visita nuestra descripción general de la computación sin servidores.
En esta guía, se indica cómo realizar las siguientes acciones:
- Escribir una app de Hello World sencilla
- Alojar una app en contenedores y subirla a Container Registry
- Implementarla la imagen de contenedor en Cloud Run
- Dirigir las solicitudes de Hosting a tu app alojada en un contenedor
Recuerda que si quieres mejorar el rendimiento de la entrega de contenido dinámico, puedes configurar la caché.
Antes de comenzar
Antes de usar Cloud Run, debes completar algunas tareas iniciales,
como configurar una cuenta de Cloud Billing, habilitar la API de Cloud Run
y, también, instalar la herramienta de línea de comandos de gcloud
.
Configura la facturación para el proyecto
Cloud Run ofrece una cuota de uso gratuito. No obstante, debes tener una cuenta de Cloud Billing asociada con tu proyecto de Firebase para usar o probar Cloud Run.
Habilita la API e instala el SDK
Habilítala en la API de Cloud Run en la Consola de APIs de Google.
Abre la página de la API de Cloud Run en la consola de APIs de Google.
Cuando se te solicite, selecciona tu proyecto de Firebase.
Haz clic en Habilitar en la página de la API de Cloud Run.
Instala e inicializa el SDK de Cloud.
Asegúrate de que la herramienta
gcloud
esté configurada para el proyecto adecuado:gcloud config list
Paso 1: Escribe la aplicación de muestra
Ten en cuenta que Cloud Run admite muchos otros lenguajes además de los que se muestran en el siguiente ejemplo.
Go
Crea un directorio nuevo llamado
helloworld-go
y, luego, usa el comando de cambio de directorio en él, de la siguiente manera:mkdir helloworld-go
cd helloworld-go
Crea un archivo nuevo llamado
helloworld.go
y, luego, agrega el siguiente código:Con este código se crea un servidor web básico que recibe datos en el puerto definido por la variable de entorno
PORT
.
La app está lista para alojarla en contenedores y subirla a Container Registry.
Node.js
Crea un directorio nuevo llamado
helloworld-nodejs
y, luego, usa el comando de cambio de directorio en él, de la siguiente manera:mkdir helloworld-nodejs
cd helloworld-nodejs
Crea un archivo
package.json
con el siguiente contenido:Crea un archivo nuevo llamado
index.js
y, luego, agrega el siguiente código:Con este código se crea un servidor web básico que recibe datos en el puerto definido por la variable de entorno
PORT
.
La app está lista para alojarla en contenedores y subirla a Container Registry.
Python
Crea un directorio nuevo llamado
helloworld-python
y, luego, usa el comando de cambio de directorio en él, de la siguiente manera:mkdir helloworld-python
cd helloworld-python
Crea un archivo nuevo llamado
app.py
y, luego, agrega el siguiente código:Con este código se crea un servidor web básico que recibe datos en el puerto definido por la variable de entorno
PORT
.
La app está lista para alojarla en contenedores y subirla a Container Registry.
Java
Instala Java SE 8 (o un JDK más reciente) y CURL.
Ten en cuenta que solo debemos realizar lo anterior para crear el proyecto web nuevo en el próximo paso. El Dockerfile, que se describe más adelante, cargará todas las dependencias en el contenedor.
En la consola, usa cURL para crear un proyecto web nuevo y vacío y, luego, descomprime los comandos:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
Se creará un proyecto de SpringBoot.
Para actualizar la clase
SpringBootApplication
ensrc/main/java/com/example/helloworld/HelloworldApplication.java
, agrega un@RestController
para manejar la asignación de/
y, también, agrega un campo@Value
para proporcionar la variable de entornoTARGET
, de la siguiente manera:Con este código se crea un servidor web básico que recibe datos en el puerto definido por la variable de entorno
PORT
.
La app está lista para alojarla en contenedores y subirla a Container Registry.
Paso 2: Aloja una app en un contenedor y súbela a Container Registry
Crea un archivo nuevo llamado
Dockerfile
en el mismo directorio que los archivos de origen para alojar la app de ejemplo en contenedores. Copia el siguiente contenido en el archivo.Go
Node.js
Python
Java
Usa Cloud Build para compilar la imagen de contenedor. Para ello, ejecuta el siguiente comando desde el directorio que contiene el Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
Tras la ejecución satisfactoria del comando, verás el mensaje SUCCESS con el nombre de la imagen
(gcr.io/PROJECT_ID/helloworld
).
Ahora la imagen del contenedor se almacena en Container Registry y se puede volver a usar si así se desea.
Ten en cuenta que, en lugar de Cloud Build, puedes usar una versión de Docker instalada de manera local para compilar el contenedor de forma local.
Paso 3: Implementa la imagen de contenedor en Cloud Run
Realiza la implementación con el siguiente comando:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
Realiza las siguientes acciones cuando se te solicite:
- Selecciona una región (por ejemplo,
us-central1
). - Confirma el nombre del servicio (por ejemplo,
helloworld
). - Responde
Y
para permitir las invocaciones no autenticadas.
- Selecciona una región (por ejemplo,
Para obtener el mejor rendimiento, coloca tu servicio de Cloud Run con Hosting usando las siguientes regiones:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Las reescrituras en Cloud Run desde Hosting se admiten en las siguientes regiones:
asia-east1
asia-east2
asia-northeast1
asia-northeast2
asia-northeast3
asia-south1
asia-south2
asia-southeast1
asia-southeast2
australia-southeast1
australia-southeast2
europe-central2
europe-north1
europe-southwest1
europe-west1
europe-west12
europe-west2
europe-west3
europe-west4
europe-west6
europe-west8
europe-west9
me-central1
me-west1
northamerica-northeast1
northamerica-northeast2
southamerica-east1
southamerica-west1
us-central1
us-east1
us-east4
us-east5
us-south1
us-west1
us-west2
us-west3
us-west4
us-west1
us-central1
us-east1
europe-west1
asia-east1
Espera unos instantes a que finalice la implementación. Si la operación es exitosa, la línea de comandos mostrará la URL de servicio. Por ejemplo:
https://helloworld-RANDOM_HASH-us-central1.a.run.app Abre la URL de servicio en un navegador web para visitar el contenedor implementado.
En el siguiente paso se explica cómo acceder a la app alojada en contenedores desde una URL de Firebase Hosting a fin de que esta pueda generar contenido dinámico para el sitio alojado en Firebase.
Paso 4: Dirige las solicitudes de Hosting hacia la app alojada en contenedores
Con las reglas de reescritura, puedes dirigir solicitudes que coincidan con patrones específicos a un mismo destino.
En el siguiente ejemplo se muestra cómo dirigir todas las solicitudes desde la página /helloworld
en el sitio de Hosting para activar la inicialización y la ejecución de la instancia de contenedor helloworld
.
Asegúrate de cumplir con estas condiciones:
Tener la versión más reciente de Firebase CLI
Haber inicializado Firebase Hosting
Consulta la guía de introducción de Hosting para obtener instrucciones detalladas sobre cómo instalar la CLI y, luego, inicializar Hosting.
Abre el archivo
firebase.json
.Agrega la siguiente configuración de
rewrite
en la secciónhosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
Implementa la configuración de Hosting en tu sitio. Para ello, ejecuta el siguiente comando desde la raíz del directorio del proyecto:
firebase deploy --only hosting
Ahora se puede acceder al contenedor con las siguientes URLs:
Tus subdominios de Firebase:
PROJECT_ID.web.app/
yPROJECT_ID.firebaseapp.com/
Cualquier dominio personalizado conectado:
CUSTOM_DOMAIN/
Visita la página de configuración de Hosting para obtener más detalles sobre las reglas de reescritura. También puedes obtener información sobre el orden de prioridad de las respuestas de varias configuraciones de Hosting.
Realiza pruebas locales
Durante el desarrollo, puedes ejecutar y probar la imagen del contenedor de manera local. Consulta la documentación de Cloud Run para obtener instrucciones detalladas.
Próximos pasos
Configura el almacenamiento en caché de tu contenido dinámico en una CDN global.
Usa el SDK de Firebase Admin para interactuar con otros servicios de Firebase.
Obtén más información sobre Cloud Run, incluidas guías prácticas detalladas para establecer, administrar y configurar contenedores.
Revisa los precios y las cuotas y los límites de Cloud Run.