Déployer des fonctions dans Cloud Run

Cette page explique comment déployer et modifier des fonctions dans Cloud Run. Pour obtenir un exemple de déploiement d'une fonction Hello World, consultez la section Déployer un exemple de fonction.

En arrière-plan, les déploiements de fonctions Cloud Run utilisent les buildpacks et Cloud Build de Google Cloud pour créer automatiquement des images de conteneurs à partir du code source de votre fonction sans avoir à installer Docker sur votre machine ni configurer des buildpacks ou Cloud Build.

Les déploiements de fonctions Cloud Run utilisent également Artifact Registry pour stocker des artefacts et gérer des images de conteneur. Artifact Registry crée automatiquement le dépôt Artifact Registry cloud-run-source-deploy si votre projet n'en a pas déjà créé un avec ce nom.

Avant de commencer

  1. Assurez-vous d'avoir configuré un nouveau projet pour Cloud Run, comme décrit sur la page de configuration.

  2. Activez les API Artifact Registry, Cloud Build, Cloud Run Admin et Cloud Logging:

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com \
         logging.googleapis.com
    

    Vous pouvez également activer l'API Eventarc pour utiliser des déclencheurs d'événements:

     gcloud services enable eventarc.googleapis.com
    
  3. Si vous êtes soumis à une règle d'administration de restriction de domaine limitant les appels non authentifiés pour votre projet, vous devez accéder au service déployé comme décrit dans la section Tester les services privés.

Rôles requis

Pour obtenir les autorisations nécessaires pour déployer des services Cloud Run à partir de la source, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec les API Google Cloud, telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les sections Autorisations de déploiement et Gérer les accès.

