Esegui l'upgrade delle funzioni di 1ª generazione. a Cloud Run Functions

Questa guida descrive come eseguire l'upgrade delle funzioni HTTP e Pub/Sub di 1ª generazione. a Cloud Run Functions, in esecuzione su Cloud Run. Questa guida si applica solo alle funzioni di 1ª generazione. create utilizzando l'API Cloud Functions v1. Le istruzioni di questa guida non si applicano alle funzioni di seconda generazione 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 della procedura di upgrade:

Panoramica dell'upgrade di una funzione di 1ª generazione a Cloud Run.
Figura 1. Una panoramica dei passaggi con cui una funzione di 1ª generazione. viene eseguita l'upgrade a Cloud Run.

I dettagli di questa procedura sono descritti nelle sezioni seguenti.

Panoramica di Avvia upgrade

  • Quando avvii l'upgrade (utilizzando Google Cloud CLI o la console Google Cloud ), lo strumento di upgrade crea una funzione temporanea di 2ª generazione che è una copia della funzione originale di 1ª generazione. Questa funzione di 2ª generazione:
    • Funge da ponte tra la funzione originale di 1ª gen. e la funzione finale completamente aggiornata.
    • Ha lo stesso nome, codice e configurazione della funzione di 1ª generazione originale.
      • Se esegui l'upgrade di una funzione HTTP, ha lo stesso URL cloudfunctions.net della funzione di 1ª generazione. originale e anche un URL run.app di Cloud Run.
        • Dopo aver avviato l'upgrade, sia la funzione di 1ª generazione. sia la copia della funzione di 2ª gen. vengono assegnate allo stesso URL cloudfunctions.net. Quando invii richieste all'URL cloudfunctions.net, il traffico continua a essere indirizzato alla funzione di 1ª generazione. Anche la copia della funzione di 2ª generazione ha un URL Cloud Runrun.app. Gli URL delle funzioni di 2ª generazione non riceveranno traffico finché non lo reindirizzerai nel passaggio successivo.
      • Se esegui l'upgrade di una funzione Pub/Sub, utilizza lo stesso argomento Pub/Sub della funzione di 1ª generazione, ma non ha ancora una sottoscrizione.
    • Tieni presente che se non hai bloccato le dipendenze a una versione specifica, la copia della funzione di2ª generazionee appena creata potrebbe utilizzare una versione più recente della dipendenza.
  • La funzione di 1ª generazione continua a essere elencata nella Google Cloud console di 1ª generazione. e la sua copia temporanea di 2ª generazione viene visualizzata per la prima volta nella console Cloud Run.

Esempio: questa tabella mostra lo stato delle funzioni HTTP durante il passaggio di upgrade iniziale.

Funzioni Gestione del traffico? Visibile nella console?
Funzione originale di 1ª generazione. Sì, dall'URL cloudfunctions.net Sì, console di 1ª generazione.
Nuova copia di 2ª generazione. No. Questa funzione ha URL cloudfunctions.net e run.app, ma non gestiranno il traffico fino al passaggio di reindirizzamento. Sì, la console Cloud Run.

Panoramica del reindirizzamento del traffico

  • Quando reindirizzi il traffico, il risultato dipende dal fatto che la funzione che 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.net viene inviato alla funzione di 2ª generazione. La tua funzione di 1ª generazione continua a esistere, ma non riceve traffico.
    • Se stai eseguendo l'upgrade di una funzione Pub/Sub, il trigger della funzione di 2ª generazione utilizza lo stesso argomento Pub/Sub, ma crea un nuovo abbonamento che invia un messaggio alla funzione Cloud Run. Il vecchio abbonamento viene eliminato.
  • La funzione di 1ª generazione. scompare dalla console di 1ª generazione.
  • Se esegui il comando gcloud functions describe, puoi vedere che l'ambiente della funzione è ora di 2ª generazione.
  • Tieni presente che durante questa fase di transizione esistono dei rischi, soprattutto per le funzioni Pub/Sub:
    • Messaggi duplicati: 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 tentativi disattivati. Per maggiori dettagli, vedi Eseguire l'upgrade di Pub/Sub.

