Deployment aktualisieren

Nachdem Sie eine Bereitstellung erstellt haben, können Sie sie aktualisieren, wenn sich Ihre Anwendung oder Ihr Dienst ändert. Im Deployment Manager führen Sie zur Aktualisierung einer Bereitstellung folgende Schritte aus:

  • Ressourcen von einer Bereitstellung entfernen oder hinzufügen.
  • Die Properties vorhandener Ressourcen in Ihrer Bereitstellung aktualisieren.

Eine einzige Aktualisierung kann jede Kombination dieser Änderungen umfassen. Sie können z. B. Änderungen an den Attributen vorhandener Ressourcen vornehmen und in derselben Anfrage neue Ressourcen hinzufügen. Führen Sie die folgenden Schritte aus, um das Deployment zu aktualisieren:

  1. Nehmen Sie Änderungen an einer Konfigurationsdatei vor oder erstellen Sie eine neue mit den gewünschten Änderungen.
  2. Wählen Sie optional Richtlinien für Ihre Aktualisierung aus oder verwenden Sie die Standardrichtlinien.
  3. Stellen Sie die Aktualisierungsanfrage an Deployment Manager.

Hinweis

Aktualisierung vorbereiten

Bereiten Sie die Aktualisierung Ihrer Bereitstellung anhand der folgenden Richtlinien vor:

  • Wenn Sie Ihr Deployment aktualisieren, um dem Projekt neue Ressourcen hinzuzufügen, prüfen Sie, ob die Ressourcen bereits vorhanden sind.

    Wenn eine Ressource, die Sie hinzufügen möchten, bereits im Projekt vorhanden ist, wird sie standardmäßig vom Deployment übernommen, ohne dass eine neue Ressource erstellt wird. Falls Sie keine vorhandene Ressource übernehmen möchten, ändern Sie die für die Aktualisierung zu verwendende Richtlinie.

    Informationen zu den Richtlinien, die Sie zur Aktualisierung von Bereitstellungen verwenden können, finden Sie unter Richtlinien zum Hinzufügen von Ressourcen.

  • Wenn Sie Ihr Deployment aktualisieren, um eine Ressource zu ersetzen, überprüfen Sie deren Abhängigkeiten.

    Wenn Sie eine Ressource Ihres Deployments ersetzen möchten, müssen Sie darauf achten, dass durch das Löschen kein Deployment-Zyklus verursacht wird. Ein Deployment-Zyklus wird verursacht, wenn eine Ressource direkt oder indirekt von sich selbst abhängt. Betrachten Sie beispielsweise das folgende Deployment:

    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)
        ...
    

    Bei diesem Deployment erfordert die Anweisung dependsOn für vm-a, dass vm-depends-on vor vm-a erstellt werden muss. vm-depends-on verwendet jedoch einen Verweis auf die Zone für vm-a, der erfordert, dass vm-a vor vm-depends-on erstellt wird. In einem solchen Szenario befinden sich die Abhängigkeiten in einer Schleife und das Deployment schlägt fehl.

    Wenn Sie eine Ressource haben, von der andere Ressourcen abhängig sind und die von anderen Ressourcen abhängig ist, kann das Ersetzen dieser Ressource einen Deployment-Zyklus verursachen.

    Beispiel: Ein Deployment hat einen nichtflüchtigen Speicher namens disk-a, eine VM namens vm-a und eine Instanzgruppe namens ig-a. Die Konfiguration für vm-a enthält einen Verweis auf disk-a und die Konfiguration für ig-a enthält einen Verweis auf vm-a. In einer aktualisierten Konfiguration möchten Sie vm-a entfernen und durch vm-b ersetzen. In einem solchen Szenario kann das Auflösen der Abhängigkeiten für vm-a und vm-b einen Deployment-Zyklus verursachen und das Deployment schlägt fehl.

    Führen Sie einen der folgenden Schritte aus, um Bereitstellungszyklen zu vermeiden, wenn Sie eine Ressource in einer Kette von Abhängigkeiten ersetzen:

    • Entfernen Sie die Abhängigkeiten für die Ressource, die Sie ersetzen möchten. Löschen Sie dazu entweder die dependsOn-Klausel oder löschen bzw. ändern Sie Verweise auf andere Ressourcen. Nachdem Sie das Deployment mit diesen Änderungen aktualisiert haben, ersetzen Sie die Ressource durch eine weitere Aktualisierung.

    • Löschen Sie die Kette der abhängigen Ressourcen und aktualisieren Sie das Deployment. Erstellen Sie dann bei der nächsten Aktualisierung die Ressourcen, die Sie verwenden möchten, neu.

  • Prüfen Sie, ob eine zugrunde liegende API vorhanden ist, die Ihre Aktualisierung unterstützt.

    Deployment Manager nutzt die APIs der einzelnen Dienste, um Ihre Deployments zu erstellen und zu bearbeiten. Überprüfen Sie in der API-Dokumentation des Cloud Platform-Dienstes für die Ressource, die aktualisiert werden soll, ob Ihre Anfrage vom Deployment Manager ausgeführt werden kann.

    Wenn Sie beispielsweise ein BigQuery-Dataset in Ihrem Deployment aktualisieren möchten, finden Sie die dafür verfügbaren Methoden in der Datasets API-Referenz. Es ist eine update-Methode verfügbar, die angibt, dass Sie das Dataset mit Deployment Manager aktualisieren können.

    Einige APIs bieten benutzerdefinierte Methoden zum Aktualisieren ihrer Ressourcen. Compute Engine bietet beispielsweise zum Aktualisieren der Metadaten einer Instanz eine benutzerdefinierte Methode namens setMetadata. In solchen Fällen versucht der Deployment Manager, die benutzerdefinierten Methoden zu verwenden.

  • Überprüfen Sie, ob die Ressourcen, die Sie aktualisieren möchten, änderbar sind.

    Einige Ressourcen sind nach ihrer Erstellung nicht änderbar und können nicht aktualisiert werden. Informationen dazu, ob eine Ressource unveränderbar ist, finden Sie in der API-Referenz zur Ressource. Normalerweise enthält eine unveränderliche Ressource keine API-Methode update und keine benutzerdefinierte Methode zum Aktualisieren der Attribute der Ressource.

