Mettre à jour un déploiement

Après avoir créé un déploiement, vous pouvez le mettre à jour au fur et à mesure que votre application ou service évolue. Dans Deployment Manager, vous pouvez modifier votre déploiement des deux façons suivantes :

  • Ajouter des ressources au déploiement ou en supprimer
  • Mettre à jour les propriétés des ressources existantes dans le déploiement

Vous pouvez apporter n'importe quelle combinaison de ces modifications dans une seule mise à jour. Par exemple, vous pouvez modifier les propriétés des ressources existantes et ajouter de nouvelles ressources dans la même requête. Pour mettre à jour votre déploiement, procédez comme suit :

  1. Modifiez le fichier de configuration ou créez-en un avec les modifications que vous souhaitez apporter.
  2. Si vous le souhaitez, vous pouvez sélectionner les règles à utiliser pour les mises à jour ou choisir celles définies par défaut.
  3. Envoyez une requête de mise à jour à Deployment Manager.

Avant de commencer

Préparer la mise à jour

Pour préparer la mise à jour de votre déploiement, suivez ces consignes :

  • Si vous mettez à jour votre déploiement pour ajouter des ressources à votre projet, vérifiez si ces dernières existent déjà.

    Par défaut, si une ressource que vous souhaitez ajouter existe déjà dans votre projet, elle est acquise par le déploiement, sans créer de ressource. Si vous ne souhaitez pas acquérir une ressource existante, vous devez modifier la règle à utiliser pour la mise à jour.

    Pour en savoir plus sur les règles que vous pouvez utiliser lors de la mise à jour des déploiements, consultez la section Règles pour l'ajout de ressources.

  • Si vous mettez à jour votre déploiement pour remplacer une ressource, vérifiez ses dépendances.

    Si vous souhaitez remplacer une ressource de votre déploiement, vous devez d'abord vous assurer que sa suppression n'entraîne pas un cycle de déploiement. Un cycle de déploiement se produit lorsqu'une ressource dépend de lui, directement ou indirectement. Par exemple, examinez le déploiement suivant :

    resources:
    - name: vm-a
      properties:
        zone: us-central1-f
        ...
        metadata:
          dependsOn:
          - vm-depends-on
    
    # The second VM
    - name: vm-depends-on
      properties:
        zone: $(ref.vm-a.zone)
        ...
    

    Dans ce déploiement, pour vm-a, l'instruction dependsOn nécessite que vm-depends-on soit créé avant vm-a. Cependant, vm-depends-on utilise une référence à la zone pour vm-a, ce qui implique que vm-a doit être créé avant vm-depends-on. Dans ce scénario, les dépendances sont dans une boucle, et le déploiement échoue.

    Si vous disposez d'une ressource qui dépend d'autres ressources, et inversement, son remplacement peut entraîner un cycle de déploiement.

    Prenons l'exemple d'un déploiement avec un disque persistant appelé disk-a, une VM appelée vm-a et un groupe d'instances appelé ig-a. La configuration de vm-a inclut une référence à disk-a, et la configuration de ig-a inclut une référence à vm-a. Dans une configuration mise à jour, vous souhaitez supprimer vm-a et le remplacer par vm-b. Dans ce scénario, les dépendances de vm-a et vm-b peuvent entraîner un cycle de déploiement, et votre déploiement échoue.

    Pour éviter les cycles de déploiement lorsque vous souhaitez remplacer une ressource dans une chaîne de dépendances, effectuez l'une des opérations suivantes :

    • Supprimez les dépendances de la ressource à remplacer, soit en supprimant la clause dependOn, soit en supprimant ou en modifiant les références à d'autres ressources. Après avoir mis à jour le déploiement avec ces modifications, effectuez une autre mise à jour pour remplacer la ressource.

    • Supprimez la chaîne de ressources dépendantes, puis mettez à jour le déploiement. Ensuite, recréez les ressources que vous souhaitez utiliser dans la mise à jour suivante.

  • Vérifiez qu'une API sous-jacente est compatible avec votre mise à jour.

    Deployment Manager utilise les API de chaque service pour créer et modifier vos déploiements. Pour vérifier que votre requête puisse être traitée par Deployment Manager, consultez la documentation sur l'API du service Cloud Platform des ressources que vous souhaitez mettre à jour.

    Par exemple, si vous souhaitez mettre à jour un ensemble de données BigQuery dans votre déploiement, consultez les méthodes disponibles dans le document de référence sur les API associées aux ensembles de données. Les méthodes incluent une méthode update, qui indique que vous pouvez mettre à jour l'ensemble de données à l'aide de Deployment Manager.

    Certaines API possèdent des méthodes personnalisées pour mettre à jour leurs ressources. Par exemple, Compute Engine propose une méthode personnalisée pour mettre à jour les métadonnées d'une instance (appelée setMetadata). Dans ce type de cas, Deployment Manager tente d'utiliser les méthodes personnalisées.

  • Assurez-vous que les ressources que vous mettez à jour sont modifiables.

    Certaines ressources sont immuables après leur création et ne peuvent pas être mises à jour. Pour déterminer si une ressource est immuable, consultez le document de référence sur l'API de la ressource. Généralement, une ressource immuable ne dispose pas de méthode d'API update ni de méthode personnalisée pour mettre à jour ses propriétés.