Esempio: questa tabella mostra lo stato delle funzioni HTTP durante il passaggio di reindirizzamento del traffico.

Funzioni Gestione del traffico? Visibile nella console?
Funzione originale di 1ª generazione. No. Non più visibile nella console di 1ª generazione., ma ancora esistente.
Nuova copia di 2ª generazione. Sì, dall'URL cloudfunctions.net e dall'URL Cloud Run run.app. Sì, la 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ª generazione alla funzione originale di 1ª generazione, che ora gestisce tutto il traffico. La funzione di 2ª generazione. è ancora disponibile per i test.
  • Se esegui il rollback di una funzione Pub/Sub, l'abbonamento alla funzione di 1ª generazione viene ricreato e l'abbonamento alla funzione di 2ª generazione viene eliminato.
  • Se vuoi procedere con l'upgrade dopo aver eseguito il rollback del traffico, devi prima reindirizzare di nuovo il traffico alla nuova funzione di2ª generazionen. per continuare.

Esempio: questa tabella mostra lo stato delle funzioni HTTP se esegui il rollback del traffico.

Funzioni Gestione del traffico? Visibile nella console?
Funzione originale di 1ª generazione. Sì. Sì, console di 1ª generazione.
Nuova copia di 2ª generazione. No. Non è più visibile nella console Cloud Run, ma esiste ancora.

Interrompi panoramica

Puoi interrompere l'upgrade in qualsiasi momento prima di confermarlo. Una volta eseguito il commit, l'upgrade diventa irreversibile.

Esempio: questa tabella mostra lo stato delle funzioni HTTP se interrompi l'upgrade.

Funzioni Gestione del traffico? Visibile nella console?
Funzione originale di 1ª generazione. Sì. Sì, console di 1ª generazione.
2ª generazione copy No. Non è più visibile nella console Cloud Run, non esiste più.

Panoramica del commit (irreversibile)

  • L'esecuzione del commit dell'upgrade completa la procedura di upgrade della funzione di 1ª generazione. L'operazione è irreversibile.
  • La funzione di 2ª generazione temporanea viene convertita in una funzione Cloud Run completa basata sull'API Cloud Run Admin.
    • Questo è l'equivalente dell'esecuzione del comando detach su una funzione di 2ª generazione. Il comando detach scollega una funzione Cloud Functions v2 dal suo ambiente API esistente.
    • In futuro, potrai interagire con la funzione di cui è stato eseguito l'upgrade solo utilizzando l'API Cloud Run Admin e gli strumenti Cloud Run.
  • La funzione di 1ª generazione. 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 Gestione del 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ì, la console Cloud Run.
Funzione originale di 1ª generazione. No. No, non esiste più.
2ª generazione copy No. No, non esiste più.

Suggerimenti per i test

I test sono una parte essenziale del processo di upgrade.

Ti consigliamo di familiarizzare con lo strumento di upgrade testandolo su funzioni non di produzione. Una volta acquisita dimestichezza con la procedura e ottenuti risultati costanti, puoi iniziare a eseguire l'upgrade delle funzioni di produzione.

