Deployment aktualisieren

Nachdem Sie eine Bereitstellung eingerichtet haben, können Sie sie aktualisieren, wenn sich Ihre Anwendung weiterentwickelt. In Deployment Manager haben Sie zwei Möglichkeiten, ein Deployment zu aktualisieren:

  • Ressourcen in die Bereitstellung einfügen oder aus ihr entfernen
  • Einige Attribute vorhandener Ressourcen in Ihrer Bereitstellung aktualisieren

Deployment Manager verwendet die zugrunde liegenden APIs der Google Cloud-Dienste, um Ressourcen in Ihrem Deployment zu verwalten. Deployment Manager kann vorhandene Ressourcen aktualisieren, wenn die entsprechende API die Methode update oder patch enthält.

Ursprüngliche Konfiguration bereitstellen

Stellen Sie in diesem Schritt die Konfiguration bereit, die Sie später aktualisieren. Rufen Sie dazu den Ordner im GitHub-Repository auf und stellen Sie die Konfiguration bereit:

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

Bei der Konfiguration werden zwei virtuelle Maschinen (VMs) bereitgestellt, die ein Startskript ausführen. Dies ist die VM-Vorlage:

# 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}

Aktualisierte Vorlage öffnen

Öffnen Sie nun die aktualisierte Vorlage:

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

nano vm-template.py

In der aktualisierten Vorlage wurde im Abschnitt metadata das Startskript der VM geändert:

# 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}

Sie verwenden diese aktualisierte Vorlage, um die von Ihnen erstellte Bereitstellung zu ändern.

Vorschau des Updates anzeigen

Führen Sie den Befehl update mit dem Flag --preview aus, um eine Vorschau der aktualisierten Bereitstellung anzeigen zu lassen:

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

Aktualisierung durchführen

Führen Sie Folgenden Code aus, um die Aktualisierung durchzuführen:

gcloud deployment-manager deployments update deployment-to-update

Aktualisierung bestätigen

Prüfen Sie, ob die Aktualisierung vorgenommen wurde. Starten Sie dazu zuerst die Instanzen neu, um das neue Startskript zu verwenden. Starten Sie the-first-vm neu:

gcloud compute instances reset the-first-vm

Der Neustart der Instanz kann einige Zeit in Anspruch nehmen. Warten Sie ein paar Minuten, bis Sie die Änderung bestätigen.

Neues Startskript bestätigen

  1. Rufen Sie die externe IP-Adresse von the-first-vm ab:

    gcloud compute instances describe the-first-vm | grep "natIP"
    
  2. Kopieren Sie den Wert.

  3. Öffnen Sie einen Browser und kopieren Sie die IP-Adresse in die Adressleiste, um Ihre Instanz aufzurufen.

    Auf der Seite sollte jetzt eine Begrüßungsnachricht mit dem Text "Deployment Manager bids you good day!" (Deployment Manager heißt Sie herzlich willkommen!) angezeigt werden.

Sie können diese Schritte auch mit the-second-vm wiederholen. Dabei wird eine etwas andere Nachricht angezeigt.

Bereitstellung löschen

Wie bei den vorherigen Schritten empfehlen wir Ihnen auch hier, die Bereitstellung zu löschen, um Kosten zu vermeiden. Führen Sie den folgenden Befehl aus, um die Bereitstellung zu löschen:

gcloud deployment-manager deployments delete deployment-to-update

Weitere Informationen

Bei der weiteren Verwendung von Deployment Manager könnten Sie auch die folgenden Bereiche interessieren: