Associa Cloud Run a Firebase Hosting per generare e servire i tuoi contenuti dinamici o creare API REST come microservizi.
Utilizzando Cloud Run , puoi eseguire il deploy di un'applicazione inclusa in un'immagine container. Quindi, utilizzando Firebase Hosting, puoi indirizzare le richieste HTTPS per attivare la tua app containerizzata.
- Cloud Run supporta diversi linguaggi (tra cui Go, Node.js, Python e Java), offrendoti la flessibilità di utilizzare il linguaggio di programmazione e il framework che preferisci.
- Cloud Run ridimensiona automaticamente e orizzontalmente l'immagine del contenitore per gestire le richieste ricevute, quindi la ridimensiona quando la domanda diminuisce.
- Paghi solo per la CPU, la memoria e la rete consumate durante la gestione delle richieste.
Per esempi di casi d'uso ed esempi per Cloud Run integrato con Firebase Hosting, visita la nostra panoramica sul serverless .
Questa guida ti mostra come:
- Scrivi una semplice applicazione Hello World
- Containerizza un'app e caricala su Container Registry
- Distribuisci l'immagine del contenitore a Cloud Run
- Richieste di hosting dirette alla tua app containerizzata
Tieni presente che per migliorare le prestazioni della fornitura di contenuti dinamici, puoi facoltativamente ottimizzare le impostazioni della cache .
Prima di iniziare
Prima di utilizzare Cloud Run, devi completare alcune attività iniziali, tra cui la configurazione di un account di fatturazione Cloud, l'abilitazione dell'API Cloud Run e l'installazione dello strumento a riga di comando gcloud
.
Imposta la fatturazione per il tuo progetto
Cloud Run offre una quota di utilizzo gratuita , ma devi comunque avere un account di fatturazione Cloud associato al tuo progetto Firebase per utilizzare o provare Cloud Run.
Abilita l'API e installa l'SDK
Abilita l'API Cloud Run nella console delle API di Google:
Apri la pagina dell'API Cloud Run nella console delle API di Google.
Quando richiesto, seleziona il tuo progetto Firebase.
Fai clic su Abilita nella pagina API Cloud Run.
Installa e inizializza Cloud SDK.
Verifica che lo strumento
gcloud
sia configurato per il progetto corretto:gcloud config list
Passaggio 1 : scrivere l'applicazione di esempio
Tieni presente che Cloud Run supporta molte altre lingue oltre a quelle mostrate nell'esempio seguente.
Andare
Crea una nuova directory denominata
helloworld-go
, quindi modifica la directory al suo interno:mkdir helloworld-go
cd helloworld-go
Crea un nuovo file denominato
helloworld.go
, quindi aggiungi il seguente codice:Questo codice crea un server Web di base in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completata e pronta per essere inserita in un contenitore e caricata su Container Registry.
Node.js
Crea una nuova directory denominata
helloworld-nodejs
, quindi modifica la directory al suo interno:mkdir helloworld-nodejs
cd helloworld-nodejs
Crea un file
package.json
con il seguente contenuto:Crea un nuovo file denominato
index.js
, quindi aggiungi il seguente codice:Questo codice crea un server Web di base in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completata e pronta per essere inserita in un contenitore e caricata su Container Registry.
Pitone
Crea una nuova directory denominata
helloworld-python
, quindi modifica la directory al suo interno:mkdir helloworld-python
cd helloworld-python
Crea un nuovo file denominato
app.py
, quindi aggiungi il seguente codice:Questo codice crea un server Web di base in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completata e pronta per essere inserita in un contenitore e caricata su Container Registry.
Giava
Installa Java SE 8 o versioni successive JDK e CURL .
Tieni presente che dobbiamo farlo solo per creare il nuovo progetto web nel passaggio successivo. Il Dockerfile, descritto più avanti, caricherà tutte le dipendenze nel contenitore.
Dalla console, crea un nuovo progetto web vuoto utilizzando cURL quindi decomprimi i comandi:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
Questo crea un progetto SpringBoot.
Aggiorna la classe
SpringBootApplication
insrc/main/java/com/example/helloworld/HelloworldApplication.java
aggiungendo un@RestController
per gestire la mappatura/
e aggiungi anche un campo@Value
per fornire la variabile di ambienteTARGET
:Questo codice crea un server Web di base in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completata e pronta per essere inserita in un contenitore e caricata su Container Registry.
Passaggio 2 : containerizza un'app e caricala su Container Registry
Containerizza l'app di esempio creando un nuovo file denominato
Dockerfile
nella stessa directory dei file di origine. Copia il seguente contenuto nel tuo file.Andare
Node.js
Pitone
Giava
Crea l'immagine del tuo contenitore utilizzando Cloud Build eseguendo il comando seguente dalla directory contenente il tuo Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
In caso di successo, vedrai un messaggio di SUCCESSO contenente il nome dell'immagine
(gcr.io/ PROJECT_ID /helloworld
).
L'immagine del contenitore è ora archiviata in Container Registry e, se lo si desidera, può essere riutilizzata.
Tieni presente che, invece di Cloud Build, puoi utilizzare una versione di Docker installata localmente per creare il tuo contenitore localmente .
Passaggio 3 : distribuisci l'immagine del contenitore su Cloud Run
Distribuisci utilizzando il seguente comando:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
Quando richiesto:
- Seleziona una regione (ad esempio
us-central1
) - Conferma il nome del servizio (ad esempio,
helloworld
) - Rispondi
Y
per consentire invocazioni non autenticate
- Seleziona una regione (ad esempio
Per ottenere le migliori prestazioni, colloca il tuo servizio Cloud Run con l'hosting utilizzando le seguenti regioni:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Le riscritture su Cloud Run dall'hosting sono supportate nelle seguenti regioni:
-
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
Attendi qualche istante per il completamento della distribuzione. In caso di successo, la riga di comando visualizza l'URL del servizio. Ad esempio
https://helloworld- RANDOM_HASH -us-central1.a.run.appVisita il tuo contenitore distribuito aprendo l'URL del servizio in un browser web.
Il passaggio successivo ti illustra come accedere a questa app containerizzata da un URL di hosting Firebase in modo che possa generare contenuto dinamico per il tuo sito ospitato su Firebase.
Passaggio 4: indirizza le richieste di hosting alla tua app containerizzata
Con le regole di riscrittura , puoi indirizzare le richieste che corrispondono a modelli specifici a un'unica destinazione.
L'esempio seguente mostra come indirizzare tutte le richieste dalla pagina /helloworld
sul tuo sito di hosting per attivare l'avvio e l'esecuzione della tua istanza di contenitore helloworld
.
Assicurati che:
Hai inizializzato Firebase Hosting.
Per istruzioni dettagliate sull'installazione della CLI e sull'inizializzazione dell'hosting, consultare la guida introduttiva per l'hosting .
Apri il file
firebase.json
.Aggiungi la seguente configurazione
rewrite
nella sezionehosting
:"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) } } ] }
Distribuisci la configurazione di hosting sul tuo sito eseguendo il seguente comando dalla radice della directory del progetto:
firebase deploy --only hosting
Con questa funzione, puoi garantire che la revisione del tuo servizio Cloud Run per la generazione del contenuto dinamico del tuo sito sia mantenuta sincronizzata con le risorse di hosting statiche e la configurazione di hosting. Inoltre, questa funzionalità ti consente di visualizzare in anteprima le tue riscritture sui canali di anteprima di Cloud Run on Hosting.
Se aggiungi
"pingTag": true
a un bloccorun
della configurazionehosting.rewrites
, le risorse e la configurazione di hosting statiche verranno fissate alla revisione più recente del servizio Cloud Run, al momento della distribuzione. Se esegui il rollback di una versione del tuo sito, viene eseguito il rollback anche della revisione del servizio Cloud Run "bloccato".Questa funzionalità si basa sui tag Cloud Run , che hanno un limite di 1000 tag per servizio e 2000 tag per regione. Ciò significa che dopo centinaia di implementazioni, le versioni più vecchie di un sito potrebbero smettere di funzionare.
Il tuo contenitore è ora raggiungibile tramite i seguenti URL:
I tuoi sottodomini Firebase:
PROJECT_ID .web.app/
ePROJECT_ID .firebaseapp.com/
Eventuali domini personalizzati collegati:
CUSTOM_DOMAIN /
Visita la pagina di configurazione dell'hosting per maggiori dettagli sulle regole di riscrittura . Puoi anche conoscere l' ordine di priorità delle risposte per varie configurazioni di Hosting.
Prova localmente
Durante lo sviluppo, puoi eseguire e testare l'immagine del contenitore localmente. Per istruzioni dettagliate, consulta la documentazione di Cloud Run .
Prossimi passi
Configura la memorizzazione nella cache dei tuoi contenuti dinamici su una CDN globale.
Interagisci con altri servizi Firebase utilizzando Firebase Admin SDK .
Scopri di più su Cloud Run, incluse guide pratiche dettagliate per l'impostazione, la gestione e la configurazione dei contenitori.
Esamina i prezzi , le quote e i limiti per Cloud Run.