Rôles pour le compte de service

  • Pour que Cloud Build puisse créer vos sources, attribuez le rôle Compte de service Cloud Build au compte de service Compute Engine par défaut en exécutant la commande suivante :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/cloudbuild.builds.builder

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud et PROJECT_ID par votre ID de projet Google Cloud. Pour obtenir des instructions détaillées sur la recherche de votre ID et de votre numéro de projet, consultez la section Créer et gérer des projets.

    L'propagation de l'attribution du rôle "Compte de service Cloud Build" au compte de service Compute Engine par défaut prend quelques minutes.

  • Créer et déployer une fonction

    Vous pouvez déployer une fonction à l'aide de la console Google Cloud ou de la gcloud CLI. Cliquez sur l'onglet pour obtenir des instructions concernant l'utilisation de l'outil de votre choix.

    Console

    1. Dans la console Google Cloud, accédez à la page Cloud Run :

      Accédez à Cloud Run

    2. Cliquez sur Écrire une fonction.

    3. Dans le champ Nom du service, saisissez un nom pour décrire votre fonction. Les noms de services ne doivent commencer que par une lettre et comporter au maximum 49 caractères, y compris des lettres, des chiffres ou des traits d'union. Les noms de service ne doivent pas se terminer par un trait d'union et doivent être uniques par région et par projet. Un nom de service ne peut pas être modifié ultérieurement et il est visible publiquement.

    4. Dans la liste Région, utilisez la valeur par défaut ou sélectionnez la région dans laquelle vous souhaitez déployer votre fonction.

    5. Dans la liste Environnement d'exécution, utilisez la valeur par défaut ou sélectionnez une version d'environnement d'exécution.

    6. Vous pouvez éventuellement cliquer sur Ajouter un déclencheur dans la section Déclencheur et sélectionner une option. Le volet Déclencheur Eventarc s'ouvre, dans lequel vous pouvez modifier les détails suivants du déclencheur:

      1. Dans le champ Nom du déclencheur, saisissez un nom pour le déclencheur ou utilisez le nom par défaut.

      2. Sélectionnez un type de déclencheur dans la liste pour spécifier l'un des types de déclencheur suivants:

        • Sources Google pour spécifier des déclencheurs pour Pub/Sub, Cloud Storage, Firestore et d'autres fournisseurs d'événements Google.

        • Personnalisé pour produire et consommer des événements à partir du code de votre application. Suivez les instructions du volet Déclencheur Eventarc pour créer un canal. Un canal est une ressource utilisée comme pipeline pour fournir des événements personnalisés aux producteurs auprès des utilisateurs. Les événements personnalisés sont publiés dans un canal et un déclencheur Eventarc s'abonne à ces événements.

        • Tiers pour intégrer des fournisseurs autres que Google qui proposent une source Eventarc. Pour en savoir plus, consultez la section Événements tiers dans Eventarc.

      3. Sélectionnez un fournisseur d'événements dans la liste pour sélectionner un produit qui fournit le type d'événement pour déclencher votre fonction. Pour obtenir la liste des fournisseurs d'événements, consultez la section Fournisseurs et destinations d'événements.

      4. Sélectionnez un type d'événement dans la liste. La configuration du déclencheur varie en fonction du type d'événement accepté: Pour en savoir plus, consultez la section Types d'événements.

      5. Dans le champ Région, sélectionnez un emplacement pour le déclencheur Eventarc. En général, l'emplacement d'un déclencheur Eventarc doit correspondre à celui de la ressource Google Cloud dont vous souhaitez surveiller les événements. Dans la plupart des scénarios, vous devez également déployer votre fonction dans la même région. Consultez la section Comprendre les emplacements Eventarc pour en savoir plus sur les emplacements des déclencheurs Eventarc.

      6. Dans le champ Compte de service, sélectionnez un compte de service. Les déclencheurs Eventarc sont associés à des comptes de service, destinés à être utilisés comme identité lors de l'appel de votre fonction. Le compte de service de votre déclencheur Eventarc doit être autorisé à appeler votre fonction. Par défaut, Cloud Run utilise le compte de service Compute Engine par défaut.

      7. Vous pouvez éventuellement spécifier le chemin d'URL du service auquel envoyer la requête entrante. Il s'agit du chemin relatif sur le service de destination auquel les événements du déclencheur doivent être envoyés. Par exemple: /, /route, route et route/subroute.

      8. Une fois les champs obligatoires renseignés, cliquez sur Enregistrer le déclencheur.

    7. Sous Authentification, configurez les éléments suivants :

      • Si vous créez une fonction HTTP publique, par exemple un webhook, sélectionnez Allow unauthenticated invocations (Autoriser les appels non authentifiés). En sélectionnant cette option, le rôle Demandeur IAM est attribué à l'identifiant spécial allUser. Vous pouvez utiliser IAM pour modifier ce paramètre ultérieurement après avoir créé le service. Si vous ne disposez pas des autorisations nécessaires (rôle d'administrateur Cloud Run) pour sélectionner cette option, le service sera déployé et nécessitera une authentification.

      • Si vous créez une fonction déclenchée par événement, sélectionnez Require authentication (Exiger l'authentification).

    8. Vous pouvez également mettre à jour les configurations supplémentaires suivantes pour vos fonctions:

      1. Définissez l'allocation et la tarification du processeur si nécessaire.

      2. Sous Autoscaling du service, spécifiez le nombre minimal d'instances, le cas échéant.

      3. Définissez les paramètres de Contrôle d'entrée si nécessaire.

      4. Développez la section Conteneur(s), volumes, mise en réseau et sécurité pour définir d'autres paramètres facultatifs dans les onglets appropriés:

    9. Cliquez sur Créer, puis attendez que Cloud Run crée le service à l'aide d'une révision d'espace réservé.

    10. La console vous redirigera vers l'onglet Source, où vous pourrez voir le code source de votre fonction. Cliquez sur Enregistrer et redéployer.

    11. Dans l'onglet Source, vous pouvez cliquer sur Afficher la charge utile pour afficher un exemple de charge utile d'événements entrants.

    12. Après le déploiement, testez la fonction créée en cliquant sur le bouton Test.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Mettez à jour les composants gcloud vers la dernière version :

      gcloud components update
    3. Exécutez la commande suivante dans le répertoire contenant l'exemple de code:

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      Remplacez :

      • FUNCTION par le nom de la fonction que vous déployez. Vous pouvez omettre ce paramètre, mais dans ce cas le nom vous sera demandé.

      • FUNCTION_ENTRYPOINT par le point d'entrée de votre fonction dans votre code source. Il s'agit du code que Cloud Run exécute lorsque votre fonction s'exécute. La valeur de cette option doit être un nom de fonction ou un nom de classe complet qui existe dans votre code source.

      • BASE_IMAGE par l'environnement d'image de base de votre fonction. Pour en savoir plus sur les images de base et les packages inclus dans chaque image, consultez la section Images de base des environnements d'exécution.

      • REGION par la région Google Cloud dans laquelle vous souhaitez déployer votre fonction. Par exemple, us-central1.

      Facultatif :

      • Si vous créez une fonction HTTP publique, par exemple un webhook, spécifiez l'option --allow-unauthenticated. Cette option attribue le rôle Demandeur IAM Cloud Run à l'identifiant spécial allUser. Vous pouvez utiliser IAM pour modifier ce paramètre ultérieurement après avoir créé le service. Si vous créez une fonction déclenchée par événement ou un service authentifié, vous pouvez omettre cet indicateur.

    Vous pouvez également ajouter des déclencheurs Eventarc à votre fonction après l'avoir déployée. Pour ajouter un déclencheur, exécutez la commande suivante:

      gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
          --location=EVENTARC_TRIGGER_LOCATION \
          --destination-run-service=FUNCTION \
          --destination-run-region=REGION \
          --event-filters="type=EVENTARC_FILTER_TYPE" \
          --event-filters="EVENTARC_EVENT_FILTER" \
          --service-account=EVENTARC_TRIGGER_SERVICE_ACCOUNT
    

    Remplacez :

    • EVENTARC_TRIGGER_NAME par le nom du déclencheur Eventarc.

    • EVENTARC_TRIGGER_LOCATION par l'emplacement du déclencheur Eventarc. En général, l'emplacement d'un déclencheur Eventarc doit correspondre à celui de la ressource Google Cloud dont vous souhaitez surveiller les événements. Dans la plupart des scénarios, vous devez également déployer votre fonction dans la même région. Consultez la section Comprendre les emplacements Eventarc pour en savoir plus sur les emplacements des déclencheurs Eventarc.

    • FUNCTION par le nom de votre fonction déployée.

    • REGION par la région Cloud Run de la fonction.

    • EVENTARC_FILTER_TYPE par les filtres d'événements que le déclencheur surveille. Un événement correspondant à tous les filtres --event-filters déclenche des appels vers votre fonction. Chaque déclencheur doit avoir un type d'événement compatible au format --event-filters="type=EVENTARC_FILTER_TYPE". Ce type d'événement ne peut pas être modifié après sa création. Pour modifier EVENT_FILTER_TYPE, créez un nouveau déclencheur et supprimez l'ancien. Facultatif : vous pouvez répéter l'option --event-filters avec un filtre compatible au format ATTRIBUTE=VALUE pour ajouter d'autres filtres.

    • EVENTARC_TRIGGER_SERVICE_ACCOUNT par un compte de service. Les déclencheurs Eventarc sont associés à des comptes de service, destinés à être utilisés comme identité lors de l'appel de votre fonction. Le compte de service de votre déclencheur Eventarc doit être autorisé à appeler votre fonction. Par défaut, Cloud Run utilise le compte de service Compute par défaut.

    Terraform

    Pour gérer des fonctions à l'aide de Terraform, vous devez compiler le code de votre fonction dans une image de conteneur, puis définir votre service Cloud Run dans une configuration Terraform à l'aide de la ressource google_cloud_run_v2_service du fournisseur Google Cloud Platform.

    1. Suivez les instructions pour créer une fonction afin de créer une image de conteneur. Copiez le chemin d'accès complet de l'image du conteneur pour la variable IMAGE_URL utilisée à l'étape suivante.

    2. Créez un fichier main.tf avec le contenu suivant :

      provider "google" {
        project = "PROJECT-ID"
      }
      
      resource "google_cloud_run_v2_service" "default" {
        name     = "SERVICE"
        location = "REGION"
        client   = "terraform"
        template {
          containers {
            image = "IMAGE_URL"
          }
        }
      }
      
      resource "google_cloud_run_v2_service_iam_member" "noauth" {
        location = google_cloud_run_v2_service.default.location
        name     = google_cloud_run_v2_service.default.name
        role     = "roles/run.invoker"
        member   = "allUsers"
      }
      

      Remplacez :

      • PROJECT-ID par l'ID du projet Google Cloud.
      • REGION par la région Google Cloud.
      • SERVICE par le nom de votre service Cloud Run ; Les noms de service doivent comporter un maximum de 49 caractères et être uniques par région et par projet.
      • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

      Cette configuration autorise l'accès public (l'équivalent de --allow-unauthenticated). Pour rendre le service privé, supprimez le stanza google_cloud_run_v2_service_iam_member.

    3. Initialisez Terraform :

      terraform init
    4. Appliquez la configuration Terraform :

      terraform apply

      Confirmez que vous souhaitez appliquer les actions décrites en saisissant yes.

    Emplacements Cloud Run

    Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.

    Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité. Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres produits Google Cloud utilisés par votre service Cloud Run. L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.

    Cloud Run est disponible dans les régions suivantes :

    Soumis aux tarifs de niveau 1

    Soumis aux tarifs de niveau 2

    Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de la console Google Cloud.

    Activer les nouvelles tentatives d'exécution des événements

    Eventarc utilise Pub/Sub comme couche de transport et dispose d'une stratégie de nouvelle tentative par défaut qui peut ne pas fonctionner correctement pour votre fonction.

    Après avoir créé un déclencheur Eventarc, nous vous recommandons vivement de mettre à jour la stratégie de nouvelle tentative dans Eventarc et de configurer un sujet de boîte aux lettres mortes dans Pub/Sub.

    Modifier une fonction existante

    Vous pouvez modifier la configuration ou le code de votre fonction:

    Modifier la configuration

    Pour modifier les paramètres de configuration, tels que l'allocation de processeur, la mémoire et la connectivité VPC:

    Console

    1. Dans la console Google Cloud, accédez à la page Cloud Run :

      Accédez à Cloud Run

    2. Recherchez le service que vous souhaitez mettre à jour dans la liste des services, puis cliquez dessus pour en afficher les détails.

    3. Cliquez sur Modifier et déployer la nouvelle révision pour afficher le formulaire de déploiement de version.

    4. Modifiez un paramètre de configuration.

    5. Cliquez sur Déployer et attendez la fin du déploiement.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Pour mettre à jour un ou plusieurs paramètres de configuration de service, utilisez la commande gcloud beta run services update SERVICE avec les flags de ligne de commande de la configuration que vous souhaitez mettre à jour. Remplacez SERVICE par le nom du service.

    Redéployer le nouveau code source

    Vous pouvez modifier l'image de base, l'environnement d'exécution et le code source de votre fonction à l'aide de la console Google Cloud ou de la gcloud CLI.

    Cliquez sur l'onglet pour obtenir des instructions concernant l'utilisation de l'outil de votre choix.

    Console

    1. Dans la console Google Cloud, accédez à la page Cloud Run :

      Accédez à Cloud Run

    2. Recherchez la fonction que vous souhaitez mettre à jour dans la liste des services, puis cliquez dessus pour en afficher les détails.

    3. Accédez à l'onglet Source, puis cliquez sur Modifier la source.

    4. Cliquez sur Modifier les mises à jour de l'environnement d'exécution et de la sécurité à côté de Image de base, puis sélectionnez un autre environnement d'exécution ou environnement dans la liste si nécessaire, puis cliquez sur Enregistrer.

    5. Modifiez le point d'entrée de la fonction si nécessaire.

    6. Dans la section Fichiers, sélectionnez Ajouter un fichier pour créer un fichier, Renommer un fichier pour renommer un fichier ou Supprimer un fichier pour supprimer un fichier.

    7. Dans la section Code, modifiez votre code source si nécessaire.

    8. Cliquez sur Enregistrer et redéployer, puis attendez la fin du déploiement.

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Exécutez la commande suivante dans le répertoire contenant le code source de la fonction:

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      Remplacez :

      • FUNCTION par le nom de la fonction que vous souhaitez modifier.

      • FUNCTION_ENTRYPOINT par le point d'entrée de votre fonction dans votre code source.

      • BASE_IMAGE par l'environnement d'image de base de votre fonction. Dans la plupart des cas, vous pouvez spécifier l'ID d'exécution, par exemple nodejs22.

        Si vous souhaitez utiliser un package système spécifique dans la pile ou spécifier la région à partir de laquelle l'image de base est téléchargée, vous pouvez spécifier l'une des options suivantes:

        • Chemin d'accès complet de l'image de base, par exemple us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22. Cette option vous permet de spécifier l'image de base, un package système spécifique dans la pile et la région à partir de laquelle l'image de base est téléchargée.
        • Alias du chemin d'accès complet de l'image de base, par exemple google-22/nodejs22 ou google-22-full/nodejs22. Cette option d'alias plus courte vous permet de spécifier l'image de base et un package système spécifique dans la pile.

        Pour en savoir plus sur les images de base et les packages inclus dans chaque image, consultez la section Images de base de l'environnement d'exécution.

      • REGION par la région Google Cloud dans laquelle vous souhaitez déployer votre fonction. Par exemple, us-central1.

      Indicateurs facultatifs

      Vous pouvez configurer les options facultatives suivantes lorsque vous modifiez votre fonction :

      • Les options Build environment variables (Variables d'environnement de compilation) permettant de spécifier des variables d'environnement lors de l'étape de compilation, par exemple pour configurer des certificats ou des paramètres spécifiques au moment de la compilation.

      • Les options de pool de nœuds de calcul permettant de spécifier le pool de nœuds de calcul à utiliser dans le contexte de compilation sécurisé de VPC Service Controls.

      • Les options Custom build service accounts (Comptes de service de compilation personnalisés) permettant de spécifier une alternative au compte de service de compilation par défaut pour renforcer la sécurité.

      • L'option Mises à jour automatiques des images de base permettant de désactiver les mises à jour automatiques. Par défaut, les mises à jour de sécurité automatiques sont activées pour les fonctions.

    Étape suivante

    Après avoir déployé une nouvelle fonction, vous pouvez effectuer les opérations suivantes :