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 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.

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

  1. Déployez votre fonction à l'aide de la commande gcloud functions deploy.

  2. 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

  1. Dans la fenêtre Présentation de Cloud Run Functions, cliquez sur le nom de la fonction que vous étudiez.
  2. Cliquez sur l'onglet Détails.
  3. Dans le volet Informations générales, cliquez sur le lien Journal des builds de conteneurs pour ouvrir le volet Explorateur de journaux.
  4. 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

  1. Accédez à la page Cloud Run Functions dans la console Google Cloud :
    Accéder à la page Cloud Run Functions

  2. Cliquez sur le nom de la fonction pour laquelle vous souhaitez utiliser Artifact Registry.

  3. Cliquez sur Modifier.

  4. Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.

  5. Cliquez sur Sécurité et dépôt d'images dans la barre de menu pour ouvrir l'onglet "Sécurité".

  6. 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.
  7. 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.

  8. Cliquez sur Suivant.

  9. 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é :

  1. Créez votre pool de nœuds de calcul privé. Consultez la page Créer et gérer des pools privés.
  2. Configurez votre périmètre VPC Service Controls. Consultez la page Utiliser VPC Service Controls.

  3. 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ôle cloudbuild.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

    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é.

  4. 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...]

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...]

FUNCTION_NAME correspond au nom de la fonction et RUNTIME à l'environnement d'exécution que vous utilisez.

console Google Cloud

  1. Dans la page Présentation de Cloud Run Functions, sélectionnez Créer une fonction.

  2. 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 agir en tant que 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 Modification 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 nécessaires 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 hors de ce compte de service, vous pouvez suivre la procédure ci-dessous pour renforcer la sécurité de votre environnement de compilation des fonctions :

  1. Empêcher l'utilisation de l'ancien compte de service Cloud Build pour la compilation
  2. Empêcher l'utilisation du compte de service Compute par défaut pour la compilation
  3. Configurez un nouveau compte de service avec des autorisations appropriées pour la compilation.
  4. Utilisez le compte de service configuré pour le build.

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 forcer la désactivation de l'utilisation de ce compte de service en définissant la contrainte de règle d'organisation cloudbuild.useBuildServiceAccount sur Not Enforced. Si vous supprimez toutes les autorisations de rôle, vous limiterez 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 a le 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'organisation cloudbuild.useComputeServiceAccount sur Not Enforced. Vous pouvez également désactiver ce compte de service pour empêcher son utilisation afin d'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, vous devez spécifier un compte de service de compilation pour déployer une fonction.

Consultez la section Compte de service personnalisé pour Cloud Build pour configurer et utiliser un compte de service de compilation pour votre fonction.