Déployer un service ou un job Cloud Run

Ce document explique comment déployer vos applications, y compris les services et les jobs Cloud Run.

Cloud Deploy vous permet de déployer vos charges de travail basées sur des conteneurs sur n'importe quel service ou job Cloud Run. Toutes les fonctionnalités de Cloud Deploy sont compatibles lorsque vous déployez sur des cibles Cloud Run pour les services Cloud Run, mais les déploiements Canary ne sont pas compatibles avec les jobs Cloud Run.

Ce document décrit les trois configurations principales que vous devez effectuer pour déployer sur Cloud Run :

Limites

  • Vous ne pouvez déployer qu'un seul service ou job Cloud Run par cible.

  • Vous ne pouvez pas exécuter un déploiement Canary sur un job Cloud Run.

    Toutefois, les services Cloud Run peuvent utiliser un déploiement Canary.

  • Pour déployer une fonction Cloud Run à l'aide de Cloud Deploy, vous devez modifier votre workflow d'intégration continue pour créer la fonction dans un conteneur et la déployer en tant que service Cloud Run.

Avant de commencer

Créez votre configuration cible.

La cible peut être configurée dans le fichier YAML de votre pipeline de déploiement ou dans un fichier distinct. Vous pouvez également configurer plusieurs cibles dans le même fichier.

Les cibles doivent être définies dans le même projet et la même région que le pipeline de déploiement. Toutefois, les services ou les jobs auxquels les cibles sont déployées peuvent se trouver dans des projets et des régions différents, à condition que le compte de service ait accès à ces projets.

Dans la définition de la cible, créez une strophe run pour identifier l'emplacement où le service Cloud Run sera créé.

La syntaxe permettant de spécifier le service ou le job Cloud Run dans votre définition de cible est la suivante :

run:
 location: projects/[project_name]/locations/[region_name]

Cet identifiant de ressource utilise les éléments suivants :

  • [project_name] correspond au nom du projet Google Cloud dans lequel votre service ou job Cloud Run sera créé.

    Vous devez effectuer cette opération pour chaque cible. Nous vous recommandons d'utiliser un projet différent pour chaque service ou job Cloud Run. Si vous souhaitez utiliser plusieurs services ou jobs dans le même projet, vous devez utiliser des profils Skaffold dans votre fichier de configuration skaffold.yaml.

  • [region_name] correspond à la région dans laquelle le service ou le job seront créés. Votre service ou job peut se trouver dans n'importe quelle région compatible avec Cloud Run.

Voici un exemple de configuration cible, qui définit le service ou le job Cloud Run à créer :

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

Vous pouvez définir cette cible dans une définition de pipeline de livraison Cloud Deploy ou séparément. Dans les deux cas, vous devez enregistrer la cible avant de créer la version à déployer pour votre service ou job Cloud Run.

Créer votre configuration Skaffold

Voici un exemple de fichier skaffold.yaml pour un déploiement Cloud Run :

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

Dans ce fichier skaffold.yaml

  • manifests.rawYaml fournit les noms des définitions de service Cloud Run.

    Dans cet exemple, service.yaml est le fichier qui définit un service Cloud Run que Skaffold déploiera. Ce nom de fichier peut être n'importe quoi, mais par convention, il s'agit de service.yaml pour un service et de job.yaml pour un job.

  • La strophe deploy indique comment vous souhaitez déployer le fichier manifeste, en particulier le projet et l'emplacement. deploy est obligatoire.

    Nous vous recommandons de laisser le {} vide. Cloud Deploy le renseigne lors du rendu, en fonction du projet et de l'emplacement de la définition de la cible.

    Toutefois, pour le développement local, vous pouvez fournir des valeurs ici. Toutefois, Cloud Deploy utilise toujours le projet et l'emplacement de la définition de la cible, que des valeurs soient fournies ou non.

Créer vos définitions de service Cloud Run

Pour créer une définition de service Cloud Run, vous pouvez la créer manuellement ou la copier à partir d'un service existant. Ces deux méthodes sont décrites dans cette section.

Option 1 : Créer un service.yaml Cloud Run

Le fichier service.yaml définit votre service Cloud Run. Lorsque vous créez une version, Skaffold utilise cette définition pour déployer votre service.

Voici un exemple simplifié :

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Où :

  • [SERVICE_NAME] est le nom de ce service Cloud Run.

  • [IMAGE_PATH] pointe vers la ou les images de conteneurs que vous déployez avec ce service.

Option 2 : Copier un service.yaml à partir d'un service existant à l'aide de la console Google Cloud

Vous pouvez créer un service à l'aide de la console Google Cloud ou en utiliser un existant, puis y copier votre service.yaml.

Pour obtenir service.yaml à l'aide de Google Cloud CLI :

gcloud run services describe [service_name] --format=export

Pour obtenir le service.yaml depuis la console Google Cloud  :

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

  2. Sélectionnez le service existant dont vous souhaitez utiliser la définition.

Vous pouvez également en créer un, puis le sélectionner. Lorsque vous sélectionnez le service, la page "Informations sur le service" s'affiche :

Page "Détails du service" de la consoleGoogle Cloud , affichant l'onglet "YAML"

  1. Sélectionnez l'onglet YAML.

  2. Cliquez sur Modifier, puis copiez le contenu du fichier YAML dans un nouveau fichier nommé service.yaml dans votre système de fichiers, afin que Skaffold puisse l'utiliser lorsque vous créerez une version.

