Vincula Cloud Run con Firebase Hosting para generar y publicar tu contenido dinámico o compilar APIs de REST como microservicios.
Con Cloud Run, puedes implementar una aplicación empaquetada en una imagen de contenedor. Luego, con Firebase Hosting, puedes dirigir las solicitudes HTTPS para activar tu app alojada en contenedores.
- Cloud Run admite varios idiomas (incluidos Go, Node.js, Python y Java), lo que te da la flexibilidad de usar el lenguaje de programación y el framework que prefieras.
- Cloud Run escala de forma automática y horizontal tu imagen de contenedor para manejar las solicitudes recibidas 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
- Organiza una app en contenedores y súbela a Container Registry
- Implementa la imagen de contenedor en Cloud Run
- Dirige las solicitudes de Hosting hacia tu app alojada en contenedores
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.
incluida la configuración de una cuenta de Cloud Billing, la habilitación de Cloud Run
e 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, pero igualmente 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
Habilita 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 idiomas además de los lenguajes 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
.
Tu app está terminada, 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
.
Tu app está terminada, 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
.
Tu app está terminada y 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
.
Tu app está terminada y 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
Compila tu imagen de contenedor con Cloud Build ejecutando el siguiente comando 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
).
La imagen del contenedor ahora se almacena en Container Registry y se puede volver a usar si deseado.
Ten en cuenta que, en lugar de Cloud Build, puedes usar una versión instalada de forma local. de Docker 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 Cloud Run con Hosting mediante las siguientes regiones:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Las reescrituras de Hosting a Cloud Run 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 esta aplicación alojada en contenedores desde un Firebase Hosting para que pueda generar contenido dinámico para tu 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 tu sitio Hosting para activar la inicialización y ejecución de
tu instancia de contenedor helloworld
.
Asegúrate de cumplir con estas condiciones:
Inicializaste Firebase Hosting.
Para obtener instrucciones detalladas sobre cómo instalar la CLI y cómo inicializar el entorno Hosting, consulta la Guía de introducción de 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 ver Obtén más información sobre las reglas de reescritura. Puedes aprenderás sobre la orden de prioridad de las respuestas para varias configuraciones de Hosting.
Realiza pruebas locales
Durante el desarrollo, puedes ejecutar y probar la imagen del contenedor de manera local. Para instrucciones detalladas, visita la Documentación de Cloud Run
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.
Más información sobre Cloud Run, por ejemplo guías prácticas detalladas para configurar, administrar y configurar contenedores.
Revisa los precios, las cuotas y los límites de Cloud Run.