Mettre à niveau les fonctions de 1re génération vers Cloud Run Functions

Ce guide explique comment migrer vos fonctions HTTP et Pub/Sub de 1re génération vers des fonctions Cloud Run exécutées sur Cloud Run. Ce guide ne s'applique qu'aux fonctions de 1re génération créées à l'aide de l'API Cloud Functions v1. Les instructions de ce guide ne s'appliquent pas aux fonctions de deuxième génération créées avec l'API Cloud Functions v2 ou Cloud Functions for Firebase, qui est un produit distinct.

Une fois la mise à niveau terminée, vous ne pouvez interagir avec la fonction mise à niveau qu'à l'aide de l'API Cloud Run Admin et des outils Cloud Run.

Limites

L'outil de mise à niveau n'est actuellement compatible qu'avec les fonctions déclenchées par HTTP et Pub/Sub.

Présentation du processus de mise à niveau

Voici un aperçu général du processus de mise à niveau :

Présentation de la mise à niveau d'une fonction de 1re génération vers Cloud Run.
Figure 1. Présentation des étapes de mise à niveau d'une fonction de 1re génération vers Cloud Run.

Les détails de ce processus sont décrits dans les sections suivantes.

Présentation de la mise à niveau Start

  • Lorsque vous lancez la mise à niveau (à l'aide de Google Cloud CLI ou de la console Google Cloud ), l'outil de mise à niveau crée une fonction de deuxième génération temporaire qui est une copie de votre fonction de première génération d'origine. Cette fonction 2nd gen :
    • Fait le lien entre la fonction d'origine de 1re génération et la fonction finale entièrement mise à niveau.
    • Elle porte le même nom, le même code et la même configuration que la fonction de 1re génération d'origine.
      • Si vous mettez à niveau une fonction HTTP, elle aura la même URL cloudfunctions.net que la fonction de 1re génération d'origine, ainsi qu'une URL Cloud Run run.app.
        • Une fois la mise à niveau lancée, votre fonction de 1re génération et sa copie de 2e génération sont attribuées à la même URL cloudfunctions.net. Lorsque vous envoyez des requêtes à l'URL cloudfunctions.net, le trafic continue d'être acheminé vers la fonction de 1re génération. La copie de la fonction de 2e génération dispose également d'une URL Cloud Runrun.app. Les URL de la fonction de 2e génération ne recevront pas de trafic tant que vous ne l'aurez pas redirigé à l'étape suivante.
      • Si vous mettez à niveau une fonction Pub/Sub, elle utilise le même sujet Pub/Sub que la fonction de 1re génération, mais n'a pas encore d'abonnement.
    • Notez que si vous n'avez pas épinglé vos dépendances à une version spécifique, la copie de la fonction de 2e génération nouvellement créée peut utiliser une version de dépendance plus récente.
  • La fonction de 1re génération continue d'être listée dans la consoleGoogle Cloud de 1re génération, et sa copie temporaire de 2e génération apparaît pour la première fois dans la console Cloud Run.

Exemple : Ce tableau montre l'état des fonctions HTTP lors de l'étape de mise à niveau initiale.

Fonctions Diffuser du trafic ? Visible dans la console ?
Fonction de 1re génération d'origine Oui, à partir de l'URL cloudfunctions.net Oui, console de 1re génération.
Nouveau texte de 2e génération Non. Cette fonction possède des URL cloudfunctions.net et run.app, mais elles ne diffuseront pas de trafic tant que l'étape de redirection n'aura pas été effectuée. Oui, la console Cloud Run.

Présentation de la redirection du trafic

  • Lorsque vous redirigez le trafic, le résultat dépend du type de fonction que vous mettez à niveau (HTTP ou Pub/Sub) :
    • Si vous mettez à niveau une fonction HTTP, le trafic dirigé vers l'URL cloudfunctions.net est redirigé vers la fonction de 2e génération. Votre fonction de 1re génération continue d'exister, mais ne reçoit aucun trafic.
    • Si vous mettez à niveau une fonction Pub/Sub, le déclencheur de fonction de 2e génération utilise le même sujet Pub/Sub, mais crée un nouvel abonnement qui envoie un message à la fonction Cloud Run. L'ancien abonnement est supprimé.
  • La fonction de 1re génération disparaît de la console de 1re génération.
  • Si vous exécutez la commande gcloud functions describe, vous pouvez constater que l'environnement de la fonction est désormais de deuxième génération.
  • Notez qu'il existe des risques pendant cette phase de transition, en particulier pour les fonctions Pub/Sub :
    • Messages en double : un nouvel abonnement est créé avant la suppression de l'ancien. Le même message Pub/Sub peut être envoyé à votre ancienne fonction et à la nouvelle pendant cette période de transition.
    • Perte de messages : si vous mettez à niveau une fonction Pub/Sub et que la nouvelle fonction ne parvient pas à gérer les messages après la redirection du trafic, vous risquez de perdre des messages Pub/Sub. C'est particulièrement vrai si la fonction a désactivé les tentatives ; pour en savoir plus, consultez Mettre à niveau Pub/Sub.

Exemple : Ce tableau montre l'état des fonctions HTTP lors de l'étape de redirection du trafic.

Fonctions Diffuser du trafic ? Visible dans la console ?
Fonction de 1re génération d'origine Non. N'est plus visible dans la console de 1re génération, mais existe toujours.
Nouveau texte de 2e génération Oui, à partir de l'URL cloudfunctions.net et de l'URL Cloud Run run.app. Oui, la console Cloud Run.

Présentation du rollback du trafic

  • Lorsque vous effectuez un rollback du trafic, l'outil de mise à niveau effectue un rollback de tout le trafic de la copie de la fonction de 2e génération vers la fonction de 1re génération d'origine, qui diffuse désormais tout le trafic. La fonction de 2e génération demeure disponible pour le test.
  • Si vous restaurez une fonction Pub/Sub, l'abonnement à la fonction de 1re génération est recréé et l'abonnement à la fonction de 2e génération est supprimé.
  • Si vous souhaitez procéder à la mise à niveau après avoir effectué un rollback du trafic, vous devez d'abord rediriger à nouveau le trafic vers la nouvelle fonction de 2e génération pour continuer.

Exemple : Ce tableau indique l'état des fonctions HTTP si vous restaurez le trafic.

Fonctions Diffuser du trafic ? Visible dans la console ?
Fonction de 1re génération d'origine Oui. Oui, console de 1re génération.
Nouveau texte de 2e génération Non. N'est plus visible dans la console Cloud Run, mais existe toujours.

Présentation de l'abandon

Vous pouvez annuler la mise à niveau à tout moment avant de valider. Une fois que vous avez confirmé, la mise à niveau devient irréversible.

Exemple : Ce tableau indique l'état des fonctions HTTP si vous abandonnez la mise à niveau.

Fonctions Diffuser du trafic ? Visible dans la console ?
Fonction de 1re génération d'origine Oui. Oui, console de 1re génération.
Texte de 2e génération Non. N'est plus visible dans la console Cloud Run, n'existe plus.

Valider l'aperçu (opération irréversible)

  • L'application de la mise à niveau termine le processus de mise à niveau de la fonction de 1re génération. Cette action est irréversible.
  • La fonction de 2e génération temporaire est convertie en fonction Cloud Run à part entière, basée sur l'API Cloud Run Admin.
    • Cela équivaut à exécuter la commande detach sur une fonction de 2e génération. La commande detach dissocie une fonction Cloud Functions v2 de son environnement d'API existant.
    • À l'avenir, vous ne pourrez interagir avec la fonction mise à niveau qu'à l'aide de l'API Cloud Run Admin et des outils Cloud Run.
  • La fonction de 1re génération est supprimée et tout le trafic est redirigé vers la fonction Cloud Run mise à niveau.

Exemple : Ce tableau montre l'état des fonctions HTTP après l'application de la mise à niveau :

Fonctions Diffuser du trafic ? Visible dans la console ?
Nouvelle fonction Cloud Run basée sur l'API Cloud Run Admin. Oui, à partir de l'URL cloudfunctions.net et de l'URL Cloud Run run.app. Oui, la console Cloud Run.
Fonction de 1re génération d'origine Non. Non, elle n'existe plus.
Texte de 2e génération Non. Non, elle n'existe plus.

Conseils pour les tests

Les tests sont une partie essentielle du processus de mise à niveau.

Nous vous recommandons de vous familiariser avec l'outil de mise à niveau en le testant sur des fonctions hors production. Une fois que vous maîtrisez le processus et que vous obtenez des résultats cohérents, vous pouvez commencer à mettre à niveau les fonctions de production.

Voici quelques outils et techniques que vous pouvez utiliser pour tester vos fonctions lors d'une mise à niveau :

  • Chaque fois que l'état de vos fonctions change, utilisez les commandes describe de Google Cloud CLI pour vérifier que la fonction existe, et que son environnement et sa version sont conformes à vos attentes. En fonction de l'état actuel de la fonction à mettre à niveau, utilisez l'une des options suivantes.

    • Cloud Run :

      gcloud run services describe FUNCTION_NAME --format yaml
      
    • Cloud Functions :

      gcloud functions describe --region REGION_NAME FUNCTION_NAME
      
  • Utilisez la page "Journaux" dans les consoles Cloud Run et Cloud Run (1re génération) pour afficher les détails du trafic des fonctions.

  • Utilisez la console Cloud Run pour afficher et tester la copie de la fonction de 2e génération au fur et à mesure de la mise à niveau :

    • Utilisez l'onglet Déclencheurs pour tester la copie de la fonction de 2e génération après avoir lancé la mise à niveau.
    • Utilisez l'onglet YAML pour afficher des informations sur la fonction, y compris son URL run.app Cloud Run.

Avant de commencer

Avant de commencer la mise à niveau, assurez-vous de remplir les conditions préalables suivantes :

  • Vous avez activé l'API Cloud Run :

    gcloud services enable run.googleapis.com
  • Vous disposez déjà d'une fonction HTTP ou Pub/Sub de 1re génération.

  • Vous disposez des rôles IAM requis :

    • Vous devez avoir défini roles/iam.serviceAccountUser sur le compte de service de la fonction.
    • Pour effectuer la mise à niveau, vous devez disposer du rôle roles/cloudfunctions.admin ou d'un rôle équivalent sur le projet.
    • Pour une fonction Pub/Sub avec un paramètre no-retry, vous disposez du rôle roles/serviceusage.consumer ou d'un rôle personnalisé avec l'autorisation serviceusage.services.user.
    • Pour valider la mise à niveau d'une fonction Pub/Sub, vous devez disposer du rôle roles/pubsub.admin. Le rôle roles/pubsub.admin est un rôle au niveau du projet qui accorde un accès administrateur à toutes les ressources Pub/Sub d'un projet.

    Vous pouvez afficher les règles IAM de votre fonction comme suit :

    gcloud functions get-iam-policy FUNCTION_NAME
  • Vous devez disposer de l'autorisation roles/cloudfunctions.admin sur le compte de service de la fonction. Pour accorder le rôle roles/cloudfunctions.admin, utilisez la commande gcloud functions add-iam-policy-binding, par exemple :

    gcloud functions add-iam-policy-binding FUNCTION_NAME \
       --region=REGION \
       --member=serviceAccount:SERVICE_ACCOUNT \
       --role="roles/cloudfunctions.admin"
    

    Si vous rencontrez des erreurs lorsque vous essayez d'exécuter cette commande, assurez-vous que votre fonction respecte les règles de votre organisation. Par exemple, votre organisation peut ne pas autoriser les fonctions HTTP non authentifiées.

Pour en savoir plus sur les membres et les rôles, consultez Ajouter des comptes principaux et attribuer des rôles.

Mettre à niveau les fonctions HTTP

Cette section explique comment migrer une fonction HTTP de 1re génération vers une fonction Cloud Run. Pour savoir comment migrer une fonction Pub/Sub de première génération, consultez la section suivante.

Une fois que vous avez redirigé le trafic et validé la mise à niveau, comme décrit dans les sections suivantes, l'URL cloudfunctions.net associée à la fonction HTTP de 1re génération d'origine continuera de fonctionner et redirigera le trafic vers la nouvelle fonction Cloud Run.

Démarrer la mise à niveau de la fonction HTTP

Cette étape permet de créer une copie de 2e génération de votre fonction de 1re génération.

Console

  1. Dans la console Google Cloud , accédez à la page "Fonctions (1re génération)" :

    Accéder à Functions (1re génération)

  2. Recherchez la fonction de première génération que vous souhaitez mettre à niveau, puis vérifiez que son état dans la colonne État de la mise à niveau est Prêt pour la mise à niveau.

  3. Cliquez sur le nom de la fonction pour afficher sa page d'informations.

  4. Sur la page d'informations sur la fonction, cliquez sur Mettre à niveau sous Mise à niveau éligible.

  5. Suivez les instructions pour lancer le processus de mise à niveau.

Une fois cette étape terminée, le panneau Mise à niveau en cours s'affiche et vous invite à cliquer sur le lien Accéder à Cloud Run pour poursuivre le processus de mise à niveau.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --setup-config :

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Remplacez FUNCTION_NAME par le nom de votre fonction de première génération.

Après avoir lancé la mise à niveau :

  • La fonction de 1re génération continue de diffuser le trafic vers son URL d'origine. Pour afficher cette URL, accédez à la page d'informations de la fonction dans la console Functions (1re génération), puis ouvrez l'onglet Déclencheur.
  • Une fonction de 2e génération temporaire, qui est une copie de la fonction de 1re génération, est créée. Elle possède la même URL cloudfunctions.net que la fonction de 1re génération, ainsi qu'une nouvelle URL run.app Cloud Run. Vous pouvez afficher ces deux URL en accédant à la page d'informations de la fonction dans la console Cloud Run et en ouvrant l'onglet YAML. Vous pouvez également utiliser la commande suivante :

    gcloud run services describe YOUR_SERVICE_NAME \
        --region YOUR_REGION \
        --format="value(status.url)"
  • Vous pouvez vérifier que la copie de 2e génération de votre fonction de 1re génération existe :

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Vous pouvez vérifier l'environnement de la fonction de 1re génération, où la sortie doit afficher l'environnement de la fonction sous la forme 1st gen :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Résoudre les problèmes liés à l'étape de démarrage de la mise à niveau

La mise à niveau échoue dans les cas suivants :

  • Une fonction portant ce nom existe déjà dans la même région et le même projet.
  • La fonction de 1re génération utilise un environnement d'exécution abandonné. Elle ne peut donc pas être mise à niveau tant que vous ne l'avez pas redéployée avec un environnement d'exécution compatible.
  • L'appelant ne dispose pas de l'autorisation cloudfunctions.functions.generationUpgrade. Notez que l'appelant a besoin du rôle roles/cloudfunctions.admin ou d'un rôle équivalent dans le projet.

Rediriger le trafic pour la fonction HTTP

À ce stade, vous devez tester l'URL de la fonction d'origine et de sa copie. Assurez-vous qu'ils fonctionnent comme prévu avant de continuer. Si vous rencontrez des problèmes, annulez la mise à niveau pour revenir à un état propre, dans lequel vous pourrez résoudre les problèmes sous-jacents dans la fonction de première génération.

L'étape de redirection redirige le trafic de l'URL Cloud Functions de 1re génération vers la copie de la fonction de 2e génération.

Console

  1. Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions, cliquez sur Accéder à Cloud Run.
  2. Cliquez sur Tester la fonction pour tester votre fonction (facultatif, mais fortement recommandé).
  3. Lorsque vous êtes prêt, cliquez sur Rediriger le trafic.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --redirect-traffic :

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Après la redirection du trafic, la copie de la fonction de 2e génération diffuse le trafic vers l'URL de la fonction (cloudfunctions.net) et l'URL Cloud Run (run.app).

Tester votre fonction HTTP après la redirection

  • Vérifiez l'environnement de la fonction :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    Le résultat affiche l'environnement comme étant 2nd gen.

  • Utilisez l'outil de journalisation de la console pour comparer la copie de votre fonction de 2e génération à la fonction de 1re génération d'origine.

Résoudre les problèmes de redirection

La redirection échoue dans les cas suivants :

  • Vous n'avez pas exécuté l'étape précédente (--setup-config).

Effectuer un rollback du trafic pour la fonction HTTP

Si vous n'êtes pas prêt à valider votre mise à niveau, vous pouvez rétablir le trafic vers la fonction de 1re génération.

Console

Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions dans la console Cloud Run, cliquez sur Rétablir le trafic.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --rollback-traffic :

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Après avoir rétabli le trafic :

  • La fonction de 1re génération diffuse le trafic vers l'URL cloudfunctions.net.
  • La copie de la fonction de 2e génération reste disponible et vous pouvez la déclencher à l'aide de son URL run.app.

Vous pouvez vérifier l'environnement de la fonction comme suit. Le résultat doit afficher l'environnement de la fonction sous la forme 1st gen :

gcloud functions describe --region REGION_NAME FUNCTION_NAME

Le rollback échoue si vous n'avez pas redirigé le trafic vers la fonction de 2e génération.

Valider la mise à niveau de la fonction HTTP

Cette étape finalise la mise à niveau. Après cela, vous ne pourrez plus annuler le processus. Avant d'effectuer cette étape, assurez-vous d'avoir testé minutieusement vos fonctions.

Console

Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions dans la console Cloud Run, cliquez sur Valider la mise à niveau.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --commit :

gcloud beta functions upgrade FUNCTION_NAME --commit

Après avoir validé la mise à niveau :

  • La fonction de 1re génération est supprimée et la copie de la fonction de 2e génération est détachée pour devenir une fonction Cloud Run à part entière.
  • La fonction Cloud Run conserve l'URL cloudfunctions.net ainsi que la nouvelle URL run.app.
  • Vous pouvez vérifier que la fonction de 1re génération n'existe plus :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Vous pouvez vérifier les détails du service Cloud Run :

    gcloud run services describe FUNCTION_NAME --format yaml
    

Le résultat indique qu'une nouvelle génération a été créée et que le libellé Goog-managed-by a une valeur vide.

Le commit échoue lorsque le trafic n'a pas été redirigé vers la fonction Cloud Run.

Mettre à niveau les fonctions Pub/Sub

Cette section explique comment migrer une fonction Pub/Sub de 1re génération vers une fonction Cloud Run.

La procédure de mise à niveau d'une fonction Pub/Sub de 1re génération suit le même schéma de base que la mise à niveau d'une fonction HTTP, mais quelques points supplémentaires sont à prendre en compte :

  • La désactivation de l'option "Réessayer en cas d'échec" n'est pas une fonctionnalité compatible avec Cloud Run, mais il s'agit du paramètre par défaut sur la 1re génération. Vous pouvez donc avoir des fonctions des deux types. L'action de l'outil de migration dépend de ce paramètre :

    • Si la répétition de tentatives est désactivée pour votre fonction de 1re génération (paramètre par défaut de 1re génération), l'outil de mise à niveau crée un déclencheur Eventarc Pub/Sub ainsi qu'une file d'attente de messages non distribués (DLQ, dead letter queue). L'outil de mise à niveau définit la stratégie Identity and Access Management (IAM) pour les abonnements et leurs thèmes. Une fois la mise à niveau terminée, le sujet de file d'attente de lettres mortes stocke les messages non distribués, que vous pouvez récupérer en créant un abonnement à la file d'attente de lettres mortes.
    • Si la répétition de tentatives est activée pour votre fonction de première génération, l'outil de mise à niveau crée un déclencheur Eventarc Pub/Sub avec les paramètres par défaut.

Lancer la mise à niveau pour la fonction Pub/Sub

Cette étape crée une copie de 2e génération de votre fonction de 1re génération.

Console

  1. Dans la console Google Cloud , accédez à la page Cloud Functions (1re génération) :

    Accéder à Functions (1re génération)

  2. Recherchez la fonction de première génération que vous souhaitez mettre à niveau, puis vérifiez que son état dans la colonne État de la mise à niveau est Prêt pour la mise à niveau.

  3. Cliquez sur le nom de la fonction pour afficher sa page d'informations.

  4. Sur la page d'informations sur la fonction, cliquez sur Mettre à niveau sous Mise à niveau éligible.

Une fois cette phase terminée, le panneau Mise à niveau en cours s'affiche et vous invite à cliquer sur le lien Accéder à Cloud Run pour poursuivre le processus de mise à niveau.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --setup-config :

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Remplacez FUNCTION_NAME par le nom de votre fonction de première génération.

Vous pouvez également spécifier un compte de service pour le déclencheur :

gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL

Remplacez CUSTOM_SA_EMAIL par l'adresse e-mail de votre compte de service personnalisé.

Si le compte de service du déclencheur (compte de service Compute Engine par défaut ou compte de service personnalisé spécifié) ne dispose pas de l'autorisation run.route.invoke, le système vous invite à associer le rôle roles/run.invoker.

Après avoir lancé la mise à niveau :

  • La fonction de 1re génération continue de diffuser le trafic vers son URL d'origine.
  • Une copie de 2e génération de votre fonction de 1re génération est créée. Vous pouvez le déclencher à l'aide de son URL Cloud Run.
  • La fonction de 1re génération continue de diffuser le trafic vers son URL cloudfunctions.net.

Tester votre fonction Pub/Sub après l'étape de démarrage de la mise à niveau

  • Vous pouvez vérifier que la copie de 2e génération de votre fonction de 1re génération existe :

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Vous pouvez vérifier l'environnement de la fonction de 1re génération, où la sortie doit afficher l'environnement de la fonction sous la forme 1st gen :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Publiez un message sur le sujet de destination pour déclencher la fonction de 1re génération.

  • Pour tester la nouvelle fonction, ajoutez-y un déclencheur Pub/Sub et vérifiez qu'elle répond au déclencheur comme prévu :

    1. Sélectionnez la fonction dans la console Cloud Run et ouvrez l'onglet Déclencheurs.
    2. Cliquez sur Ajouter un déclencheur, puis, dans le panneau Déclencheur Eventarc, sélectionnez un thème pour déclencher la fonction. Par défaut, la fonction est déclenchée lorsqu'un message est publié dans le sujet.
    3. Dans le panneau Mise à niveau en cours, cliquez sur Tester la fonction.
    4. Dans la fenêtre Cloud Code pour Cloud Shell qui s'ouvre, publiez un message dans le sujet que vous avez ajouté dans l'onglet Déclencheurs.
    5. Dans la console Cloud Run, accédez à Observabilité > Journaux pour vérifier que votre fonction a publié le message. Vous pouvez également utiliser la ligne de commande dans Cloud Code pour Cloud Shell afin d'afficher les journaux.

    Par exemple, supposons que vous disposiez d'une fonction Hello World de base qui publie un message d'accueil. Après avoir spécifié le nouveau déclencheur, vous pouvez le tester dans Cloud Code pour Cloud Shell comme suit :

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME
    gcloud functions logs read --region YOUR_REGION --limit 50
    

Résoudre les problèmes liés à l'étape de démarrage de la mise à niveau Pub/Sub

La mise à niveau échoue dans les cas suivants :

  • Une fonction Cloud Run portant le même nom existe déjà dans la même région et le même projet.
  • Vous avez tenté de mettre à niveau une fonction de 2e génération.
  • La fonction de 1re génération est déjà en cours de mise à niveau.
  • La fonction de 1re génération n'existe pas.
  • La fonction de 1re génération est dans un état d'erreur.
  • La fonction de 1re génération n'est ni une fonction HTTP, ni une fonction Pub/Sub.
  • L'appelant ne dispose pas de l'autorisation cloudfunctions.functions.generationUpgrade. Notez que l'appelant a besoin du rôle roles/cloudfunctions.admin ou d'un rôle équivalent dans le projet.

Rediriger le trafic pour la fonction Pub/Sub

Cette étape redirige le trafic de l'URL Cloud Functions de 1re génération vers la copie de la fonction de 2e génération.

Console

  1. Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions, cliquez sur Accéder à Cloud Run.
  2. Cliquez sur Tester la fonction pour tester votre fonction (facultatif, mais fortement recommandé).
  3. Lorsque vous êtes prêt, cliquez sur Rediriger le trafic.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --redirect-traffic :

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Après la redirection du trafic, la fonction de 2e génération diffuse le trafic à la fois vers l'URL Cloud Functions et l'URL Cloud Run.

Tester Pub/Sub après la redirection du trafic

  • Vous pouvez vérifier l'environnement de la fonction :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    Le résultat affiche l'environnement comme étant 2nd gen.

    • eventTrigger.retryPolicy correspond à la stratégie de nouvelle tentative spécifiée lors de la création de la fonction.
    • eventTrigger.serviceAccountEmail correspond au compte de service Compute Engine par défaut ou au compte de service personnalisé spécifié.
    • La publication d'un message dans le sujet de destination déclenche désormais la copie de la fonction de deuxième génération.

Résoudre les problèmes liés à Pub/Sub pour la redirection

La redirection échoue dans les cas suivants :

  • Vous n'avez pas exécuté l'étape précédente (--setup-config).
  • La fonction Cloud Run a été supprimée manuellement.

Effectuer un rollback du trafic pour la fonction Pub/Sub

Cette étape rétablit le trafic vers la fonction de 1re génération.

Console

Dans le panneau Mise à niveau en cours de la page d'informations sur les fonctions Cloud Run, cliquez sur Rétablir le trafic.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --rollback-traffic :

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Après avoir rétabli le trafic :

  • La fonction revient à l'état dans lequel elle se trouvait immédiatement après l'étape de mise à niveau initiale.
  • La fonction de 1re génération diffuse le trafic vers l'URL cloudfunctions.net.
  • La copie de 2e génération reste disponible et vous pouvez la déclencher à l'aide de son URL Cloud Run.

  • Vous pouvez vérifier l'environnement de la fonction :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    Le résultat doit afficher l'environnement de la fonction en tant que 1st gen.

  • La publication d'un message dans le sujet de destination déclenche la fonction de première génération.

Le rollback échoue si vous n'avez pas redirigé le trafic vers la fonction Cloud Run.

Valider la mise à niveau de la fonction Pub/Sub

Cette étape finalise la mise à niveau. Après cela, vous ne pourrez plus annuler le processus. Cette étape est irréversible. Avant d'effectuer cette étape, assurez-vous d'avoir testé minutieusement vos fonctions.

Console

Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions, cliquez sur Valider la mise à niveau.

gcloud

Exécutez la commande gcloud beta functions upgrade avec l'option --commit :

gcloud beta functions upgrade FUNCTION_NAME --commit

Après avoir validé la mise à niveau :

  • La fonction de 1re génération est supprimée.
  • La fonction Cloud Run conserve l'URL cloudfunctions.net.
  • Vous pouvez vérifier que la fonction n'apparaît plus dans la liste :
    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Vous pouvez vérifier les détails du service Cloud Run :
    gcloud run services describe FUNCTION_NAME --format yaml
    
    • Le résultat indique qu'une nouvelle génération a été créée. L'étiquette Goog-managed-by doit avoir une valeur vide.
  • Si vous avez créé la fonction de 1re génération sans cocher Nouvelle tentative en cas d'échec, l'abonnement Pub/Sub du déclencheur comporte une file d'attente des messages non distribués (DLQ, dead letter queue).
  • La publication d'un message dans le sujet de destination déclenche désormais la fonction Cloud Run.

Le commit échoue dans les cas suivants :

  • Le trafic n'a pas été redirigé vers la fonction Cloud Run.
  • La fonction Cloud Run a été supprimée manuellement.

Annuler la mise à niveau

Cette action annule le processus de mise à niveau. La nouvelle copie de la fonction de 2e génération est supprimée, et la fonction de 1re génération continue de diffuser le trafic vers l'URL cloudfunctions.net d'origine. Vous pouvez effectuer cette action à tout moment pendant le processus de mise à niveau, avant de valider la mise à niveau.

Si vous utilisez la console Google Cloud pour effectuer la mise à niveau, l'interface utilisateur ne vous permet d'annuler le processus qu'immédiatement après l'opération de mise à niveau initiale. Le bouton Abort (Abandonner) se trouve en haut à gauche de la console Functions (1re génération). Si vous utilisez Google Cloud CLI, vous pouvez annuler la mise à niveau à tout moment avant de la valider. Après cela, le processus devient irréversible.

Vous pouvez utiliser Google Cloud CLI pour annuler la mise à niveau d'une fonction, même si vous avez utilisé la console Google Cloud pour effectuer le processus de mise à niveau :

gcloud beta functions upgrade FUNCTION_NAME --abort

Après avoir annulé la mise à niveau :

  • La copie de la fonction de 2e génération est supprimée.
  • La fonction de 1re génération diffuse le trafic vers l'URL cloudfunctions.net.
  • Dans la consoleGoogle Cloud , l'état de mise à niveau de la fonction passe de Configuration copiée à Prêt pour la mise à niveau.
  • Vous pouvez vérifier que le service Cloud Run n'apparaît plus dans la liste :

    gcloud run services list
  • Vous pouvez vérifier l'environnement de la fonction :

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Le résultat affiche l'environnement de la fonction comme 1st gen.

L'opération d'abandon échoue si vous avez déjà validé la mise à niveau.

Vérifier les stratégies IAM converties

Lors du processus de mise à niveau, l'outil s'efforce de convertir les rôles et les autorisations entre Cloud Functions de 1re génération et les nouvelles fonctions Cloud Run.

Le processus de mise à niveau convertit les rôles IAM Cloud Functions de 1re génération en rôles Cloud Run équivalents.

Règles de conversion :

  • roles/cloudfunctions.invoker est converti en roles/run.invoker.
  • roles/cloudfunctions.developer est converti en roles/run.sourceDeveloper.
  • roles/cloudfunctions.viewer est converti en roles/run.sourceViewer.
  • roles/cloudfunctions.admin est converti en roles/run.admin et roles/run.sourceDeveloper.

La mise à niveau de la stratégie IAM échoue si l'appelant ne dispose pas des autorisations projects.getIamPolicy ou run.setIamPolicy. L'appelant doit disposer du rôle roles/cloudfunctions.admin ou d'un rôle équivalent sur le projet.

Vérifier la mise à niveau de la stratégie IAM

Pour vérifier que vos règles IAM sont correctement migrées, vérifiez-les à chaque étape du processus de migration afin de vous assurer qu'elles ont les valeurs attendues :

  1. Lancez le processus de mise à niveau de votre fonction :

    gcloud beta functions upgrade FUNCTION_NAME --setup-config
    

    Le résultat affiche un message d'avertissement si des liaisons de rôle personnalisées sont détectées.

  2. Vérifiez que les stratégies IAM définies sur la fonction de 1re génération ont été converties et migrées vers la fonction Cloud Run :

    gcloud functions get-iam-policy FUNCTION_NAME
    gcloud run services get-iam-policy FUNCTION_NAME
    
  3. Validez que l'association de rôle Demandeur Cloud Run Functions au niveau du projet est convertie et mise à niveau vers la fonction Cloud Run :

    gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker"
    gcloud run services get-iam-policy FUNCTION_NAME
    

Étapes suivantes