Beschränkungen

  • Für jedes Deployment können Sie immer nur eine Aktualisierung gleichzeitig ausführen. Wenn bereits eine Aktualisierung ausgeführt wird, müssen Sie die laufende Aktualisierung stoppen, bevor Sie eine neue Aktualisierung starten.

  • Wenn Sie eine Ressource in einer Bereitstellung ohne Deployment Manager geändert haben, z. B. in der Google Cloud Console oder über gcloud, treten möglicherweise Fehler oder unerwartete Probleme auf, wenn Sie versuchen, die Ressource in einer Aktualisierung zu ändern.

Konfigurationsdatei ändern

Wenn Sie eine vorhandene Konfiguration gespeichert haben, können Sie Änderungen an der Konfiguration vornehmen und diese in Ihrer Aktualisierungsanfrage verwenden.

Falls keine vorhandene Konfiguration gespeichert ist, erstellen Sie eine neue Konfiguration. Schritte zum Erstellen einer Konfigurationsdatei finden Sie unter Konfigurationen.

Deployment Manager vergleicht die in Ihrer Aktualisierungsanfrage angegebene Konfiguration mit dem vorherigen Manifest und aktualisiert das Deployment anhand der Unterschiede.

Die folgende Tabelle zeigt beispielsweise zwei Konfigurationen: Eine beschreibt ein bestehendes Deployment und eine beschreibt den angestrebten aktualisierten Zustand des Deployments. Sie geben die aktualisierte Konfiguration an und Deployment Manager untersucht die Unterschiede und führt entsprechend die Aktualisierung durch.