Di seguito sono riportati alcuni strumenti e tecniche che puoi utilizzare per testare le tue funzioni durante un upgrade:

  • Ogni volta che le tue funzioni cambiano stato, utilizza i comandi describe di Google Cloud CLI per 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 seguenti

    • Cloud 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ª generazione. 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ª generazione man mano che procede con il processo di upgrade:

    • Utilizza la scheda Trigger per testare la copia della funzione di 2ª generazione. dopo aver avviato l'upgrade.
    • Utilizza la scheda YAML per visualizzare i dettagli della funzione, incluso il relativo URL run.app di 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ª generazione esistente.

  • Disponi dei ruoli IAM richiesti:

    • Devi impostare roles/iam.serviceAccountUser sul service account della funzione.
    • Per eseguire l'upgrade, devi disporre del ruolo roles/cloudfunctions.admin o di un ruolo equivalente nel progetto.
    • Per una funzione Pub/Sub con un'impostazione no-retry, devi avere il ruolo roles/serviceusage.consumer o un ruolo personalizzato con l'autorizzazione serviceusage.services.user.
    • Per eseguire il commit di un upgrade della funzione Pub/Sub, devi disporre del ruolo roles/pubsub.admin. Il ruolo roles/pubsub.admin è un ruolo a livello di progetto che concede l'accesso amministrativo a tutte le risorse Pub/Sub all'interno di un progetto.

    Per visualizzare i criteri IAM della funzione:

    gcloud functions get-iam-policy FUNCTION_NAME
  • Devi aver concesso roles/cloudfunctions.admin all'account di servizio della funzione. Per concedere il ruolo roles/cloudfunctions.admin, utilizza il comando gcloud 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 norme della tua organizzazione. Ad esempio, la tua organizzazione potrebbe non consentire le funzioni HTTP non autenticate.

Per saperne di più su membri e ruoli, vedi Aggiungere entità e concedere ruoli.

Esegui l'upgrade delle funzioni HTTP

Questa sezione descrive come eseguire l'upgrade di una funzione HTTP di 1ª generazione. a una funzione Cloud Run. Per scoprire come eseguire l'upgrade di una funzione Pub/Sub di 1ª generazione, consulta la sezione successiva.

Dopo aver reindirizzato il traffico e confermato l'upgrade come descritto nelle sezioni seguenti, l'URL cloudfunctions.net associato alla funzione HTTP di 1ª generazione. 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ª generazione. della funzione di 1ª generazione.

Console

  1. Nella console Google Cloud , vai alla pagina Funzioni (1ª generazione.):

    Vai a Functions (1ª generazione.)

  2. Individua la funzione di 1ª generazione. di cui vuoi eseguire l'upgrade e verifica che il relativo stato nella colonna Stato upgrade sia Pronto per l'upgrade.

  3. Fai clic sul nome della funzione per visualizzare la relativa pagina dei dettagli.

  4. Nella pagina dei dettagli della funzione, fai clic su Esegui l'upgrade in Idoneo per l'upgrade.

  5. Segui le istruzioni per avviare la procedura 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 la procedura 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ª generazione.

Dopo aver avviato l'upgrade:

  • La funzione di 1ª generazione. continua a gestire il traffico verso il suo URL originale. Puoi visualizzare questo URL andando alla pagina dei dettagli della funzione nella console Functions1ª generazioneen) e aprendo la scheda Trigger.
  • Viene creata una funzione di 2ª generazione. temporanea che è una copia della funzione di 1ª generazione. Ha lo stesso URL cloudfunctions.net della funzione di 1ª generazione., nonché un nuovo URL run.app 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ª generazione. della funzione di 1ª generazione. esista:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puoi verificare l'ambiente della funzione di 1ª generazione, 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 al passaggio di 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ª generazione. utilizza un runtime ritirato, pertanto non è idonea per l'upgrade finché non viene eseguito nuovamente il deployment con un runtime supportato.
  • Il chiamante non dispone dell'autorizzazione cloudfunctions.functions.generationUpgrade. Tieni presente che il chiamante deve disporre del ruolo roles/cloudfunctions.admin o di un ruolo equivalente nel progetto.

Reindirizzare il traffico per la funzione HTTP

A questo punto, devi testare l'URL sia per la funzione originale sia per la relativa copia. Assicurati che funzionino come previsto prima di procedere. Se riscontri problemi, interrompi l'upgrade per tornare a uno stato pulito, in cui puoi risolvere eventuali problemi sottostanti nella funzione di 1ª generazione.

