Bereitstellung aktualisieren

Sie können eine vorhandene Bereitstellung aktualisieren oder ändern, wenn Ihre Anwendung weiterentwickelt wird, indem Sie eine Aktualisierungsanfrage beim Deployment Manager stellen. Mithilfe des Deployment Managers können Sie eine Bereitstellung mit folgenden Schritten ändern:

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

Beachten Sie, dass der Deployment Manager die zugrunde liegenden APIs von Diensten der Google Cloud Platform zum Verwalten von Ressourcen in Ihrer Bereitstellung verwendet. Wenn eine API eine bestimmte Aktion nicht unterstützt, kann der Deployment Manager diese Aktion auch nicht durchführen. Zum Beispiel kann der Deployment Manager eine vorhandene Ressource nur aktualisieren, wenn die entsprechende API eine Aktualisierungsmethode enthält.

Neben den standardmäßigen Aktualisierungsmethoden gibt es in bestimmten APIs benutzerdefinierte Methoden, mit denen die Eigenschaften einer Ressource geändert werden können. Zum Beispiel enthält Compute Engine eine Methode zum Ändern der Metadaten einer ausgeführten Instanz. Der Deployment Manager kann mithilfe dieser benutzerdefinierten Methoden auch Aktualisierungen an Ihrer Bereitstellung vornehmen.

Informationen zu den unterstützten Methoden finden Sie in der jeweiligen Produktdokumentation.

Aktualisierungsrichtlinien auswählen

Sie können aus vielen Aktualisierungsrichtlinien auswählen, wenn Sie eine Aktualisierung durchführen, aber in den meisten Fällen sind die Standardeinstellungen ausreichend. Sie müssen also nicht unbedingt ausdrücklich Richtlinien angegeben und der Deployment Manager verwendet die Standardrichtlinien. Die standardmäßigen Aktualisierungsrichtlinien sind:

  • Die Standardrichtlinie zum Hinzufügen von Ressourcen ist CREATE_OR_ACQUIRE, wodurch auf eine Ressource zugegriffen und sie in die Bereitstellung eingefügt wird, wenn sie bereits vorhanden ist, und die Ressource wird erstellt, wenn sie nicht bereits vorhanden ist.
  • Die Standardrichtlinie zum Entfernen von Ressourcen ist DELETE, wodurch die Ressource aus der Bereitstellung und aus Ihrem Projekt entfernt wird.
  • Die Standardrichtlinie für die Aktualisierung einer Ressource ist die Verwendung der Methode UPDATE oder eine benutzerdefinierte Methode, wenn die Methode vorhanden ist.

Ausführliche Informationen zu den Aktualisierungsrichtlinien finden Sie in Bereitstellung aktualisieren.

Vorschau einer Aktualisierung anzeigen

Bevor Sie ein Commit von Änderungen an Ihrer Bereitstellung durchführen, können Sie eine Vorschau einer Aktualisierung anzeigen, was Ihnen einen Eindruck der Anwendung Ihrer Aktualisierungen bietet, bevor Sie die Entscheidung zum Ändern Ihrer Bereitstellung treffen. Durch die Vorschau einer Aktualisierung beginnt der Deployment Manager mit der Aktualisierung Ihrer Bereitstellung, stoppt aber kurz bevor Änderungen tatsächlich geändert werden. Stattdessen erstellt der Deployment Manager "Hüllen" von Ressourcen, die die gewünschten Änderungen enthalten, aber nur im Deployment Manager und in keinem der entsprechenden Cloud Platform-Dienste vorhanden sind. Ab dieser Stelle können Sie entscheiden, ob die Vorschau abgebrochen oder mit der Aktualisierung fortgefahren werden soll.

Wir empfehlen allgemein, Vorschauen von Aktualisierungen anzuzeigen, um Änderungen prüfen zu können, bevor sie umgesetzt werden.

Bereitstellung aktualisieren

Eine Bereitstellung wird in drei Schritten aktualisiert:

  1. Erstellen Sie eine aktualisierte Konfiguration mit den gewünschten Änderungen.
  2. Wählen Sie die gewünschten Aktualisierungsrichtlinien aus oder verwenden Sie die Standardrichtlinien.
  3. (Optional) Zeigen Sie eine Vorschau Ihrer Aktualisierung an.
  4. Führen Sie die Aktualisierung durch.

Nehmen wir das letzte Beispiel aus Schritt acht und aktualisieren wir unser Startskript in vm-template.yaml.

VM-Vorlagendatei bearbeiten

Ändern Sie den Metadatenabschnitt so, dass er folgendermaßen aussieht:

Jinja

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

resources:
- name: {{ env["name"] }}
  type: compute.v1.instance
  properties:
    zone: {{ properties["zone"] }}
    machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/{{ properties["machineType"] }}
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-8
    networkInterfaces:
    - network: $(ref.{{ properties["network"] }}.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
    metadata:
      items:
      - key: startup-script
        value: |
          #!/bin/bash
          INSTANCE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/hostname -H "Metadata-Flavor: Google")
          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
          python -m SimpleHTTPServer 80

Python

# 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-8'])
              }
          }],
          '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}

Speichern Sie die Änderungen. Sie verwenden die Standardrichtlinien für die Aktualisierungen, sodass Sie keine weiteren Änderungen vornehmen müssen.

Vorschau der Konfiguration anzeigen

gcloud deployment-manager deployments update deployment-with-startup-script  \
  --config config-with-many-templates.yaml --preview

Sie können Ihre voraussichtlichen Änderungen prüfen, indem Sie Ihre neuen Ressourcen anzeigen, das Manifest beschreiben oder ähnliche Schritte durchführen. Zum Beispiel können Sie eine Beschreibung der vorgeschlagenen Änderungen an the-first-vm aufrufen, indem Sie die Ressource beschreiben:

gcloud deployment-manager resources describe the-first-vm --deployment deployment-with-startup-script

Aktualisierung durchführen

gcloud deployment-manager deployments update deployment-with-startup-script

Instanz neu starten

Zum Prüfen, ob die Aktualisierung korrekt durchgeführt wurde, müssen wir unsere Instanzen neu starten, um das neue Startskript umzusetzen. Starten Sie the-first-vm neu:

gcloud compute instances reset the-first-vm

Der Neustart der Instanz kann etwas Zeit dauern. Warten Sie ein paar Minuten, bis Sie die Änderung bestätigen.

Änderung bestätigen

  1. Rufen Sie die externe IP 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 neuen Website sollte jetzt eine andere Begrüßung angezeigt werden.

Sie können die Schritte 4 und 5 mit the-second-vm wiederholen und sehen eine etwas andere Begrüßung.

Bereitstellung löschen

Ressourcen von Compute Engine verursachen Kosten, also sollte diese Bereitstellung gelöscht werden, da sie für spätere Schritte nicht mehr erforderlich ist. Durch Löschen dieser Bereitstellung werden allen Ressourcen in dieser Bereitstellung ebenfalls gelöscht. Wenn Sie die Bereitstellung nicht löschen, können Probleme mit späteren Beispielen auftreten.

So löschen Sie diese Bereitstellung:

gcloud deployment-manager deployments delete deployment-with-startup-script

Verwandte Themen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud Deployment Manager-Dokumentation