In diesem Beispiel wird eine vorhandene Instanzressource so aktualisiert, dass einige benutzerdefinierte Metadaten hinzugefügt werden und außerdem eine neue virtuelle Maschinenressource in das Deployment aufgenommen wird. Die Teile in Fettschrift sind Unterschiede zwischen den Vorlagen.

Aktuelle Vorlage Aktualisierte Vorlage
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

(Optional) Für die Aktualisierung zu verwendende Richtlinien bestimmen

Als Nächstes bestimmen Sie die Richtlinien, die Sie für die Aktualisierung verwenden möchten. Die Richtlinien legen fest, wie Ihre Ressourcen beim Update des Deployments aktualisiert werden.

Deployment Manager verwendet folgende Standardrichtlinien:

  • CREATE_OR_ACQUIRE als Standardrichtlinie zum Hinzufügen von Ressourcen
  • DELETE als Standardrichtlinie zum Entfernen von Ressourcen
  • UPDATE als Standardrichtlinie zum Aktualisieren von Ressourcen

Informationen zu den einzelnen Richtlinien finden Sie in den Abschnitten unten.

Richtlinien für das Hinzufügen von Ressourcen

Wenn Sie Ressourcen hinzufügen, können Sie wählen, ob Sie neue Ressourcen für die Bereitstellung erstellen oder ob Sie eine bestehende Ressource übernehmen:

  • CREATE_OR_ACQUIRE: [Standard] Deployment Manager übernimmt im Projekt vorhandene Ressourcen oder erstellt neue Ressourcen, wenn es sie noch nicht gibt. Zur Übernahme einer Ressource überprüft Deployment Manager Ihre Konfiguration auf die Attribute der Ressource, die Sie erstellen möchten. Wenn eine Ressource mit diesen Attributen bereits vorhanden ist, übernimmt Deployment Manager diese Ressource in Ihr Deployment.

    Welche Attribute vom Deployment Manager überprüft werden, hängt vom Typ der Ressource ab, die Sie erstellen. Beispielsweise sind folgende möglich:

    • Der name der Ressource
    • Der type der Ressource
    • Die zone oder region der Ressource, sofern zutreffend

    Die Attribute sind Teil der URL für die API-Anfrage GET für die Ressource. Welche Attribute Deployment Manager für die Übernahme einer Ressource verwendet, ist in der API-Dokumentation für die Methode GET der Ressource aufgeführt. Für Compute Engine-Instanzen umfasst die Anfrage-URL für die Methode instances.get die resourceId (name in Ihrer Konfiguration), die zone und das project.

  • CREATE: In Deployment Manager werden noch nicht vorhandene Ressourcen erstellt. Wenn eine Ressource in Ihrer Konfiguration bereits im Projekt vorhanden ist, schlägt das Deployment fehl.

  • ACQUIRE: In Deployment Manager werden Ressourcen übernommen, die bereits vorhanden sind. Es gelten die gleichen Kriterien wie für CREATE_OR_ACQUIRE.

    Wenn Ihr Projekt bereits Ressourcen enthält, die Sie zusammen als ein Deployment verwalten möchten, verwenden Sie die Richtlinie ACQUIRE.

    Sie müssen in Ihrer Vorlage oder Konfiguration die erforderlichen Attribute für diese Ressourcen wie bei einer Erstellung angeben. Wenn eine der Ressourcen in der Konfiguration noch nicht im Projekt vorhanden ist, schlägt das Deployment fehl.

Richtlinien für das Entfernen von Ressourcen