Il passaggio di reindirizzamento reindirizza il traffico dall'URL di Cloud Functions di 1ª generazione. alla copia della funzione di 2ª generazione.

Console

  1. Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Vai a Cloud Run.
  2. Fai clic su Testa la funzione per testare la funzione (facoltativo, ma consigliato).
  3. Quando è tutto pronto, fai clic su Reindirizza 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ª generazione gestisce il traffico sia verso l'URL delle funzioni (cloudfunctions.net) sia verso l'URL Cloud Run (run.app).

Testare 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ª generazione. con la funzione di 1ª generazione. originale.

Risolvere i problemi di reindirizzamento

Il reindirizzamento non va a buon fine in queste condizioni:

  • Non hai eseguito il passaggio precedente (--setup-config).

Eseguire 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ª generazione.

Console

Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions nella console Cloud Run, fai clic su 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ª generazione. gestisce il traffico verso l'URL cloudfunctions.net.
  • La copia della funzione di 2ª generazione. 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ª generazione.

Esegui il commit dell'upgrade per la funzione HTTP

Questo passaggio finalizza l'upgrade, dopodiché non potrai più interrompere la procedura. 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 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ª generazione viene eliminata e la copia della funzione di 2ª generazione. viene separata per diventare una funzione Cloud Run a tutti gli effetti.
  • La funzione Cloud Run conserva l'URL cloudfunctions.net insieme al nuovo URL run.app.
  • Puoi verificare che la funzione di 1ª generazione. non esista 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ª generazione. a una funzione Cloud Run.

