Mettre à jour un déploiement

Lorsque vous disposez d'un déploiement, vous pouvez le mettre à jour au fur et à mesure de l'évolution de votre application. Dans Deployment Manager, vous pouvez modifier votre déploiement des deux façons suivantes :

  • Ajouter ou supprimer des ressources dans le déploiement
  • Mettre à jour certaines propriétés de ressources existantes dans le déploiement

Deployment Manager utilise les API sous-jacentes des services Google Cloud pour gérer les ressources de votre déploiement. Deployment Manager peut mettre à jour des ressources existantes s'il existe une méthode update ou patch dans l'API correspondante.

Déployer la configuration d'origine

À cette étape, déployez la configuration que vous mettrez à jour ultérieurement. Accédez au dossier dans le dépôt GitHub, puis déployez la configuration :

cd deploymentmanager-samples/examples/v2/step_by_step_guide/step8_metadata_and_startup_scripts/python

gcloud deployment-manager deployments create deployment-to-update --config config-with-many-templates.yaml

La configuration déploie deux machines virtuelles (VM) qui exécutent un script de démarrage. Le modèle de VM est le suivant :

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Creates the virtual machine with environment variables and startup script."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'

def GenerateConfig(context):
  """Creates the virtual machine."""

  resources = [{
      'name': context.env['name'],
      'type': 'compute.v1.instance',
      'properties': {
          'zone': context.properties['zone'],
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/',
                                  context.env['project'], '/zones/',
                                  context.properties['zone'], '/machineTypes/',
                                  context.properties['machineType']]),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-11'])
              }
          }],
          'networkInterfaces': [{
              'network': '$(ref.' + context.properties['network']
                         + '.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }],
          'metadata': {
              'items': [{
                  'key': 'startup-script',
                  'value': ''.join(['#!/bin/bash\n',
                                    'python -m SimpleHTTPServer 80'])
              }]
          }
      }
  }]
  return {'resources': resources}

Ouvrir le modèle mis à jour

À présent, ouvrez le modèle mis à jour :

cd deploymentmanager-samples/examples/v2/step_by_step_guide/step9_update_a_deployment/python

nano vm-template.py

Dans la section metadata du modèle mis à jour, le script de démarrage de la VM a été modifié :

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Creates the virtual machine with environment variables and startup script."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'

def GenerateConfig(context):
  """Creates the virtual machine."""

  resources = [{
      'name': context.env['name'],
      'type': 'compute.v1.instance',
      'properties': {
          'zone': context.properties['zone'],
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/',
                                  context.env['project'], '/zones/',
                                  context.properties['zone'], '/machineTypes/',
                                  context.properties['machineType']]),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-11'])
              }
          }],
          'networkInterfaces': [{
              'network': '$(ref.' + context.properties['network']
                         + '.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }],
          'metadata': {
              'items': [{
                  'key': 'startup-script',
                  'value': ''.join(['#!/bin/bash\n',
                                    'INSTANCE=$(curl http://metadata.google.',
                                    'internal/computeMetadata/v1/instance/',
                                    'hostname -H "Metadata-Flavor: Google")\n',
                                    'echo "<html><header><title>Hello from ',
                                    'Deployment Manager!</title></header>',
                                    '<body><h2>Hello from $INSTANCE</h2><p>',
                                    'Deployment Manager bids you good day!</p>',
                                    '</body></html>" > index.html\n',
                                    'python -m SimpleHTTPServer 80\n'])
              }]
          }
      }
  }]
  return {'resources': resources}

Utilisez ce modèle mis à jour pour modifier le déploiement que vous avez créé.

Prévisualiser la mise à jour

Pour prévisualiser le déploiement mis à jour, exécutez la commande update avec un indicateur --preview :

gcloud deployment-manager deployments update deployment-to-update --config config-with-many-templates.yaml --preview

Appliquer la mise à jour

Pour appliquer la mise à jour, exécutez la commande suivante :

gcloud deployment-manager deployments update deployment-to-update

Vérifier la mise à jour

Pour vérifier si la mise à jour a fonctionné, vous devez d'abord redémarrer les instances pour qu'elles utilisent le nouveau script de démarrage. Redémarrez the-first-vm :

gcloud compute instances reset the-first-vm

Le redémarrage de l'instance peut prendre un certain temps. Attendez quelques minutes avant de confirmer la modification.

Confirmer le nouveau script de démarrage

  1. Obtenez l'adresse IP externe de the-first-vm :

    gcloud compute instances describe the-first-vm | grep "natIP"
    
  2. Copiez la valeur.

  3. Ouvrez votre navigateur, puis collez l'adresse IP dans la barre d'adresse pour accéder à votre instance.

    La page devrait maintenant afficher un message de bienvenue indiquant : "Deployment Manager vous souhaite une bonne journée !".

Vous pouvez également effectuer à nouveau ces étapes avec the-second-vm. Dans ce cas, un message légèrement différent s'affichera.

Supprimer le déploiement

Comme pour les étapes précédentes, nous vous recommandons de supprimer le déploiement afin d'éviter que des frais ne soient facturés. Exécutez la commande suivante pour supprimer le déploiement :

gcloud deployment-manager deployments delete deployment-to-update

Étapes suivantes

Voici quelques pistes à explorer lorsque vous utilisez Deployment Manager :