Présentation du processus de compilation
Lorsque vous déployez le code source de votre fonction dans Cloud Run Functions, ce code source est stocké dans un bucket Cloud Storage. Cloud Build compile ensuite automatiquement votre code dans une image de conteneur, puis transfère cette image dans un registre d'images. Cloud Run Functions accède à cette image lorsqu'il doit exécuter le conteneur pour exécuter votre fonction. Si votre fonction utilise toujours Container Registry, vous devez passer à Artifact Registry dès que possible.
Le processus de création de l'image est entièrement automatique et ne nécessite aucune saisie directe de votre part. Toutes les ressources utilisées dans le processus de compilation s'exécutent dans votre propre projet utilisateur.
L'exécution du processus de compilation présente les aspects suivants :
Vous disposez d'un accès direct à tous les journaux de compilation.
Il n'y a pas de quota prédéfini pour la durée de compilation, bien que Cloud Build dispose de son propre quota de simultanéité par défaut.
Vous pouvez afficher l'image de conteneur actuelle et les images de conteneur précédemment déployées, toutes stockées dans Container Registry.
Cloud Storage est utilisé directement dans votre projet et le répertoire du code source de vos fonctions est stocké dans un bucket au sein de votre projet. Veuillez noter les points suivants :
- Si vous utilisez le chiffrement par défaut, ce bucket est nommé
gcf-sources-PROJECT_NUMBER-REGION
. - Si vous protégez vos données avec des CMEK, le bucket est nommé
gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH
. - La durée de conservation du bucket n'est pas définie.
- Si vous utilisez le chiffrement par défaut, ce bucket est nommé
Caractéristiques du processus de compilation
Le processus de compilation présente les caractéristiques suivantes :
L'API Cloud Build doit être activée pour votre projet.
Pour activer l'API manuellement, cliquez sur le lien ci-dessus, sélectionnez votre projet dans le menu déroulant, puis suivez les instructions pour activer l'interface utilisateur.
Étant donné que l'intégralité du processus de compilation a lieu dans le contexte de votre projet, celui-ci est soumis à la tarification des ressources incluses :
Pour en savoir plus sur les tarifs de Cloud Build, consultez la page Tarifs. Ce processus utilise la taille d'instance par défaut de Cloud Build, car ces instances sont préalablement démarrées et disponibles plus rapidement. Cloud Build propose une version gratuite. Consultez les tarifs pour plus de détails.
Pour en savoir plus sur les tarifs de Cloud Storage, consultez la page Tarifs. Cloud Storage propose un quota gratuit : consultez les tarifs pour plus de détails.
Pour en savoir plus sur les tarifs d'Artifact Registry, consultez la page Tarifs.
Pour en savoir plus sur les tarifs (obsolètes) de Container Registry, consultez la page Tarifs.
Comme le processus de compilation est susceptible d'être facturé, votre projet doit être associé à un compte Cloud Billing.
Afficher les journaux de vos images de build
L'un des principaux avantages d'avoir le processus d'image de build dans votre projet utilisateur est de pouvoir accéder aux journaux de compilation. Vous pouvez utiliser gcloud CLI ou la console Google Cloud pour accéder aux journaux, qui sont disponibles via Cloud Logging.
gcloud
Déployez votre fonction à l'aide de la commande
gcloud functions deploy
.L'URL des journaux est affichée dans la réponse de votre fenêtre de terminal. Exemple :
Deploying function (may take a while - up to 2 minutes)...⠹ **For Cloud Build Stackdriver Logs**, visit: https://console.cloud.google.com/logs/viewer?project=
&advancedFilter=resource.type% 3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2- 380d50d4f5e8%0AlogName%3Dprojects%2F % 2Flogs%2Fcloudbuild Deploying function (may take a while - up to 2 minutes)...done.
Console Google Cloud
- Dans la fenêtre Présentation de Cloud Run Functions, cliquez sur le nom de la fonction que vous étudiez.
- Cliquez sur l'onglet Détails.
- Dans le volet Informations générales, cliquez sur le lien Journal des builds de conteneurs pour ouvrir le volet Explorateur de journaux.
- Cliquez sur une ligne pour afficher les détails de cette entrée de journal de build. S'il s'agit d'une entrée d'erreur associée à un fichier, ces informations incluent le nom, la ligne et la colonne du fichier.
Registre d'images
Cloud Run Functions utilise Artifact Registry pour stocker les images créées à partir du code source de votre fonction. Les images sont stockées dans un dépôt nommé REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts
situé dans le même projet que celui dans lequel votre fonction est créée.
Pour spécifier un dépôt Artifact Registry autogéré, exécutez la commande suivante:
gcloud
gcloud functions deploy FUNCTION \ --docker-registry=artifact-registry \ --docker-repository=REPOSITORY \ [FLAGS...]
Remplacez les éléments suivants :
- FUNCTION : nom de la fonction.
- REPOSITORY : nom complet du dépôt Artifact Registry, au format suivant :
projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY
.
Lorsque vous spécifiez un dépôt Artifact Registry situé dans un autre projet ou une autre région, vous devrez peut-être prendre en compte des configurations supplémentaires:
Configurations IAM:
- Assurez-vous que le compte de service de compilation est autorisé à lire et à écrire dans le REPOSITORY.
Configurations réseau:
- Assurez-vous que le REPOSITORY cible est accessible depuis la configuration actuelle du projet.
Configurations VPC Service Controls:
- Assurez-vous que le compte de service de compilation peut atteindre l'REPOSITORY cible dans le périmètre VPC-SC.
Contraintes de résidence des données:
- Notez que spécifier un REPOSITORY dans une région différente de celle où se trouve votre fonction entraînera un transfert de données entre régions.
Console Google Cloud
Accédez à la page Cloud Run Functions dans la console Google Cloud :
Accéder à la page Cloud Run FunctionsCliquez sur le nom de la fonction pour laquelle vous souhaitez utiliser Artifact Registry.
Cliquez sur Modifier.
Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.
Cliquez sur Sécurité et dépôt d'images dans la barre de menu pour ouvrir l'onglet "Sécurité".
Sous Dépôt d'images, sélectionnez l'une des options suivantes, selon le type d'Artifact Registry que vous utilisez :
- Artifact Registry géré par le client Utilisez cette option si vous configurez votre propre dépôt Docker.
- Artifact Registry géré par Google Utilisez cette option si vous souhaitez utiliser un dépôt Docker géré par Google au lieu de configurer votre propre dépôt.
Pour Artifact Registry géré par le client, utilisez le menu déroulant Artifact Registry pour sélectionner le dépôt Artifact Registry souhaité, ou suivez les invites et créez un nouveau dépôt Artifact Registry.
Cliquez sur Suivant.
Cliquez sur Déployer.
Identifier les fonctions qui utilisent Container Registry
Les fonctions qui utilisent Container Registry comportent la clé buildConfig.dockerRegistry
dans leurs descriptions. Vous pouvez récupérer la description de la fonction comme suit:
gcloud
gcloud functions describe FUNCTION_NAME
Remplacez FUNCTION_NAME par le nom de votre fonction.
Console Google Cloud
Accédez à la page Cloud Run Functions dans la console Google Cloud :
Accéder à la page Cloud Run FunctionsCliquez sur le nom de la fonction pour laquelle vous souhaitez utiliser Artifact Registry.
Cliquez sur Détails.
Cliquez sur EQUIVALENT REST (ÉQUIVALENT REST) pour obtenir les informations complètes sur la fonction.
Inventaire des éléments cloud
Vous pouvez utiliser l'inventaire des éléments cloud pour interroger l'ensemble de votre organisation afin de trouver les fonctions qui utilisent Container Registry:
- Consultez le guide de l'inventaire des éléments cloud pour afficher vos éléments.
- Utilisez la commande
gcloud
suivante pour interroger les fonctions qui utilisentCONTAINER_REGISTRY
.
gcloud asset list \ --content-type=resource \ --asset-types=cloudfunctions.googleapis.com/Function --organization=ORGANIZATION_ID \ --filter "resource.data.buildConfig.dockerRegistry='CONTAINER_REGISTRY'"
Remplacez ORGANIZATION_ID par l'ID de ressource de votre organisation.
Passer à Artifact Registry
Vous pouvez faire publier des images dans Artifact Registry en modifiant les paramètres du dépôt:
gcloud
gcloud beta functions deploy FUNCTION_NAME \ --docker-registry=artifact-registry \ [FLAGS...]
Console Google Cloud
Accédez à la page Cloud Run Functions dans la console Google Cloud :
Accéder à la page Cloud Run FunctionsCliquez sur le nom de la fonction pour laquelle vous souhaitez utiliser Artifact Registry.
Cliquez sur Modifier.
Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.
Cliquez sur Sécurité et dépôt d'images dans la barre de menu pour ouvrir l'onglet "Sécurité".
Sous Dépôt d'images, sélectionnez l'une des options suivantes, selon le type d'Artifact Registry que vous utilisez :
- Artifact Registry géré par le client Utilisez cette option si vous configurez votre propre dépôt Docker.
- Artifact Registry géré par Google Utilisez cette option si vous souhaitez utiliser un dépôt Docker géré par Google au lieu de configurer votre propre dépôt.
Pour Artifact Registry géré par le client, utilisez le menu déroulant Artifact Registry pour sélectionner le dépôt Artifact Registry souhaité, ou suivez les invites et créez un nouveau dépôt Artifact Registry.
Cliquez sur Suivant.
Cliquez sur Déployer.
Pour obtenir des informations détaillées sur les prix, consultez la section Tarifs de Cloud Run Functions.
Sécuriser votre build à l'aide de pools privés
Pour permettre à vos fonctions d'utiliser des dépendances (par exemple, des packages npm), Cloud Build dispose par défaut d'un accès illimité à Internet durant le processus de compilation. Si vous avez configuré un périmètre VPC Service Controls (VPC SC) et que vous souhaitez limiter l'accès de la compilation uniquement aux dépendances stockées dans ce périmètre, vous pouvez utiliser la fonctionnalité de pools de nœuds de calcul privés de Cloud Build.
En général, vous pouvez utiliser la procédure suivante pour configurer votre pool privé :
- Créez votre pool de nœuds de calcul privé. Consultez la page Créer et gérer des pools privés.
Configurez votre périmètre VPC Service Controls. Consultez la page Utiliser VPC Service Controls.
Si votre pool de nœuds de calcul privé se trouve dans un projet différent de celui de votre fonction, vous devez attribuer au compte de service de l'agent de service Cloud Run Functions (
service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) le rôlecloudbuild.workerPoolUser
afin que le service Cloud Build puisse accéder au pool de nœuds de calcul.gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \ --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com --role roles/cloudbuild.workerPoolUser
où FUNCTION_PROJECT_NUMBER correspond au numéro du projet dans lequel la fonction est exécutée et PRIVATE_POOL_PROJECT_ID à l'ID du projet dans lequel le nœud de calcul est exécuté. Pour en savoir plus, consultez la page Exécuter des compilations dans un pool privé.
Déployez votre fonction pour qu'elle soit compilée à l'aide d'un pool privé :
gcloud
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --build-worker-pool PRIVATE_POOL_NAME [FLAGS...]
où FUNCTION_NAME correspond au nom de la fonction, RUNTIME à l'environnement d'exécution que vous utilisez et PRIVATE_POOL_NAME au nom de votre pool.
Pour arrêter d'utiliser un pool privé donné et utiliser à la place le pool Cloud Build par défaut, utilisez l'option --clear-build-worker-pool
lors du redéploiement.
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --clear-build-worker-pool [FLAGS...]
où FUNCTION_NAME correspond au nom de la fonction et RUNTIME à l'environnement d'exécution que vous utilisez.
Console Google Cloud
Dans la page Présentation de Cloud Run Functions, sélectionnez Créer une fonction.
Dans Environnement d'exécution, compilation... cliquez sur le bouton Compilation puis saisissez le nom de ressource complet de votre pool privé dans la zone de texte Créer des pools de nœuds de calcul.
Pour en savoir plus, consultez la page Exécuter des builds dans un pool privé.
Sécuriser votre build avec un compte de service personnalisé
Cloud Run Functions récupère votre code source et l'envoie à Cloud Build pour le conteneuriser. La fonction conteneurisée est stockée dans Artifact Registry et déployée dans Cloud Run en tant que service. Par défaut, Cloud Build attribue un compte de service pour servir de principal lors de la compilation. À partir de juillet 2024, les nouveaux projets d'une organisation utiliseront le compte de service Compute Engine par défaut pour agir en tant qu'entité principale exécutant un build. Pour en savoir plus, consultez la page Modification du compte de service par défaut de Cloud Build. Pour des raisons de sécurité, le compte de service Compute Engine par défaut ne dispose pas d'autorisations suffisantes pour effectuer la compilation.
Pour les projets Google Cloud créés avant juillet 2024, Cloud Build utilise l'ancien compte de service Cloud Build. Ce compte de service a été conçu pour aider les utilisateurs à exécuter un large éventail de cas d'utilisation qui peuvent être trop permissifs pour les besoins de votre projet. Si vous souhaitez déplacer vos projets existants de ce compte de service, vous pouvez suivre les étapes ci-dessous pour renforcer la sécurité de votre environnement de compilation de fonctions:
- Empêcher l'ancien compte de service Cloud Build d'être utilisé pour la compilation.
- Empêchez l'utilisation du compte de service Compute par défaut pour la compilation.
- Configurez un nouveau compte de service avec des autorisations de portée appropriées à utiliser pour la compilation.
- Utilisez le compte de service configuré pour la compilation.
Empêcher l'ancien compte de service Cloud Build d'être utilisé pour la compilation
Vous pouvez vérifier que votre projet utilise l'ancien compte de service Cloud Build en inspectant les détails de la compilation de votre fonction. Le compte de service de compilation par défaut a le format suivant:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
.
Vous pouvez désactiver de force l'utilisation de ce compte de service en définissant la contrainte de règle d'administration cloudbuild.useBuildServiceAccount
sur Not Enforced
. Vous pouvez également supprimer toutes ses autorisations de rôle pour limiter son accès aux ressources Google Cloud.
Empêcher l'utilisation du compte de service Compute par défaut pour la compilation
Le compte de service Compute par défaut est au format PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Vous pouvez désactiver son utilisation par défaut pour la compilation en définissant la règle d'administration de l'organisation cloudbuild.useComputeServiceAccount
sur Not Enforced
.
La désactivation de ce compte de service empêche son utilisation pour accéder aux ressources Google Cloud.
Fournir un compte de service pour créer des fonctions
Lors de la configuration d'une fonction, vous pouvez spécifier un compte de service de compilation lors du déploiement de la fonction. Lorsque l'ancien compte de service Cloud Build et le compte de service Compute par défaut ne peuvent pas être utilisés pour la compilation, un compte de service de compilation doit être spécifié pour déployer une fonction.
Consultez Compte de service personnalisé pour Cloud Build pour configurer et utiliser un compte de service de compilation pour votre fonction.