Legen Sie eine der folgenden Richtlinien zum Entfernen von Ressourcen fest:

  • DELETE: [Standard] Mit dieser Richtlinie werden alle Verweise auf die Ressource aus dem Deployment entfernt und die zugrunde liegende Ressource wird gelöscht. Dies ist permanent und kann nicht rückgängig gemacht werden, aber Sie haben immer noch die Möglichkeit, eine neue Ressource mit den gleichen Attributen zu erstellen.

  • ABANDON: Diese Richtlinie entfernt alle Verweise auf die Ressource aus dem Deployment, löscht aber nicht die zugrunde liegende Ressource. Wenn Sie eine Instanz verwerfen, bedeutet das, dass sie aus dem Deployment entfernt wird. Die Instanz steht Ihnen aber noch zur Verfügung.

    Die Richtlinie ABANDON gilt nur, wenn Sie ganze Ressourcen löschen, nicht, wenn Sie die Attribute einer Ressource löschen oder eine Ressource mit neuen Attributen aktualisieren. Um die Attribute einer Ressource beizubehalten müssen Sie die Ressource mit allen ursprünglichen Attributen in die aktualisierte Konfiguration aufnehmen. Wenn Sie eine neue Konfigurationsdatei für Ihre Aktualisierung verwenden, empfehlen wir, die Ressourcendefinition der ursprünglichen Konfiguration zu kopieren.

Richtlinien für das Aktualisieren einer vorhandenen Ressource

Wenn eine UPDATE-Methode zum Aktualisieren vorhandener Ressourcen vorhanden ist, verwendet der Deployment Manager diese.

Andernfalls verwendet der Deployment Manager die benutzerdefinierte Methode, sofern eine solche existiert. Deployment Manager unterstützt benutzerdefinierte Methoden, die das Verb set verwenden. Beispiel: setMetadata() ist eine gültige benutzerdefinierte Methode, addAccessConfigs() jedoch nicht.

(Optional) Vorschau einer aktualisierten Konfiguration

Bevor Sie einen Commit für die Änderungen durchführen, können Sie sich mithilfe der Google Cloud CLI oder der API eine Vorschau der Aktualisierung ansehen. Der Deployment Manager-Dienst zeigt eine Vorschau der Konfiguration an, indem die vollständige Konfiguration erweitert und "Shell"-Ressourcen erstellt werden.

Deployment Manager erstellt keine tatsächlichen Ressourceninstanzen, wenn Sie die Vorschau der Konfiguration anzeigen lassen. Dadurch können Sie das Deployment sehen, bevor Sie sich darauf festlegen.

gcloud

Senden Sie mit der Google Cloud CLI eine update-Anfrage mit dem Parameter --preview:

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

API

Erstellen Sie in der API eine PUT()-Anfrage an ein vorhandenes Deployment und geben Sie den Abfrageparameter preview=true an. Der Anfragetext muss die Felder intent, target und name enthalten. Geben Sie den Namen des Deployments sowohl in der URL als auch im Anfragetext an.

Die folgende API-Anfrage liefert eine Vorschau einer einfachen Aktualisierung:

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

Nach der Vorschau eines Deployments können Sie die Konfiguration vollständig bereitstellen, indem Sie dieselbe PUT()-Anfrage senden, dabei aber die Konfiguration und den Abfrageparameter preview weglassen. Der Deployment Manager verwendet Ihre letzte Vorschau, um die Aktualisierung durchzuführen. Beispiel:

gcloud deployment-manager deployments update example-deployment

Schritte zum Ausführen einer Aktualisierungsanfrage finden Sie unter Aktualisierungsanfrage stellen.

Wenn Sie beschließen, die Aktualisierung nicht fortzusetzen, brechen Sie die aktuelle Vorschau ab, bevor Sie eine weitere Aktualisierungs- oder Vorschauanfrage ausführen.

Vorschau abbrechen

Nachdem Sie die Vorschau einer Aktualisierung angesehen haben, müssen Sie sich entscheiden, ob Sie mit der Aktualisierung fortfahren möchten. Wenn Sie sich dagegen entscheiden oder eine andere Konfigurationsdatei zum Aktualisieren der Bereitstellung verwenden möchten, brechen Sie die aktuelle Vorschau ab.

gcloud

Stellen Sie mit der Google Cloud CLI eine deployments cancel-preview-Anfrage:

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

API