Limites

  • Pour chaque déploiement, vous ne pouvez appliquer qu'une seule mise à jour à la fois. Si une mise à jour est déjà en cours, vous devez arrêter la mise à jour actuelle avant de lancer une nouvelle mise à jour.

  • Si vous avez modifié une ressource dans un déploiement sans utiliser Deployment Manager, comme dans la console Google Cloud ou gcloud, des erreurs ou des problèmes inattendus peuvent se produire lorsque vous essayez de modifier la ressource.

Modifier votre configuration

Si vous avez enregistré une configuration, modifiez-la et utilisez-la dans votre requête de mise à jour.

Si vous ne disposez d'aucune configuration enregistrée, créez-en une. Pour savoir comment créer un fichier de configuration, consultez la documentation sur les configurations.

Deployment Manager compare la configuration que vous fournissez dans votre requête de mise à jour avec le fichier manifeste précédent et utilise les différences pour mettre à jour votre déploiement.

Par exemple, le tableau suivant présente deux configurations : l'une décrit un déploiement existant et l'autre décrit l'état mis à jour souhaité du déploiement. Vous fournissez la configuration mise à jour, puis Deployment Manager évalue les différences et apporte les modifications appropriées.

Dans cet exemple, une ressource d'instances existante est mise à jour pour inclure des métadonnées personnalisées et une ressource de machine virtuelle est ajoutée au déploiement. Les parties en gras mettent en évidence les différences entre les modèles.

Modèle actuel Modèle mis à jour
resources:
- name: vm-created-by-cloud-config
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        diskName: disk-created-by-cloud-config
        sourceImage: image-url
    networkInterfaces:
    - network: network-url
resources:
- name: vm-created-by-cloud-config
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      initializeParams:
        diskName: disk-created-by-cloud-config
        sourceImage: image-url
    networkInterfaces:
    - network: network-url
    metadata:
      items:
      - key: 'foo'
        value: 'bar'
      - key: 'dev'
        value: 'vm'

- name: a-new-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: machine-type-url
      - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: false
      initializeParams:
        diskName: a-new-vm-disk
        sourceImage: image-url
    networkInterfaces:
    - network: network-url

Déterminer les règles à utiliser pour la mise à jour (facultatif)

Déterminez ensuite les règles que vous souhaitez utiliser pour la mise à jour. La règle détermine la manière dont vos ressources sont mises à jour lorsque vous mettez à jour le déploiement.

Deployment Manager utilise les règles par défaut suivantes :

  • La stratégie par défaut pour l'ajout de ressources est CREATE_OR_ACQUIRE.
  • La règle par défaut pour la suppression de ressources est DELETE.
  • La stratégie par défaut pour la mise à jour de ressources est UPDATE.

Pour en savoir plus sur chaque stratégie, consultez les sections ci-dessous.

Règles pour l'ajout de ressources

Lors de l'ajout d'une ressource, vous pouvez choisir d'en créer une nouvelle et de l'ajouter à un déploiement ou d'en acquérir une existante :

  • CREATE_OR_ACQUIRE [Par défaut] : Deployment Manager acquiert des ressources qui existent dans le projet ou en crée si ce n'est pas le cas. Pour acquérir une ressource, Deployment Manager vérifie les propriétés de la ressource que vous essayez de créer dans votre configuration. Si une ressource existante possède les mêmes propriétés, Deployment Manager acquiert cette ressource dans le cadre de votre déploiement.

    Les propriétés vérifiées par Deployment Manager varient en fonction du type de ressource que vous créez et peuvent inclure les informations suivantes :

    • Le name de la ressource
    • Le type de la ressource
    • La zone ou la region de la ressource, le cas échéant

    Les propriétés font partie de l'URL de la requête API GET pour la ressource. Pour afficher les propriétés que Deployment Manager utilise pour acquérir une ressource, consultez la documentation de l'API sur la méthode GET de la ressource. Par exemple, pour les instances Compute Engine, l'URL de la requête pour la méthode instances.get inclut resourceId (name dans votre configuration), zone et project.

  • CREATE : Deployment Manager crée des ressources qui n'existent pas. Si l'une des ressources de votre configuration existe déjà dans le projet, le déploiement échoue.

  • ACQUIRE : Deployment Manager acquiert les ressources existantes à l'aide des mêmes critères que CREATE_OR_ACQUIRE.

    Utilisez la règle ACQUIRE si vous possédez déjà un certain nombre de ressources dans votre projet et que vous souhaitez les gérer ensemble en tant que déploiement unique.

    Dans votre modèle ou votre configuration, vous devez indiquer les propriétés requises pour ces ressources comme si vous les créiez. Si l'une des ressources de votre configuration n'existe pas dans le projet, le déploiement échoue.

