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.
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 dans votre projet implique 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 Artifact Registry.
Cloud Storage est utilisé dans votre projet pour stocker le répertoire du code source de vos fonctions. Veuillez noter les points suivants :
- Si vous créez une fonction, un bucket d'importation est créé pour contenir votre code source. Ce bucket d'importation est nommé
gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com
. - Une fois le code importé, le code de la fonction est stocké dans un bucket source distinct :
- 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
.
- Si vous utilisez le chiffrement par défaut, ce bucket est nommé
- La durée de conservation des buckets source et d'importation n'est pas définie.
- Si vous créez une fonction, un bucket d'importation est créé pour contenir votre code source. Ce bucket d'importation 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 une version gratuite. Consultez les tarifs pour plus de détails.
Pour en savoir plus sur les tarifs de Artifact Registry, consultez la page Tarifs.
Pour en savoir plus sur les tarifs de Container Registry (obsolète), 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 compilation
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 la 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
.
Artifact Registry doit se trouver dans le même projet que votre fonction. Vous pouvez créer ou mettre à jour une fonction basée sur Artifact Registry comme suit :
gcloud
Pour l'Artefact Registry géré par le client, exécutez la commande suivante :
gcloud functions deploy --no-gen2 FUNCTION \ --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
.
Pour l'Artifact Registry géré par Google, utilisez cette commande :
gcloud functions deploy --no-gen2 FUNCTION \ --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 --no-gen2\ --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 --no-gen2 \ --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 qui fait office de compte 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 Évolution du compte de service Cloud Build par défaut. Pour des raisons de sécurité, le compte de service Compute Engine par défaut ne dispose pas des 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 depuis ce compte de service, vous pouvez suivre les étapes suivantes pour renforcer la sécurité de l'environnement de compilation de vos fonctions :
- Empêchez 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 compte de service avec des autorisations de portée appropriée à utiliser pour la compilation.
- Utilisez le compte de service configuré pour la compilation.
Empêcher l'utilisation de l'ancien compte de service Cloud Build 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 tous les droits d'accès pour limiter sa capacité à accéder 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 cloudbuild.useComputeServiceAccount
sur Not Enforced
.
Vous pouvez également désactiver ce compte de service pour l'empêcher d'accéder aux ressources Google Cloud .
Fournir un compte de service pour la création de fonctions
Lors du déploiement d'une fonction, un compte de service de compilation peut être spécifié dans la configuration 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, vous devez spécifier un compte de service de compilation pour déployer une fonction.
Pour savoir comment configurer et utiliser un compte de service de compilation pour votre fonction, consultez Compte de service personnalisé pour Cloud Build.