Combine Cloud Run con Firebase Hosting para generar y ofrecer su contenido dinámico o crear API REST como microservicios.
Con Cloud Run , puede implementar una aplicación empaquetada en una imagen de contenedor. Luego, usando Firebase Hosting, puedes dirigir solicitudes HTTPS para activar tu aplicación en contenedores.
- Cloud Run admite varios lenguajes (incluidos Go, Node.js, Python y Java), lo que le brinda la flexibilidad de utilizar el lenguaje de programación y el marco de su elección.
- Cloud Run escala automática y horizontalmente la imagen de su contenedor para manejar las solicitudes recibidas y luego lo reduce cuando la demanda disminuye.
- Solo paga por la CPU, la memoria y las redes consumidas durante el manejo de solicitudes.
Para ver ejemplos de casos de uso y ejemplos de Cloud Run integrado con Firebase Hosting, visite nuestra descripción general sin servidor .
Esta guía le muestra cómo:
- Escribe una aplicación sencilla de Hola Mundo.
- Contenga una aplicación y cárguela en Container Registry
- Implementar la imagen del contenedor en Cloud Run
- Solicitudes de alojamiento directo a su aplicación en contenedores
Tenga en cuenta que para mejorar el rendimiento de la entrega de contenido dinámico, opcionalmente puede ajustar la configuración de la caché .
Antes de que empieces
Antes de usar Cloud Run, debes completar algunas tareas iniciales, incluida la configuración de una cuenta de facturación de Cloud, habilitar la API de Cloud Run e instalar la herramienta de línea de comandos gcloud
.
Configura la facturación de tu proyecto
Cloud Run ofrece una cuota de uso gratuita , pero aun así debes tener una cuenta de facturación de Cloud asociada a tu proyecto de Firebase para usar o probar Cloud Run.
Habilite la API e instale el SDK
Habilite la API de Cloud Run en la consola de API de Google:
Abra la página API de Cloud Run en la consola de API de Google.
Cuando se le solicite, seleccione su proyecto de Firebase.
Haga clic en Habilitar en la página API de Cloud Run.
Instale e inicialice el SDK de la nube.
Comprueba que la herramienta
gcloud
esté configurada para el proyecto correcto:gcloud config list
Paso 1 : escriba la aplicación de muestra
Tenga en cuenta que Cloud Run admite muchos otros idiomas además de los idiomas que se muestran en el siguiente ejemplo.
Ir
Cree un nuevo directorio llamado
helloworld-go
y luego cambie el directorio a él:mkdir helloworld-go
cd helloworld-go
Cree un nuevo archivo llamado
helloworld.go
y luego agregue el siguiente código:Este código crea un servidor web básico que escucha en el puerto definido por la variable de entorno
PORT
.
Su aplicación está terminada y lista para ser contenedorizada y cargada en Container Registry.
Nodo.js
Cree un nuevo directorio llamado
helloworld-nodejs
y luego cambie el directorio a él:mkdir helloworld-nodejs
cd helloworld-nodejs
Cree un archivo
package.json
con el siguiente contenido:Cree un nuevo archivo llamado
index.js
y luego agregue el siguiente código:Este código crea un servidor web básico que escucha en el puerto definido por la variable de entorno
PORT
.
Su aplicación está terminada y lista para ser contenedorizada y cargada en Container Registry.
Pitón
Cree un nuevo directorio llamado
helloworld-python
, luego cambie el directorio a él:mkdir helloworld-python
cd helloworld-python
Cree un nuevo archivo llamado
app.py
y luego agregue el siguiente código:Este código crea un servidor web básico que escucha en el puerto definido por la variable de entorno
PORT
.
Su aplicación está terminada y lista para ser contenedorizada y cargada en Container Registry.
Java
Instale Java SE 8 o posterior, JDK y CURL .
Tenga en cuenta que solo necesitamos hacer esto para crear el nuevo proyecto web en el siguiente paso. El Dockerfile, que se describe más adelante, cargará todas las dependencias en el contenedor.
Desde la consola, cree un nuevo proyecto web vacío usando cURL y luego descomprima los comandos:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
Esto crea un proyecto SpringBoot.
Actualice la clase
SpringBootApplication
ensrc/main/java/com/example/helloworld/HelloworldApplication.java
agregando un@RestController
para manejar el mapeo/
y también agregue un campo@Value
para proporcionar la variable de entornoTARGET
:Este código crea un servidor web básico que escucha en el puerto definido por la variable de entorno
PORT
.
Su aplicación está terminada y lista para ser contenedorizada y cargada en Container Registry.
Paso 2 : Contenga una aplicación y cárguela en Container Registry
Contenga la aplicación de muestra creando un nuevo archivo llamado
Dockerfile
en el mismo directorio que los archivos fuente. Copie el siguiente contenido en su archivo.Ir
Nodo.js
Pitón
Java
Cree su imagen de contenedor usando Cloud Build ejecutando el siguiente comando desde el directorio que contiene su Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
Si tiene éxito, verá un mensaje de ÉXITO que contiene el nombre de la imagen.
(gcr.io/ PROJECT_ID /helloworld
).
La imagen del contenedor ahora está almacenada en Container Registry y puede reutilizarse si lo desea.
Tenga en cuenta que, en lugar de Cloud Build, puede utilizar una versión de Docker instalada localmente para crear su contenedor localmente .
Paso 3 : implementar la imagen del contenedor en Cloud Run
Implemente usando el siguiente comando:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
Cuando se le solicite:
- Seleccione una región (por ejemplo
us-central1
) - Confirme el nombre del servicio (por ejemplo,
helloworld
) - Responda
Y
para permitir invocaciones no autenticadas
- Seleccione una región (por ejemplo
Para obtener el mejor rendimiento, coloque su servicio 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
Espere unos momentos hasta que se complete la implementación. En caso de éxito, la línea de comando muestra la URL del servicio. Por ejemplo
https://helloworld- RANDOM_HASH -us-central1.a.run.appVisite su contenedor implementado abriendo la URL del servicio en un navegador web.
El siguiente paso le explica cómo acceder a esta aplicación en contenedores desde una URL de Firebase Hosting para que pueda generar contenido dinámico para su sitio alojado en Firebase.
Paso 4: Solicitudes de alojamiento directo a su aplicación en contenedores
Con reglas de reescritura , puede dirigir solicitudes que coincidan con patrones específicos a un único destino.
El siguiente ejemplo muestra cómo dirigir todas las solicitudes desde la página /helloworld
en su sitio de Hosting para activar el inicio y la ejecución de su instancia de contenedor helloworld
.
Asegúrate de eso:
Tienes la última versión de Firebase CLI .
Ha inicializado Firebase Hosting.
Para obtener instrucciones detalladas sobre cómo instalar la CLI e inicializar Hosting, consulte la guía de introducción a Hosting .
Abra su archivo
firebase.json
.Agregue la siguiente configuración
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) } } ] }
Implemente su configuración de alojamiento en su sitio ejecutando el siguiente comando desde la raíz del directorio de su proyecto:
firebase deploy --only hosting
Con esta función, puede asegurarse de que la revisión de su servicio Cloud Run para generar el contenido dinámico de su sitio se mantenga sincronizada con sus recursos de alojamiento estático y su configuración de alojamiento. Además, esta función le permite obtener una vista previa de sus reescrituras en los canales de vista previa de Cloud Run en Hosting.
Si agrega
"pingTag": true
a un bloquerun
de la configuraciónhosting.rewrites
, sus recursos y configuración de hosting estáticos se anclarán a la revisión más reciente del servicio Cloud Run, en el momento de la implementación. Si revierte una versión de su sitio, también se revierte la revisión del servicio Cloud Run "fijado".Esta función se basa en las etiquetas de Cloud Run , que tienen un límite de 1000 etiquetas por servicio y 2000 etiquetas por región. Esto significa que después de cientos de implementaciones, las versiones más antiguas de un sitio pueden dejar de funcionar.
Ahora se puede acceder a su contenedor a través de las siguientes URL:
Tus subdominios de Firebase:
PROJECT_ID .web.app/
yPROJECT_ID .firebaseapp.com/
Cualquier dominio personalizado conectado:
CUSTOM_DOMAIN /
Visite la página de configuración de Hosting para obtener más detalles sobre las reglas de reescritura . También puede obtener información sobre el orden de prioridad de las respuestas para varias configuraciones de Hosting.
Prueba localmente
Durante el desarrollo, puede ejecutar y probar la imagen de su contenedor localmente. Para obtener instrucciones detalladas, visite la documentación de Cloud Run .
Próximos pasos
Configure el almacenamiento en caché de su contenido dinámico en una CDN global.
Interactúe con otros servicios de Firebase mediante el SDK de Firebase Admin .
Obtenga más información sobre Cloud Run, incluidas guías prácticas detalladas para instalar, administrar y configurar contenedores.
Revise los precios , las cuotas y los límites de Cloud Run.