Règles pour la suppression de ressources

Indiquez l'une des règles suivantes pour supprimer des ressources :

  • DELETE [Par défaut] : cette règle supprime les références à la ressource du déploiement et supprime la ressource sous-jacente. Cette action est définitive et ne peut pas être annulée. Vous pouvez toutefois recréer une ressource avec les mêmes propriétés.

  • ABANDON : cette règle supprime toutes les références à la ressource du déploiement, mais ne supprime pas la ressource sous-jacente. Par exemple, l'abandon d'une instance signifie qu'elle est supprimée d'un déploiement, mais qu'elle existe toujours et peut être utilisée.

    La stratégie ABANDON s'applique uniquement lorsque vous supprimez des ressources entières, pas lorsque vous supprimez les propriétés d'une ressource, ou mettez à jour une ressource avec de nouvelles propriétés. Si vous souhaitez conserver les propriétés d'une ressource, vous devez inclure la ressource avec toutes ses propriétés d'origine dans votre configuration mise à jour. Si vous utilisez un nouveau fichier de configuration pour votre mise à jour, nous vous recommandons de copier la définition de la ressource à partir de votre configuration d'origine.

Règles pour la mise à jour d'une ressource existante

Si une méthode UPDATE est disponible pour mettre à jour des ressources existantes, Deployment Manager l'utilise.

Sinon, si une méthode personnalisée est disponible, Deployment Manager l'utilise. Deployment Manager est compatible avec les méthodes personnalisées qui utilisent le verbe set. Par exemple, setMetadata() est une méthode personnalisée valide, mais addAccessConfigs() n'en est pas une.

Prévisualiser une configuration mise à jour (facultatif)

Vous pouvez prévisualiser la mise à jour que vous souhaitez apporter avant de valider les modifications, à l'aide de la Google Cloud CLI ou de l'API. Le service Deployment Manager affiche un aperçu de la configuration en développant la configuration complète et en créant des ressources de type "shell".

Deployment Manager n'instancie aucune ressource réelle lorsque vous prévisualisez une configuration et vous donne l'opportunité de visualiser le déploiement avant de le lancer.

gcloud

Avec la Google Cloud CLI, exécutez une requête update avec le paramètre --preview:

gcloud deployment-manager deployments update example-deployment \
    --config configuration-file.yaml \
    --preview

API

Dans l'API, créez une requête PUT() avec un déploiement existant et spécifiez le paramètre preview=true. Le corps de la requête doit contenir les champs intent, target et name. Indiquez le nom du déploiement dans l'URL et dans le corps de la requête.

Par exemple, la requête API suivante affiche l'aperçu d'une simple mise à jour :

PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?preview=true

{
 "target": {
  "config": {
   "content": "resources:\n- name: vm-created-by-cloud-config\n  type: compute.v1.instance\n  properties:\n    zone: us-central1-a\n    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n    disks:\n    - deviceName: boot\n      type: PERSISTENT\n      boot: true\n      autoDelete: true\n      initializeParams:\n        diskName: disk-created-by-cloud-config\n        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n    networkInterfaces:\n    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
  }
 },
 "name": "example-deployment"
}

Après avoir prévisualisé un déploiement, vous pouvez déployer entièrement la configuration en exécutant la même requête PUT(), et en omettant la configuration et le paramètre de requête preview. Deployment Manager utilise votre dernier aperçu pour effectuer la mise à jour. Exemple :

gcloud deployment-manager deployments update example-deployment

Pour en savoir plus sur l'exécution d'une requête de mise à jour, consultez la section Exécuter une requête de mise à jour.

Si vous décidez de ne pas poursuivre la mise à jour, annulez l'aperçu en cours avant d'effectuer une autre requête de mise à jour ou d'aperçu.

Annuler un aperçu