Il processo di upgrade di una funzione Pub/Sub di 1ª generazione segue lo stesso schema di base dell'upgrade di una funzione HTTP, ma ci sono alcune considerazioni aggiuntive:

  • La disattivazione dei tentativi in caso di errore non è una funzionalità supportata su Cloud Run, ma è l'impostazione predefinita nella 1ª generazione. Pertanto, potresti avere funzioni di entrambi i tipi. Le operazioni eseguite dallo strumento di upgrade dipendono da questa impostazione:

    • Se la funzione di 1ª generazione. ha i tentativi disabilitati (l'impostazione predefinita di 1ª generazione.), 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 IAM (Identity and Access Management) per gli abbonamenti 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 un nuovo abbonamento alla coda dei messaggi non recapitabili.
    • Se la funzione di 1ª generazione ha i 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ª generazione della funzione di 1ª generazione.

Console

  1. Nella console Google Cloud , vai alla pagina Cloud Functions (1ª generazione.):

    Vai a Functions (1ª generazione.)

  2. Individua la funzione di 1ª generazione. di cui vuoi eseguire l'upgrade e verifica che il relativo stato nella colonna Stato upgrade sia Pronto per l'upgrade.

  3. Fai clic sul nome della funzione per visualizzare la relativa pagina dei dettagli.

  4. 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 la procedura 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ª generazione.

(Facoltativo) Specifica un account di servizio 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 account di servizio trigger (account di servizio Compute Engine predefinito o account di servizio 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ª generazione. continua a gestire il traffico verso il suo URL originale.
  • Viene creata una copia di 2ª generazione. della funzione di 1ª generazione. Puoi attivarla utilizzando il relativo URL Cloud Run.
  • La funzione di 1ª generazione. 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ª generazione. della funzione di 1ª generazione. esista:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puoi verificare l'ambiente della funzione di 1ª generazione, 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ª generazione.

  • Per testare la nuova funzione, aggiungi un trigger Pub/Sub e verifica che la funzione risponda al trigger come previsto:

    1. Seleziona la funzione nella console Cloud Run e apri la scheda Trigger.
    2. 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.
    3. Nel riquadro Upgrade in corso, fai clic su Testa la funzione.
    4. Nella finestra di Cloud Code per Cloud Shell che si apre, pubblica un messaggio nell'argomento che hai aggiunto nella scheda Trigger.
    5. 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ª generazione.
  • La funzione di 1ª generazione. è già in fase di upgrade.
  • La funzione di 1ª generazione. non esiste.
  • La funzione di 1ª generazione. è in stato di errore.
  • La funzione di 1ª generazione non è una funzione HTTP né Pub/Sub.
  • Il chiamante non dispone dell'autorizzazione cloudfunctions.functions.generationUpgrade. Tieni presente che il chiamante deve disporre del ruolo roles/cloudfunctions.admin o di un ruolo equivalente nel progetto.

Reindirizzare il traffico per la funzione Pub/Sub

Questo passaggio reindirizza il traffico dall'URL di Cloud Functions di 1ª generazione. alla copia della funzione di 2ª generazione.

Console

  1. Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su Vai a Cloud Run.
  2. Fai clic su Testa la funzione per testare la funzione (facoltativo, ma consigliato).
  3. Quando è tutto pronto, fai clic su Reindirizza 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ª generazione gestisce il traffico sia verso l'URL Cloud Functions sia verso l'URL Cloud Run.

Testare 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.retryPolicy corrisponde al criterio di ripetizione specificato durante la creazione della funzione.
    • eventTrigger.serviceAccountEmail è il account di servizio Compute Engine predefinito o il service account personalizzato specificato.
    • La pubblicazione di un messaggio nell'argomento di destinazione ora attiva la copia della funzione di2ª generazionee.

Risolvere 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.

Eseguire il rollback del traffico per la funzione Pub/Sub

Questo passaggio ripristina il traffico alla funzione di 1ª generazione.

Console

Nel riquadro Upgrade in corso nella pagina dei dettagli di Cloud Run Functions, fai clic su 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ª generazione. gestisce il traffico verso l'URL cloudfunctions.net.
  • La copia di 2ª generazione. 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 prima generazione.

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 la procedura. 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ª generazione. 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-by deve avere un valore vuoto.
  • Se hai creato la funzione di 1ª generazione. senza selezionare Riprova in caso di errori, l'abbonamento 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ª generazione viene eliminata e la funzione di 1ª generazione 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ª generazionen.). 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ª generazione. viene eliminata.
  • La funzione di 1ª generazione. gestisce il traffico verso l'URL cloudfunctions.net.
  • Nella Google Cloud console, lo stato di upgrade della funzione cambia da Configurazione copiata a Pronto 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.

Controllare le policy IAM convertite

Durante la procedura di upgrade, lo strumento esegue una conversione con il criterio del "best effort" di ruoli e autorizzazioni tra Cloud Functions di 1ª generazione. e le nuove funzioni Cloud Run.

La procedura di upgrade converte i ruoli IAM di Cloud Functions di 1ª generazione. in ruoli Cloud Run equivalenti.

Regole di conversione:

  • roles/cloudfunctions.invoker viene convertito in roles/run.invoker.
  • roles/cloudfunctions.developer viene convertito in roles/run.sourceDeveloper.
  • roles/cloudfunctions.viewer viene convertito in roles/run.sourceViewer.
  • roles/cloudfunctions.admin viene convertito in roles/run.admin e roles/run.sourceDeveloper.

L'upgrade della 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 dell'upgrade della policy IAM

Per verificare che le tue norme IAM vengano aggiornate correttamente, controllale in ogni fase del processo di upgrade per confermare che abbiano i valori previsti:

  1. 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 rilevati binding dei ruoli personalizzati.

  2. Verifica che i criteri IAM impostati sulla funzione di 1ª generazione. siano convertiti ed eseguiti l'upgrade alla funzione Cloud Run:

    gcloud functions get-iam-policy FUNCTION_NAME
    gcloud run services get-iam-policy FUNCTION_NAME
    
  3. Verifica che l'associazione del ruolo di invoker di Cloud Run Functions a livello di progetto venga convertita e aggiornata 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