Créer vos définitions de job Cloud Run

Pour déployer une définition de job Cloud Run, vous pouvez en créer une manuellement ou en copier une à partir d'un job existant. Ces deux méthodes sont décrites dans cette section.

Notez que les jobs ne sont pas nécessairement exécutés lorsqu'ils sont déployés par Cloud Deploy. Cela diffère des services, qui sont des applications en cours d'exécution après leur déploiement. La manière dont un job est appelé dépend du job lui-même.

Option 1 : Créer un job.yaml Cloud Run

Le fichier job.yaml définit votre job Cloud Run. Lorsque vous créez une version, Skaffold utilise cette définition pour déployer le job.

Voici un exemple simplifié :

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
 name: [JOB_NAME]
spec:
  template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Où :

  • [JOB_NAME] est le nom de ce job Cloud Run.

  • [IMAGE_PATH] pointe vers l'image de conteneur que vous déployez pour ce job.

Option 2 : Copier un job.yaml à partir d'un job existant à l'aide de la console Google Cloud

Vous pouvez créer un job à l'aide de la console Google Cloud ou en utiliser un existant, puis y copier votre job.yaml.

Pour obtenir job.yaml à l'aide de Google Cloud CLI :

gcloud run jobs describe [job_name] --format=export

Pour obtenir le job.yaml depuis la console Google Cloud  :

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

  2. Sélectionnez le job existant dont vous souhaitez utiliser la définition.

Vous pouvez également en créer un, puis le sélectionner. Lorsque vous sélectionnez le job, la page "Détails du job" s'affiche :

Page des détails du jobGoogle Cloud de la console, affichant l'onglet YAML

  1. Sélectionnez l'onglet YAML.

  2. Cliquez sur Modifier, puis copiez le contenu du fichier YAML dans un nouveau fichier nommé job.yaml dans votre système de fichiers, afin que Skaffold puisse l'utiliser lorsque vous créerez une version.

Synthèse

Maintenant que vous disposez de la définition de votre service ou job Cloud Run, de votre configuration skaffold.yaml et de la définition de votre cible Cloud Deploy, et que vous avez enregistré votre cible en tant que ressource Cloud Deploy, vous pouvez maintenant appeler votre pipeline de diffusion pour créer une version et la faire progresser dans la progression des cibles définies dans le pipeline.

Le guide de démarrage rapide Déployer une application sur Cloud Run à l'aide de Cloud Deploy montre tout cela en action.

Comportement des services dans les révisions

Lorsque vous redéployez un service, la nouvelle révision est basée sur le service.yaml nouvellement déployé. Aucune information sur la révision précédente n'est conservée, sauf si elle est identique dans le fichier YAML nouvellement déployé. Par exemple, si la révision précédente contient des paramètres de configuration ou des libellés qui ne figurent pas dans le nouveau fichier YAML, ces paramètres ou libellés sont absents de la nouvelle révision.

Déclencher des jobs Cloud Run

Une fois que vous avez déployé un job, vous pouvez le déclencher comme décrit dans la documentation Cloud Run.

Déployer des services et des jobs Cloud Run dans plusieurs projets

Si vous devez déployer des services ou des jobs qui se trouvent dans des projets différents, votre compte de service d'exécution doit être autorisé à accéder aux projets dans lesquels ces services ou jobs sont définis.

Pour en savoir plus, consultez Compte de service d'exécution Cloud Deploy et Rôles et autorisations Identity and Access Management.

Déployer Cloud Run Functions

Les fonctions Cloud Run compilent votre code source chaque fois qu'une fonction est déployée. Par conséquent, chaque environnement d'exécution cible de votre pipeline peut obtenir un artefact légèrement différent. Cela va à l'encontre des bonnes pratiques de Cloud Deploy. Nous vous suggérons plutôt d'utiliser directement un service Cloud Run. Cela vous permet de créer un seul artefact et de le promouvoir dans vos environnements.

  1. Consultez service.yaml pour votre fonction Cloud Run.

    Pour l'obtenir, exécutez la commande suivante :

    gcloud run services describe FUNCTION_NAME \
    --format=export \
    --region=REGION \
    --project=PROJECT
    
  2. Supprimez les annotations suivantes, le cas échéant :

    • run.googleapis.com/build-base-image
    • run.googleapis.com/build-name
    • run.googleapis.com/build-source-location
    • run.googleapis.com/build-enable-automatic-updates
  3. Remplacez la valeur de spec.spec.containers.image par IMAGE_TAG.

  4. Créez votre pipeline de diffusion et vos cibles, avec le service Cloud Run comme cible.

  5. Séparez l'étape de compilation de l'étape de déploiement dans votre processus CI. Au lieu d'utiliser la Google Cloud CLI pour déployer votre fonction, remplacez-la par les étapes suivantes :

    1. Créez la fonction dans un conteneur à l'aide de Cloud Build :

      gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \
      --project=PROJECT \
      --region=REGION
      
    2. Créez une version à l'aide de Cloud Deploy :

      gcloud deploy releases create RELEASE_NAME \
      --project=PROJECT \
      --region=REGION \
      --delivery-pipeline=DELIVERY_PIPELINE
      --image=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
      

Étapes suivantes