Après avoir prévisualisé une mise à jour, vous devez décider si vous souhaitez l'appliquer. Si vous ne souhaitez pas continuer ou si vous souhaitez utiliser un autre fichier de configuration pour mettre à jour le déploiement, annulez l'aperçu en cours.

gcloud

Avec la Google Cloud CLI, exécutez une requête deployments cancel-preview:

gcloud deployment-manager deployments cancel-preview my-first-deployment

API

Dans l'API, envoyez une requête PUT() à la méthode cancelPreview et fournissez la dernière empreinte numérique du déploiement. Une empreinte numérique est une valeur générée de manière aléatoire qui change à chaque requête de mise à jour. Pour éviter les erreurs lors de la mise à jour, vous devez spécifier la dernière empreinte numérique avec votre requête.

Pour obtenir la dernière empreinte numérique d'un déploiement, utilisez la méthode get() pour récupérer un déploiement, puis recherchez la valeur de l'empreinte. Voici à quoi ressemble la valeur d'une empreinte numérique :

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Votre requête cancelPreview() ressemble à ce qui suit :

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/cancelPreview

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Exécuter la requête de mise à jour

Pour effectuer la mise à jour, procédez comme suit :

gcloud

Avec Google Cloud CLI, utilisez la sous-commande deployments update en fournissant une nouvelle configuration et éventuellement vos règles de mise à jour.

gcloud deployment-manager deployments update my-first-deployment \
    --create-policy POLICY \
    --delete-policy POLICY

Si vous avez déjà prévisualisé la configuration, vous n'avez pas besoin de l'indiquer, car Deployment Manager utilise la dernière configuration prévisualisée pour effectuer la mise à jour.

gcloud deployment-manager deployments update my-first-deployment

API

Dans l'API, exécutez une requête update et indiquez la dernière empreinte numérique du déploiement. Une empreinte numérique est une valeur générée de manière aléatoire qui change à chaque requête de mise à jour. Pour éviter les erreurs lors de la mise à jour, vous devez spécifier la dernière empreinte numérique avec votre requête.

Pour obtenir la dernière empreinte numérique d'un déploiement, utilisez la méthode get() pour récupérer un déploiement, puis recherchez la valeur de l'empreinte. Voici à quoi ressemble la valeur d'une empreinte numérique :

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Indiquez ensuite l'empreinte numérique dans votre requête, ainsi que les nouvelles règles de configuration et de mise à jour. Si vous avez déjà prévisualisé la configuration, vous n'avez pas besoin de l'indiquer, car Deployment Manager utilise la dernière configuration prévisualisée pour effectuer la mise à jour.

Indiquez le nom du déploiement dans l'URL et dans le corps de la requête.

PUT https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment?createPolicy=ACQUIRE&deletePolicy=ABANDON

{
 "target": {
  "config": {
   "content": "resources:\n- name: vm-created-by-cloud-config\n  type: compute.v1.instance\n  properties:\n    zone: us-central1-a\n    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/machineTypes/n1-standard-1\n    disks:\n    - deviceName: boot\n      type: PERSISTENT\n      boot: true\n      autoDelete: true\n      initializeParams:\n        diskName: disk-created-by-cloud-config\n        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20180716\n    networkInterfaces:\n    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default"
  }
 },
 "name": "example-deployment",
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
}

Arrêter une mise à jour

Vous pouvez arrêter une mise à jour en cours à l'aide de la méthode stop() . Cette méthode annule toute poursuite d'une mise à jour spécifique, mais n'annule aucune modification déjà effectuée.

Si vous souhaitez annuler un aperçu, consultez la section Annuler un aperçu.

gcloud

Avec la Google Cloud CLI, exécutez une requête deployments stop:

gcloud deployment-manager deployments stop my-first-deployment

API

Dans l'API, envoyez une requête POST() à la méthode stop et indiquez la dernière propriété de l'empreinte numérique. Une empreinte numérique est une valeur générée de manière aléatoire qui change à chaque requête de mise à jour. Pour éviter tout conflit de modification, vous devez fournir la dernière empreinte numérique avec votre requête afin d'effectuer un verrouillage optimiste de sorte qu'une seule mise à jour puisse être effectuée à la fois.

Pour obtenir la dernière empreinte numérique d'un déploiement, utilisez la méthode get() pour récupérer un déploiement, puis recherchez la valeur de l'empreinte. Voici à quoi ressemble la valeur d'une empreinte numérique :

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Votre requête se présentera comme suit :

POST https://www.googleapis.com/deploymentmanager/v2/projects/myproject/global/deployments/example-deployment/stop

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Étapes suivantes