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 :
- Modifiez le fichier de configuration ou créez-en un avec les modifications que vous souhaitez apporter.
- Si vous le souhaitez, vous pouvez sélectionner les règles à utiliser pour les mises à jour ou choisir celles définies par défaut.
- Envoyez une requête de mise à jour à Deployment Manager.
Avant de commencer
- Si vous voulez vous servir des exemples de ligne de commande de ce guide, installez l'outil de ligne de commande gcloud.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Découvrez comment créer des déploiements.
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'instructiondependsOn
nécessite quevm-depends-on
soit créé avantvm-a
. Cependant,vm-depends-on
utilise une référence à la zone pourvm-a
, ce qui implique quevm-a
doit être créé avantvm-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éevm-a
et un groupe d'instances appeléig-a
. La configuration devm-a
inclut une référence àdisk-a
, et la configuration deig-a
inclut une référence àvm-a
. Dans une configuration mise à jour, vous souhaitez supprimervm-a
et le remplacer parvm-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 laregion
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éthodeGET
de la ressource. Par exemple, pour les instances Compute Engine, l'URL de la requête pour la méthodeinstances.get
inclutresourceId
(name
dans votre configuration),zone
etproject
.- Le
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 queCREATE_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 effectuer 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 Google Cloud CLI, envoyez 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 Google Cloud CLI, envoyez 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 Google Cloud CLI, envoyez 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
- Ajouter des libellés au déploiement
- Afficher le fichier manifeste de déploiement