Senden Sie in der API eine PUT()-Anfrage an die Methode cancelPreview und geben Sie den neuesten Deployment-Fingerabdruck an. Ein Fingerabdruck ist ein zufällig generierter Wert, der sich mit jeder Aktualisierungsanfrage ändert. Um Fehler während der Aktualisierung zu vermeiden, geben Sie bei Ihrer Anfrage den neuesten Fingerabdruck an.

Sie erhalten den aktuellen Fingerabdruck eines Deployments, wenn Sie das Deployment mit der get()-Methode abrufen und nach dem Fingerabdruckwert suchen. Dieser sieht folgendermaßen aus:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Ihre cancelPreview()-Anfrage sieht so aus:

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

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Aktualisierungsanfrage stellen

So führen Sie die Aktualisierung durch:

gcloud

Verwenden Sie den deployments update-Unterbefehl der Google Cloud CLI und geben Sie eine neue Konfiguration und optional Ihre Aktualisierungsrichtlinien an.

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

Wenn Sie zuvor eine Konfiguration als Vorschau angesehen haben, lassen Sie die Konfiguration weg. Deployment Manager verwendet dann die letzte Konfiguration, die als Vorschau angezeigt wurde, um die Aktualisierung durchzuführen.

gcloud deployment-manager deployments update my-first-deployment

API

Senden Sie in der API eine update-Anfrage und geben Sie den aktuellen Deployment-Fingerabdruck an. Ein Fingerabdruck ist ein zufällig generierter Wert, der sich mit jeder Aktualisierungsanfrage ändert. Um Fehler während der Aktualisierung zu vermeiden, geben Sie bei Ihrer Anfrage den neuesten Fingerabdruck an.

Sie erhalten den aktuellen Fingerabdruck eines Deployments, wenn Sie das Deployment mit der get()-Methode abrufen und nach dem Fingerabdruckwert suchen. Dieser sieht folgendermaßen aus:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Geben Sie als Nächstes den Fingerabdruck zusammen mit den neuen Konfigurations- und Aktualisierungsrichtlinien in Ihrer Anfrage an. Wenn Sie zuvor eine Konfiguration als Vorschau angesehen haben, lassen Sie die Konfiguration weg und Deployment Manager verwendet die letzte Konfiguration, die als Vorschau angezeigt wurde, um die Aktualisierung durchzuführen.

Geben Sie den Namen der Bereitstellung sowohl in der URL als auch im Anfragetext an.

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=="
}

Aktualisierung stoppen

Mit stop() können Sie eine laufende Aktualisierung stoppen. beenden. Dies bricht jeden weiteren Fortschritt einer bestimmten Aktualisierung ab, aber revidiert keine Änderungen, die bereits vorgenommen wurden.

Mehr Informationen über das Abbrechen einer Vorschau erhalten Sie im Abschnitt Eine Vorschau abbrechen.

gcloud

Stellen Sie mit der Google Cloud CLI eine deployments stop-Anfrage:

gcloud deployment-manager deployments stop my-first-deployment

API

Senden Sie in der API eine POST()-Anfrage an die Methode stop und geben Sie das neueste Fingerabdruckattribut an. Ein Fingerabdruck ist ein zufällig generierter Wert, der sich mit jeder Aktualisierungsanfrage ändert. Um Änderungskonflikte zu vermeiden, müssen Sie bei Ihrer Anfrage den neuesten Fingerabdruck angeben. So sorgen Sie für eine optimistische Sperrung, durch die jeweils nur eine Aktualisierung durchgeführt werden kann.

Sie erhalten den aktuellen Fingerabdruck eines Deployments, wenn Sie das Deployment mit der get()-Methode abrufen und nach dem Fingerabdruckwert suchen. Dieser sieht folgendermaßen aus:

"fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="

Ihre Anfrage sieht so aus:

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

{
 "fingerprint": "nU2v7bzeA7gBBI8bdbtmFg=="
 }

Weitere Informationen