Esegui l'upgrade delle funzioni di 1ª gen. a Cloud Run Functions
Questa guida descrive come eseguire l'upgrade delle funzioni HTTP e Pub/Sub di 1ª gen. a Cloud Run Functions in esecuzione su Cloud Run. Questa guida si applica solo alle funzioni di 1ª gen. create utilizzando l'API Cloud Functions v1. Le istruzioni di questa guida non si applicano alle funzioni di 2ª gen. create con l'API Cloud Functions v2 o Cloud Functions for Firebase, che è un prodotto separato.
Una volta completato l'upgrade, puoi interagire con la funzione di cui è stato eseguito l'upgrade solo utilizzando l'API Cloud Run Admin e gli strumenti Cloud Run.
Limitazioni
Al momento, lo strumento di upgrade supporta solo l'upgrade delle funzioni attivate da HTTP e Pub/Sub.
Panoramica del processo di upgrade
Ecco una panoramica generale del processo di upgrade:
I dettagli di questa procedura sono descritti nelle sezioni seguenti.
Panoramica dell'avvio dell'upgrade
- Quando avvii l'upgrade (utilizzando Google Cloud CLI o la console Google Cloud ), lo strumento di upgrade crea una funzione di 2ª gen. temporanea che è una copia della funzione di 1ª gen. originale. Una volta avviato il processo di migrazione, non eliminare il codice sorgente della funzione da Cloud Storage o il container della funzione da Artifact Registry.
Questa funzione di 2ª gen:
- Funge da ponte tra la funzione di 1ª gen. originale e la funzione finale con upgrade completo.
- Ha lo stesso nome, codice e configurazione della funzione di 1ª gen. originale.
- Se esegui l'upgrade di una funzione HTTP, ha lo stesso URL
cloudfunctions.netdella funzione di 1ª gen. originale e anche un URLrun.appdi Cloud Run.- Dopo aver avviato l'upgrade, sia la funzione di 1ª gen. sia la copia della funzione di 2ª gen. vengono assegnate allo stesso URL
cloudfunctions.net. Quando invii richieste all'URLcloudfunctions.net, il traffico continua a essere indirizzato alla funzione di 1ª gen. Anche la copia della funzione di 2ª gen. ha un URL Cloud Runrun.app. Gli URL delle funzioni di 2ª gen. non riceveranno traffico finché non lo reindirizzerai nel passaggio successivo.
- Dopo aver avviato l'upgrade, sia la funzione di 1ª gen. sia la copia della funzione di 2ª gen. vengono assegnate allo stesso URL
- Se esegui l'upgrade di una funzione Pub/Sub, utilizza lo stesso argomento Pub/Sub della funzione di 1ª gen., ma non ha ancora una sottoscrizione.
- Se esegui l'upgrade di una funzione HTTP, ha lo stesso URL
- Tieni presente che se non hai bloccato le dipendenze a una versione specifica, la copia della funzione di 2ª gen. appena creata potrebbe utilizzare una versione più recente della dipendenza.
- La funzione di 1ª gen. continua a essere elencata nella consoleGoogle Cloud di 1ª gen. e la sua copia di 2ª gen. temporanea viene visualizzata per la prima volta nella console Cloud Run.
Esempio: questa tabella mostra lo stato delle funzioni HTTP durante il primo passaggio per l'upgrade.
| Funzioni | Gestisce traffico? | Visibile nella console? |
|---|---|---|
| Funzione di 1ª gen. originale | Sì, dall'URL cloudfunctions.net |
Sì, nella console di 1ª gen. |
| Nuova copia di 2ª gen. | No. Questa funzione ha gli URL cloudfunctions.net e run.app, ma non gestiranno il traffico fino al passaggio di reindirizzamento. |
Sì, nella console Cloud Run. |
Panoramica del reindirizzamento del traffico
- Quando reindirizzi il traffico, il risultato dipende dal fatto che la funzione di cui stai eseguendo l'upgrade sia una funzione HTTP o Pub/Sub:
- Se esegui l'upgrade di una funzione HTTP, il traffico indirizzato all'URL
cloudfunctions.netviene inviato alla funzione di 2ª gen. La tua funzione di 1ª gen. continua a esistere, ma non riceve traffico. - Se stai eseguendo l'upgrade di una funzione Pub/Sub, il trigger della funzione di 2ª gen. utilizza lo stesso argomento Pub/Sub, ma crea un nuova sottoscrizione che invia un messaggio alla funzione Cloud Run. La vecchia sottoscrizione viene eliminata.
- Se esegui l'upgrade di una funzione HTTP, il traffico indirizzato all'URL
- La funzione di 1ª gen. scompare dalla console di 1ª gen.
- Se esegui il comando
gcloud functions describe, puoi vedere che l'ambiente della funzione è ora di 2ª gen. - Tieni presente che durante questa fase di transizione esistono dei rischi, soprattutto per le funzioni Pub/Sub:
- Duplicazione di messaggi: viene creata una nuova sottoscrizione prima che quella precedente venga eliminata. Durante questo periodo di transizione, lo stesso messaggio Pub/Sub potrebbe essere inviato sia alla vecchia funzione sia alla nuova.
- Perdita di messaggi: se esegui l'upgrade di una funzione Pub/Sub e la nuova funzione non riesce a gestire i messaggi dopo il reindirizzamento del traffico, rischi di perdere i messaggi Pub/Sub. Ciò è particolarmente vero se la funzione ha i nuovi tentativi disattivati. Per maggiori dettagli, consulta Esegui l'upgrade di Pub/Sub.
Esempio: questa tabella mostra lo stato delle funzioni HTTP durante il passaggio di reindirizzamento del traffico.
| Funzioni | Gestisce traffico? | Visibile nella console? |
|---|---|---|
| Funzione di 1ª gen. originale | No. | Non più visibile nella console di 1ª gen., ma ancora esistente. |
| Nuova copia di 2ª gen. | Sì, dall'URL cloudfunctions.net e dall'URL Cloud Run run.app. |
Sì, nella console Cloud Run. |
Panoramica del rollback del traffico
- Quando esegui il rollback del traffico, lo strumento di upgrade esegue il rollback di tutto il traffico dalla copia della funzione di 2ª gen. alla funzione di 1ª gen. originale, che ora gestisce tutto il traffico. La funzione di 2ª gen. resta disponibile per i test.
- Se esegui il rollback di una funzione Pub/Sub, la sottoscrizione alla funzione di 1ª gen. viene ricreata e la sottoscrizione alla funzione di 2ª gen. viene eliminata.
- Se vuoi procedere con l'upgrade dopo aver eseguito il rollback del traffico, devi prima reindirizzare di nuovo il traffico alla nuova funzione di 2ª gen. per continuare.
Esempio: questa tabella mostra lo stato delle funzioni HTTP se esegui il rollback del traffico.
| Funzioni | Gestisce traffico? | Visibile nella console? |
|---|---|---|
| Funzione di 1ª gen. originale | Sì. | Sì, nella console di 1ª gen. |
| Nuova copia di 2ª gen. | No. | Non è più visibile nella console Cloud Run, ma esiste ancora. |
Panoramica dell'interruzione
Puoi interrompere l'upgrade in qualsiasi momento prima di eseguire il commit. Una volta eseguito il commit, l'upgrade diventa irreversibile.
Esempio: questa tabella mostra lo stato delle funzioni HTTP se interrompi l'upgrade.
| Funzioni | Gestisce traffico? | Visibile nella console? |
|---|---|---|
| Funzione di 1ª gen. originale | Sì. | Sì, nella console di 1ª gen. |
| Copia di 2ª gen. | No. | Non è più visibile nella console Cloud Run e non esiste più. |
Panoramica del commit (irreversibile)
- L'esecuzione del commit dell'upgrade completa la procedura di upgrade della funzione di 1ª gen. L'operazione è irreversibile.
- La funzione di 2ª gen. temporanea viene convertita in una funzione Cloud Run completa basata sull'API Cloud Run Admin.
- Ciò equivale all'esecuzione del comando
detachsu una funzione di 2ª gen. Il comandodetachscollega una funzione Cloud Functions v2 dal suo ambiente API esistente. - In seguito, potrai interagire solo con la funzione di cui è stato eseguito l'upgrade utilizzando l'API Cloud Run Admin e gli strumenti Cloud Run.
- Ciò equivale all'esecuzione del comando
- La funzione di 1ª gen. viene eliminata e tutto il traffico viene indirizzato alla funzione Cloud Run di cui è stato eseguito l'upgrade.
Esempio: questa tabella mostra lo stato delle funzioni HTTP dopo il commit dell'upgrade:
| Funzioni | Gestisce traffico? | Visibile nella console? |
|---|---|---|
| Nuova funzione Cloud Run basata sull'API Cloud Run Admin. | Sì, dall'URL cloudfunctions.net e dall'URL Cloud Run run.app. |
Sì, nella console Cloud Run. |
| Funzione di 1ª gen. originale | No. | No, non esiste più. |
| Copia di 2ª gen. | No. | No, non esiste più. |
Suggerimenti per i test
I test sono una parte essenziale del processo di upgrade.
Ti consigliamo di acquisire familiarità con lo strumento di upgrade testandolo su funzioni non in produzione. Una volta acquisita dimestichezza con la procedura e aver ottenuto risultati costanti, puoi iniziare a eseguire l'upgrade delle funzioni in produzione.
Di seguito sono riportati alcuni strumenti e tecniche che puoi utilizzare per testare le tue funzioni durante un upgrade:
Ogni volta che le funzioni cambiano stato, utilizza i comandi Google Cloud CLI
describeper verificare che la funzione esista e che il suo ambiente e la sua versione siano quelli previsti. A seconda dello stato attuale della funzione di cui esegui l'upgrade, utilizza uno dei seguentiCloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
Cloud Functions:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Utilizza la pagina Logging nelle console di 1ª gen. e Cloud Run per visualizzare i dettagli del traffico delle funzioni.
Utilizza la console Cloud Run per visualizzare e testare la copia della funzione di 2ª gen. man mano che procede con il processo di upgrade:
- Utilizza la scheda Trigger per testare la copia della funzione di 2ª gen. dopo aver avviato l'upgrade.
- Utilizza la scheda YAML per visualizzare i dettagli della funzione, incluso il relativo URL
run.appdi Cloud Run.
Prima di iniziare
Prima di iniziare l'upgrade, assicurati di soddisfare i seguenti prerequisiti:
Hai abilitato l'API Cloud Run:
gcloud services enable run.googleapis.com
Hai una funzione HTTP o Pub/Sub di 1ª gen. esistente.
Disponi dei ruoli IAM richiesti:
- Devi aver impostato
roles/iam.serviceAccountUsersul service account della funzione. - Per eseguire l'upgrade, devi disporre del ruolo
roles/cloudfunctions.admino di un ruolo equivalente nel progetto. - Per una funzione Pub/Sub con un'impostazione
no-retry, devi disporre del ruoloroles/serviceusage.consumero di un ruolo personalizzato con l'autorizzazioneserviceusage.services.user. Avrai bisogno anche dei ruolipubub.topic.getIAMPermissionsepubsub.topic.setIAMPermissions. - Per eseguire il commit dell'upgrade di una funzione Pub/Sub, devi disporre del ruolo
roles/pubsub.admin. Il ruoloroles/pubsub.adminè un ruolo a livello di progetto che concede l'accesso amministrativo a tutte le risorse Pub/Sub all'interno di un progetto.
Puoi visualizzare le policy IAM della funzione nel modo seguente:
gcloud functions get-iam-policy FUNCTION_NAME
- Devi aver impostato
Devi aver concesso
roles/cloudfunctions.adminal service account della funzione. Per concedere il ruoloroles/cloudfunctions.admin, utilizza il comandogcloud functions add-iam-policy-binding, ad esempio:gcloud functions add-iam-policy-binding FUNCTION_NAME \ --region=REGION \ --member=serviceAccount:SERVICE_ACCOUNT \ --role="roles/cloudfunctions.admin"
Se ricevi errori quando provi a eseguire questo comando, assicurati che la tua funzione rispetti le policy della tua organizzazione. Ad esempio, la tua organizzazione potrebbe non consentire le funzioni HTTP non autenticate.
Per saperne di più su membri e ruoli, consulta Aggiunta di entità e concessione dei ruoli.
Esegui l'upgrade delle funzioni HTTP
Questa sezione descrive come eseguire l'upgrade di una funzione HTTP di 1ª gen. a una funzione Cloud Run. Per scoprire come eseguire l'upgrade di una funzione Pub/Sub di 1ª gen., consulta la sezione successiva.
Dopo aver reindirizzato il traffico ed eseguito il commit dell'upgrade come descritto nelle sezioni seguenti, l'URL cloudfunctions.net associato alla funzione HTTP di 1ª gen. originale continuerà a funzionare e a indirizzare il traffico alla nuova funzione Cloud Run.
Avvia l'upgrade della funzione HTTP
Questo passaggio crea una copia di 2ª gen. della funzione di 1ª gen.
Console
Nella console Google Cloud , vai alla pagina Functions (1ª gen.):
Individua la funzione di 1ª gen. di cui vuoi eseguire l'upgrade e verifica che il suo stato nella colonna Stato upgrade sia Pronta per l'upgrade.
Fai clic sul nome della funzione per visualizzare la pagina dei dettagli.
Nella pagina dei dettagli della funzione, fai clic su Esegui l'upgrade in Idoneo per l'upgrade.
Segui le istruzioni per avviare il processo di upgrade.
Una volta completato questo passaggio, viene visualizzato il riquadro Upgrade in corso, che ti chiede di fare clic sul link Vai a Cloud Run per continuare il processo di upgrade.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --setup-config:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
Sostituisci FUNCTION_NAME con il nome della tua funzione di 1ª gen.
Dopo aver avviato l'upgrade:
- La funzione di 1ª gen. continua a gestire il traffico verso il suo URL originale. Puoi visualizzare questo URL andando alla pagina dei dettagli della funzione nella console Functions (1ª gen.) e aprendo la scheda Trigger.
Viene creata una funzione di 2ª gen. temporanea che è una copia della funzione di 1ª gen. Ha lo stesso URL
cloudfunctions.netdella funzione di 1ª gen., nonché un nuovo URLrun.appdi Cloud Run. Puoi visualizzare entrambi gli URL andando alla pagina dei dettagli della funzione nella console Cloud Run e aprendo la scheda YAML. In alternativa, puoi utilizzare questo comando:gcloud run services describe YOUR_SERVICE_NAME \ --region YOUR_REGION \ --format="value(status.url)"Puoi verificare che la copia di 2ª gen. della funzione di 1ª gen. esista:
gcloud run services describe FUNCTION_NAME --format yaml
Puoi verificare l'ambiente della funzione di 1ª gen., in cui l'output dovrebbe mostrare l'ambiente della funzione come
1st gen:gcloud functions describe --region REGION_NAME FUNCTION_NAME
Risolvi i problemi relativi all'avvio dell'upgrade
L'upgrade non riesce in queste condizioni:
- Esiste già una funzione con lo stesso nome nello stesso progetto e nella stessa regione.
- La funzione di 1ª gen. utilizza un runtime dismesso, pertanto non è idonea per l'upgrade finché non viene rieseguito il deployment con un runtime supportato.
- Il chiamante non dispone dell'autorizzazione
cloudfunctions.functions.generationUpgrade. Tieni presente che il chiamante deve disporre del ruoloroles/cloudfunctions.admino di un ruolo equivalente nel progetto.
Reindirizza il traffico per la funzione HTTP
A questo punto, devi testare l'URL sia per la funzione originale sia per la sua copia. Assicurati che funzionino come previsto prima di procedere. Se riscontri problemi, interrompi l'upgrade per tornare allo stato iniziale, in cui puoi risolvere eventuali problemi sottostanti nella funzione di 1ª gen.
Il passaggio di reindirizzamento reindirizza il traffico dall'URL di Cloud Functions di 1ª gen. alla copia della funzione di 2ª gen.
Console
- Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Vai a Cloud Run.
- Fai clic su Esegui test funzione per testare la funzione (questo passaggio è facoltativo, ma consigliato).
- Quando è tutto pronto, fai clic su Reindirizza il traffico.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --redirect-traffic:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
Dopo aver reindirizzato il traffico, la copia della funzione di 2ª gen. gestisce il traffico sia verso l'URL della funzione (cloudfunctions.net) sia verso l'URL Cloud Run (run.app).
Testa la funzione HTTP dopo il reindirizzamento
Verifica l'ambiente della funzione:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
L'output mostra l'ambiente come
2nd gen.Utilizza lo strumento di logging della console per confrontare la copia della funzione di 2ª gen. con la funzione di 1ª gen. originale.
Risolvi i problemi di reindirizzamento
Il reindirizzamento non va a buon fine in queste condizioni:
- Non hai eseguito il passaggio precedente (
--setup-config).
Esegui il rollback del traffico per la funzione HTTP
Se non vuoi eseguire il commit dell'upgrade, puoi eseguire il rollback del traffico alla funzione di 1ª gen.
Console
Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions nella console Cloud Run, fai clic su Esegui il rollback del traffico.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --rollback-traffic:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
Dopo aver eseguito il rollback del traffico:
- La funzione di 1ª gen. gestisce il traffico verso l'URL
cloudfunctions.net. - La copia della funzione di 2ª gen. rimane disponibile e puoi attivarla utilizzando il relativo URL
run.app.
Puoi verificare l'ambiente della funzione nel seguente modo. L'output dovrebbe mostrare l'ambiente della funzione come 1st gen:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Il rollback non riesce se non hai reindirizzato il traffico alla funzione di 2ª gen.
Esegui il commit dell'upgrade per la funzione HTTP
Questo passaggio finalizza l'upgrade, dopodiché non potrai più interrompere il processo. Prima di eseguire questo passaggio, assicurati di aver testato a fondo le tue funzioni.
Console
Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions nella console Cloud Run, fai clic su Esegui il commit dell'upgrade.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --commit:
gcloud beta functions upgrade FUNCTION_NAME --commit
Dopo aver eseguito il commit dell'upgrade:
- La funzione di 1ª gen. viene eliminata e la copia della funzione di 2ª gen. viene separata per diventare una funzione Cloud Run completa.
- La funzione Cloud Run conserva l'URL
cloudfunctions.netinsieme al nuovo URLrun.app. Puoi verificare che la funzione di 1ª gen. non esiste più:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Puoi verificare i dettagli del servizio Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
L'output mostra una nuova generazione creata e l'etichetta Goog-managed-by ha un valore vuoto.
Il commit non va a buon fine quando il traffico non è stato reindirizzato alla funzione Cloud Run.
Esegui l'upgrade delle funzioni Pub/Sub
Questa sezione descrive come eseguire l'upgrade di una funzione Pub/Sub di 1ª gen. a una funzione Cloud Run.
Il processo di upgrade di una funzione Pub/Sub di 1ª gen. segue lo stesso schema di base dell'upgrade di una funzione HTTP, ma ci sono alcune considerazioni aggiuntive:
La disattivazione dei nuovi tentativi in caso di errore non è una funzionalità supportata su Cloud Run, ma è l'impostazione predefinita nella 1ª gen. Pertanto, potresti avere funzioni di entrambi i tipi. Le operazioni eseguite dallo strumento di upgrade dipendono da questa impostazione:
- Se la funzione di 1ª gen. ha i nuovi tentativi disattivati (l'impostazione predefinita per la 1ª gen.), lo strumento di upgrade crea un trigger Eventarc Pub/Sub insieme a una coda di messaggi non recapitabili (DLQ). Lo strumento di upgrade imposta la policy Identity and Access Management (IAM) per le sottoscrizioni e i relativi argomenti. Al termine dell'upgrade, l'argomento della coda dei messaggi non recapitabili memorizza i messaggi non consegnati, che puoi recuperare creando una nuova sottoscrizione alla coda dei messaggi non recapitabili.
- Se la funzione di 1ª gen. ha i nuovi tentativi abilitati, lo strumento di upgrade crea un trigger Eventarc Pub/Sub con le impostazioni predefinite.
Avvia l'upgrade della funzione Pub/Sub
Questo passaggio crea una copia di 2ª gen. della funzione di 1ª gen.
Console
Nella console Google Cloud , vai alla pagina Cloud Functions (1ª gen.):
Individua la funzione di 1ª gen. di cui vuoi eseguire l'upgrade e verifica che il suo stato nella colonna Stato upgrade sia Pronta per l'upgrade.
Fai clic sul nome della funzione per visualizzare la pagina dei dettagli.
Nella pagina dei dettagli della funzione, fai clic su Esegui l'upgrade in Idoneo per l'upgrade.
Al termine di questa fase, viene visualizzato il riquadro Upgrade in corso, che ti invita a fare clic sul link Vai a Cloud Run per continuare il processo di upgrade.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --setup-config:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
Sostituisci FUNCTION_NAME con il nome della tua funzione di 1ª gen.
(Facoltativo) Specifica un service account per il trigger:
gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL
Sostituisci CUSTOM_SA_EMAIL con l'email del tuo service account personalizzato.
Se il service account trigger (service account Compute Engine predefinito o service account personalizzato specificato) non dispone dell'autorizzazione run.route.invoke, il sistema ti chiede di associare il ruolo roles/run.invoker.
Dopo aver avviato l'upgrade:
- La funzione di 1ª gen. continua a gestire il traffico verso il suo URL originale.
- Viene creata una copia di 2ª gen. della funzione di 1ª gen. Puoi attivarla utilizzando il relativo URL Cloud Run.
- La funzione di 1ª gen. continua a gestire il traffico verso il suo URL
cloudfunctions.net.
Testa la funzione Pub/Sub dopo il passaggio di avvio dell'upgrade
Puoi verificare che la copia di 2ª gen. della funzione di 1ª gen. esista:
gcloud run services describe FUNCTION_NAME --format yaml
Puoi verificare l'ambiente della funzione di 1ª gen., in cui l'output dovrebbe mostrare l'ambiente della funzione come
1st gen:gcloud functions describe --region REGION_NAME FUNCTION_NAME
Pubblica un messaggio nell'argomento di destinazione per attivare la funzione di 1ª gen.
Per testare la nuova funzione, aggiungi un trigger Pub/Sub e verifica che la funzione risponda al trigger come previsto:
- Seleziona la funzione nella console Cloud Run e apri la scheda Trigger.
- Fai clic su Aggiungi trigger e, nel riquadro Trigger Eventarc, seleziona un argomento per attivare la funzione. Per impostazione predefinita, la funzione viene attivata quando un messaggio viene pubblicato nell'argomento.
- Nel riquadro Upgrade in corso, fai clic su Esegui test funzione.
- Nella finestra di Cloud Code per Cloud Shell che si apre, pubblica un messaggio nell'argomento che hai aggiunto nella scheda Trigger.
- Nella console Cloud Run, vai a Osservabilità > Log per verificare che la funzione abbia pubblicato il messaggio. In alternativa, puoi utilizzare la riga di comando in Cloud Code per Cloud Shell per visualizzare l'output di logging.
Ad esempio, supponiamo di avere una funzione Hello World di base che pubblica un saluto. Dopo aver specificato il nuovo trigger, puoi testarlo in Cloud Code per Cloud Shell nel seguente modo:
gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME gcloud functions logs read --region YOUR_REGION --limit 50
Risolvi i problemi relativi al passaggio di avvio dell'upgrade di Pub/Sub
L'upgrade non riesce in queste condizioni:
- Esiste già una funzione Cloud Run con lo stesso nome nella stessa regione e nello stesso progetto.
- Hai tentato di eseguire l'upgrade di una funzione di 2ª gen.
- La funzione di 1ª gen. è già in fase di upgrade.
- La funzione di 1ª gen. non esiste.
- La funzione di 1ª gen. è in stato di errore.
- La funzione di 1ª gen. non è una funzione HTTP né Pub/Sub.
- Il chiamante non dispone dell'autorizzazione
cloudfunctions.functions.generationUpgrade. Tieni presente che il chiamante deve disporre del ruoloroles/cloudfunctions.admino di un ruolo equivalente nel progetto.
Reindirizza il traffico per la funzione Pub/Sub
Questo passaggio reindirizza il traffico dall'URL di Cloud Functions di 1ª gen. alla copia della funzione di 2ª gen.
Console
- Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Vai a Cloud Run.
- Fai clic su Esegui test funzione per testare la funzione (questo passaggio è facoltativo, ma consigliato).
- Quando è tutto pronto, fai clic su Reindirizza il traffico.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --redirect-traffic:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
Dopo il reindirizzamento del traffico, la funzione di 2ª gen. gestisce il traffico sia verso l'URL Cloud Functions sia verso l'URL Cloud Run.
Testa Pub/Sub dopo il reindirizzamento del traffico
Puoi verificare l'ambiente della funzione:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
L'output mostra l'ambiente come
2nd gen.- Il valore
eventTrigger.retryPolicycorrisponde alla policy di ripetizione specificata durante la creazione della funzione. eventTrigger.serviceAccountEmailè il service account Compute Engine predefinito o il service account personalizzato specificato.- La pubblicazione di un messaggio nell'argomento di destinazione ora attiva la copia della funzione di 2ª gen.
- Il valore
Risolvi i problemi relativi a Pub/Sub per il reindirizzamento
Il reindirizzamento non va a buon fine in queste condizioni:
- Non hai eseguito il passaggio precedente (
--setup-config). - La funzione Cloud Run è stata eliminata manualmente.
Esegui il rollback del traffico per la funzione Pub/Sub
Questo passaggio ripristina il traffico alla funzione di 1ª gen.
Console
Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Esegui il rollback del traffico.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --rollback-traffic:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
Dopo aver eseguito il rollback del traffico:
- La funzione torna allo stato in cui si trovava immediatamente dopo il passaggio di upgrade iniziale.
- La funzione di 1ª gen. gestisce il traffico verso l'URL
cloudfunctions.net. La copia di 2ª gen. rimane disponibile e puoi attivarla utilizzando il relativo URL Cloud Run.
Puoi verificare l'ambiente della funzione:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
L'output dovrebbe mostrare l'ambiente della funzione come
1st gen.La pubblicazione di un messaggio nell'argomento di destinazione attiva la funzione di 1ª gen.
Il rollback non riesce se non hai reindirizzato il traffico alla funzione Cloud Run.
Esegui il commit dell'upgrade per la funzione Pub/Sub
Questo passaggio finalizza l'upgrade, dopodiché non potrai più interrompere il processo. Questo passaggio non è reversibile. Prima di eseguire questo passaggio, assicurati di aver testato a fondo le tue funzioni.
Console
Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Esegui il commit dell'upgrade.
gcloud
Esegui il comando gcloud beta functions upgrade con il flag --commit:
gcloud beta functions upgrade FUNCTION_NAME --commit
Dopo aver eseguito il commit dell'upgrade:
- La funzione di 1ª gen. viene eliminata.
- La funzione Cloud Run conserva l'URL
cloudfunctions.net. - Puoi verificare che la funzione non venga più visualizzata nell'elenco:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
- Puoi verificare i dettagli del servizio Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
- L'output mostra che è stata creata una nuova generazione. L'etichetta
Goog-managed-bydeve avere un valore vuoto.
- L'output mostra che è stata creata una nuova generazione. L'etichetta
- Se hai creato la funzione di 1ª gen. senza selezionare Riprova in caso di errore, la sottoscrizione Pub/Sub per il trigger ha una coda di messaggi non recapitabili (DLQ).
- La pubblicazione di un messaggio nell'argomento di destinazione ora attiva la funzione Cloud Run.
Il commit non va a buon fine nelle seguenti condizioni:
- Il traffico non è stato reindirizzato alla funzione Cloud Run.
- La funzione Cloud Run è stata eliminata manualmente.
Interrompi l'upgrade
Questa azione annulla la procedura di upgrade. La nuova copia della funzione di 2ª gen. viene eliminata e la funzione di 1ª gen. continua a gestire il traffico verso l'URL cloudfunctions.net originale. Puoi eseguire questa azione in qualsiasi momento durante la procedura di upgrade prima di eseguire il commit dell'upgrade.
Se utilizzi la console Google Cloud per eseguire l'upgrade, l'interfaccia utente ti consente di interrompere il processo solo immediatamente dopo l'operazione di upgrade iniziale. Il pulsante Interrompi si trova nell'angolo in alto a sinistra della console Functions (1ª gen.). Se utilizzi Google Cloud CLI, puoi interrompere l'upgrade in qualsiasi momento prima di eseguirne il commit, dopodiché il processo diventa irreversibile.
Puoi utilizzare Google Cloud CLI per interrompere l'upgrade di una funzione anche se hai utilizzato la console Google Cloud per eseguire la procedura di upgrade:
gcloud beta functions upgrade FUNCTION_NAME --abort
Dopo l'interruzione dell'upgrade:
- La copia della funzione di 2ª gen. viene eliminata.
- La funzione di 1ª gen. gestisce il traffico verso l'URL
cloudfunctions.net. - Nella consoleGoogle Cloud , lo stato di upgrade della funzione cambia da Configurazione copiata a Pronta per l'upgrade.
Puoi verificare che il servizio Cloud Run non venga più visualizzato nell'elenco:
gcloud run services list
Puoi verificare l'ambiente della funzione:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
L'output mostra l'ambiente della funzione come 1st gen.
L'operazione di interruzione non riesce se hai già eseguito il commit dell'upgrade.
Controlla le policy IAM convertite
Durante la procedura di upgrade, lo strumento esegue una conversione applicando il criterio del "best effort" di ruoli e autorizzazioni tra Cloud Functions di 1ª gen. e le nuove funzioni Cloud Run.
La procedura di upgrade converte i ruoli IAM di Cloud Functions di 1ª gen. in ruoli Cloud Run equivalenti.
Regole di conversione:
roles/cloudfunctions.invokerviene convertito inroles/run.invoker.roles/cloudfunctions.developerviene convertito inroles/run.sourceDeveloper.roles/cloudfunctions.viewerviene convertito inroles/run.sourceViewer.roles/cloudfunctions.adminviene convertito inroles/run.admineroles/run.sourceDeveloper.
L'upgrade delle policy IAM non va a buon fine se il chiamante non dispone delle autorizzazioni projects.getIamPolicy o run.setIamPolicy. Il chiamante deve disporre del ruolo roles/cloudfunctions.admin o di un ruolo equivalente nel progetto.
Verifica l'upgrade delle policy IAM
Per verificare che l'upgrade delle tue policy IAM venga eseguito correttamente, controllale in ogni fase del processo di upgrade per confermare che abbiano i valori previsti:
Avvia la procedura di upgrade per la tua funzione:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
L'output mostra un messaggio di avviso se vengono rilevate associazioni dei ruoli personalizzati.
Verifica che le policy IAM impostate sulla funzione di 1ª gen. siano convertite e che ne venga eseguito l'upgrade alla funzione Cloud Run:
gcloud functions get-iam-policy FUNCTION_NAME gcloud run services get-iam-policy FUNCTION_NAME
Verifica che l'associazione del ruolo di invoker di Cloud Run Functions a livello di progetto venga convertita e ne venga eseguito l'upgrade alla funzione Cloud Run:
gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker" gcloud run services get-iam-policy FUNCTION_NAME
Passaggi successivi
- Scopri di più su Cloud Run Functions