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 :
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 Runrun.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'URLcloudfunctions.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.
- 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
- 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.
- Si vous mettez à niveau une fonction HTTP, elle aura la même URL
- 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é.
- Si vous mettez à niveau une fonction HTTP, le trafic dirigé vers l'URL
- 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 commandedetach
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.
- Cela équivaut à exécuter la commande
- 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ôleroles/serviceusage.consumer
ou d'un rôle personnalisé avec l'autorisationserviceusage.services.user
. - Pour valider la mise à niveau d'une fonction Pub/Sub, vous devez disposer du rôle
roles/pubsub.admin
. Le rôleroles/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 avoir défini
Vous devez disposer de l'autorisation
roles/cloudfunctions.admin
sur le compte de service de la fonction. Pour accorder le rôleroles/cloudfunctions.admin
, utilisez la commandegcloud 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
Dans la console Google Cloud , accédez à la page "Fonctions (1re génération)" :
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.
Cliquez sur le nom de la fonction pour afficher sa page d'informations.
Sur la page d'informations sur la fonction, cliquez sur Mettre à niveau sous Mise à niveau éligible.
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 URLrun.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ôleroles/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
- Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions, cliquez sur Accéder à Cloud Run.
- Cliquez sur Tester la fonction pour tester votre fonction (facultatif, mais fortement recommandé).
- 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 URLrun.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
Dans la console Google Cloud , accédez à la page Cloud Functions (1re génération) :
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.
Cliquez sur le nom de la fonction pour afficher sa page d'informations.
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 :
- Sélectionnez la fonction dans la console Cloud Run et ouvrez l'onglet Déclencheurs.
- 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.
- Dans le panneau Mise à niveau en cours, cliquez sur Tester la fonction.
- 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.
- 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ôleroles/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
- Dans le panneau Mise à niveau en cours de la page d'informations sur Cloud Run Functions, cliquez sur Accéder à Cloud Run.
- Cliquez sur Tester la fonction pour tester votre fonction (facultatif, mais fortement recommandé).
- 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.
- Le résultat indique qu'une nouvelle génération a été créée. L'étiquette
- 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 enroles/run.invoker
.roles/cloudfunctions.developer
est converti enroles/run.sourceDeveloper
.roles/cloudfunctions.viewer
est converti enroles/run.sourceViewer
.roles/cloudfunctions.admin
est converti enroles/run.admin
etroles/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 :
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.
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
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
- En savoir plus sur les fonctions Cloud Run.