Google Cloud Platform für AWS-Experten: Infrastrukturbereitstellungstools

Letzte Aktualisierung am 6. Dezember 2017

Sowohl auf Google Cloud als auch auf Amazon Web Services (AWS) können Sie Ihre Cloud-Umgebungen mit der Infrastructure-as-Code-Methode (IaC) verwalten. Google Cloud bietet den Deployment Manager und AWS bietet CloudFormation.

Ihre Infrastruktur als Code zu behandeln bedeutet, dass Ihre Umgebung über Skripts, Vorlagen und Konfigurationsdateien definiert und die Dateien in einem Quellcode-Repository aufbewahrt werden. Mit dieser Herangehensweise können Sie Folgendes tun:

  • Die Version Ihrer Konfiguration kontrollieren.
  • Konsistente, reproduzierbare Konfigurationen bereitstellen.
  • Einen Audit-Trail der Änderungen an Ihrer Konfiguration durchsehen.
  • Die Konfiguration als Teil eines kontinuierlichen Bereitstellungssystems verwenden.
  • Mühelos auf frühere, fehlerfreie Konfigurationen zurückgreifen.

Dienstmodelle im Vergleich

In der folgenden Tabelle werden allgemeine Funktionen, Begriffe und Konzepte unter CloudFormation den Funktionen, Begriffen und Konzepten von Deployment Manager gegenübergestellt:

Feature AWS CloudFormation Google Cloud Deployment Manager
Bereitgestellte Ressourcensammlung Stapel Bereitstellung
Bereitstellungsdateien Vorlagendatei Konfigurationsdateien, Vorlagendateien und Schemadateien
Syntax JSON, YAML YAML, Jinja, Python
Zusammensetzung und Wiederverwendung Verschachtelte Stapel Vorlagen
Identifikation einzelner Ressourcen Logische ID Name
Geografischer Umfang der Bereitstellung Regional Global
Standardmäßige Höchstzahl von Stapeln oder Bereitstellungen 200 1.000
Grafische Benutzeroberfläche Ja Nein
Vorschau Ja Ja
Stapelrichtlinien Ja Nein

Vorlagen und Konfiguration

In der folgenden Tabelle werden die verfügbaren Vorlagen- und Konfigurationsfeatures in CloudFormation mit denen im Deployment Manager verglichen:

Feature AWS CloudFormation Google Cloud Deployment Manager
Maximale Vorlagen- bzw. Konfigurationsgröße 460,8 KB 1 MB
Deklarativ Ja Ja
Bedingungen Ja Ja
Schleifen Nein Ja
Parametrisierung Ja Ja
Ausgabewerte Ja Ja

AWS CloudFormation

In AWS CloudFormation wird eine Vorlage erstellt, die eine Reihe von Aktionen für verschiedene Dienste definiert, z. B. das Erstellen eines S3-Buckets oder das Starten einer EC2-Instanz. Eine AWS-Vorlage kann in YAML oder JSON geschrieben werden und AWS CloudFormation kann eine Vorlage entweder von einem S3-Bucket oder von Ihrem lokalen Computer aus aufrufen. Wenn AWS CloudFormation eine Vorlage aufruft, ruft sie die APIs der Dienste auf, die Sie in der Vorlage definiert haben, um die Dienste zu starten und zu konfigurieren.

Zur Verwendung der in einer Vorlage definierten Dienste müssen Sie für jeden Dienst die entsprechenden IAM-Berechtigungen in AWS besitzen. Sie können auch IAM-Richtlinien festlegen, um die Verwendung von CloudFormation einzuschränken oder zuzulassen.

Deployment Manager

Der Deployment Manager verwendet drei Dateitypen zum Definieren einer Bereitstellung:

  • Eine Konfigurationsdatei, mit der die Struktur der Bereitstellung definiert und die zu implementierenden Ressourcen konfiguriert werden. Diese Datei ist in YAML geschrieben. Sie können diese Datei als eigenständige Konfiguration für Ihre Bereitstellung verwenden oder mit importierten Vorlagendateien kombinieren, was noch mehr Flexibilität bietet.
  • Vorlagendateien – zusammensetzbare, wiederverwendbare Ressourcendefinitionen. Vorlagendateien werden in Jinja 2.7.3 oder Python 2.7 geschrieben. Sie können Schleifen hinzufügen, um mehrere Instanzen derselben Ressource zu erstellen, ohne jede Instanz explizit deklarieren zu müssen.
  • Schemadateien, in denen die Regelsätze definiert werden, die eine Konfigurationsdatei erfüllen muss, um eine bestimmte Vorlage verwenden zu können.

Sie übergeben die Konfigurationsdatei (durch die alle darin referenzierten Vorlagen erweitert werden) über das gcloud-Befehlszeilentool oder die API an den Deployment Manager-Dienst. Sie können vordefinierte Konfigurationen auch mit Google Cloud Marketplace starten.

Standardmäßig verwendet der Deployment Manager die Anmeldedaten des GCP API-Dienstkontos zur Authentifizierung bei anderen APIs. Sie müssen dem Nutzer zur Verwendung des Deployment Managers die entsprechenden Berechtigungen erteilen. Sie können vordefinierte IAM-Rollen verwenden, um die Berechtigungen entsprechend zu beschränken. Mit dem Deployment Manager können Sie das Erstellen der Projekte selbst sowie aller in den Projekten enthaltenen Ressourcen automatisieren.

Eine Deployment Manager-Konfigurationsdatei besteht aus folgenden Abschnitten:

imports:
  - path: network.jinja
resources:
- name: network
  type: network.jinja
  properties:
    region: us-central1
    subnets:
      - range: 10.177.0.0/17
        name: web
      - range: 10.177.128.0/17
        name: data
- name: web-instance
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

Die obige Google Cloud-Beispielkonfiguration besteht aus den folgenden Teilen:

Imports: Hier wird der Pfad zu zusammensetzbaren Vorlagen angegeben, die im Rahmen der tatsächlichen Bereitstellung einbezogen werden. Dies ist optional, denn möglicherweise haben Sie eine einfache Bereitstellung, bei der Sie keine Konfiguration mit einzelnen Ressourcen in zusammengesetzten Vorlagendateien erstellen müssen.

Ressourcen Dies ist eine Liste der Ressourcen, die als Teil Ihrer Konfiguration bereitgestellt werden sollen. Dieser Abschnitt ist der einzige, der für eine Konfiguration zwingend vorhanden sein muss. Jede Ressource wird durch folgende Elemente definiert:

  • Name: Ein Name, den Sie für diese Ressource festlegen. Im obigen Beispiel liegen zwei Ressourcen namens network und web-instance vor.
  • Typ: Gibt den Basistyp der Ressource an. Das Beispiel zeigt zwei Typen von Ressourcen. Die web-instance ist vom Typ compute.v1.instance. Die zweite Ressource bezieht sich auf die Importdatei, die im Bereich imports der Konfigurationsdatei deklariert wird. Im Beispiel handelt es sich um einen Jinja-Dateityp, aber Sie können auch Python-Dateien importieren.
  • Attribute: Dies sind die Attribute, die einer Ressource zugeordnet sind. Die Ressource namens web-instance definiert eine Compute Engine-Instanz vom Maschinentyp f1-micro,, mit einem nichtflüchtigen Speicher, der beim Löschen der Instanz automatisch gelöscht werden kann. Die Instanz soll in der Region us-central1-f bereitgestellt werden. Die zweite Ressource wird in einer separaten Vorlagendatei namens network.jinja definiert. Die Attributwerte für diese Ressource werden in der Konfigurationsdatei definiert. Die Werte werden an die eigentliche Vorlagendatei übergeben. Diese Zusammensetzbarkeit erleichtert die Erstellung komplexer Bereitstellungen mit wiederverwendbaren Ressourcendefinitionen. Die Werte werden über die Konfigurationsdateien übergeben. Sie könnten beispielsweise mit ein und derselben Vorlagendatei weitere Subnetze mit unterschiedlichen IP-Bereichen und -Namen erstellen.

Eine Konfigurationsdatei kann auch Ausgaben und Metadaten enthalten.

In einer Schemadatei wird ein Satz von Regeln für die Verwendung einer Vorlage definiert. Wenn Sie die Regeln in einem einzelnen Schema definieren, können Ihre Nutzer mit den von Ihnen geschriebenen Vorlagen interagieren. Die Nutzer können die Schemadatei verwenden, ohne sich die Vorlagen ansehen zu müssen, die eine Konfiguration bilden, und ohne herauszufinden, welche Attribute festgelegt werden müssen und für welche es Standardwerte gibt. Weitere Informationen zu Schemadateien finden Sie in der Deployment Manager-Dokumentation.

In der Beispielvorlage wird ein öffentliches Image zum Erstellen der Instanz verwendet. GCP verfolgt eine globale Herangehensweise. Wenn Sie einen Image-Typ zum Starten einer Instanz auswählen, müssen Sie nicht wie bei AWS CloudFormation eine Zuordnung zum Image-Typ pro Region herstellen. Bei der GCP deklarieren Sie den Maschinentyp und das Quell-Image. Das Quell-Image ist für alle Projekte verfügbar.

Zusammensetzung und Wiederverwendung

Sowohl unter AWS CloudFormation als auch beim Google Cloud Deployment Manager ist es empfehlenswert, eigene Stapel oder Bereitstellungen zu erstellen und Stapel oder Bereitstellungen wiederzuverwenden.

AWS CloudFormation

AWS CloudFormation basiert auf dem Konzept verschachtelter Stapel. Mit verschachtelten Stapeln können Sie eine Vorlage für die Ressourcen erstellen, die Sie wiederverwenden möchten. Sie speichern die Vorlage, die Sie von der Mastervorlage aus aufrufen möchten, in einem S3-Bucket und verwenden den Typ AWS::CloudFormation::Stack. Sie übergeben die S3-URL der Vorlage als Attribut.

Sie können Parameter verwenden, um eine Vorlage jedes Mal beim Erstellen eines Stapels einfach anzupassen. Sie können intrinsische Funktionen mit Parametern verwenden, um bedingte Ressourcen zu erstellen.

Mit Ausgaben können Sie einen Wert über die dem Wert zugewiesene logische ID exportieren und dadurch an anderer Stelle verwenden. Zum Beispiel können Sie die Namen von Load-Balancern und S3-Buckets exportieren, Werte in andere Stapel importieren und die Werte in der Konsole anzeigen.

In CloudFormation werden Ressourcen parallel erstellt und es wird festgelegt, welche Ressourcen parallel bereitgestellt werden können. Sie müssen jedoch möglicherweise die Erstellungsrichtlinie und die DependsOn-Attribute verwenden, um die Reihenfolge zu steuern, in der Ressourcen erstellt werden. Bei der Bereitstellung müssen beispielsweise vielleicht EBS-Volumes erstellt werden, bevor die Instanz erstellt wird, die die Volumes verwendet.

Sie können benutzerdefinierte Ressourcen verwenden, um Nicht-AWS-Ressourcen in Ihren CloudFormation-Stapel einzubeziehen. Geben Sie im Bereich Properties der Vorlage ein Diensttoken an, um eine benutzerdefinierte Ressource zu implementieren. Das Diensttoken legt fest, wohin CloudFormation Anforderungen senden soll.

Google Cloud Deployment Manager

Mit dem Deployment Manager können Sie Vorlagen in Ihre Konfigurationsdatei importieren. In der import-Anweisung geben Sie den Pfad zu den Vorlagen an, die lokal, in einem Cloud Storage-Bucket oder unter einer öffentlich zugänglichen URL wie GitHub gespeichert sein können. So können Sie Vorlagen als Teil Ihrer Konfiguration skalieren und wiederverwenden.

Durch die Übergabe von Variablen können Sie Deployment Manager-Vorlagen anpassen. Mit dem Deployment Manager können zwei Arten von Variablen verwendet werden: Vorlagenvariablen und Umgebungsvariablen. Mit Vorlagenvariablen definieren Sie den anpassbaren Wert in der Konfigurationsdatei und leiten ihn an die Vorlagendateien weiter. Umgebungsvariablen werden vordefiniert und automatisch zugewiesen. Umgebungsvariablen sind für Elemente vorgesehen, die nicht direkt mit bereitzustellenden Ressourcen verknüpft sind, z. B. Projekt-IDs und Bereitstellungsnamen.

Sowohl in Jinja als auch in Python können Sie die systemeigenen Bedingungen und Schleifenfunktionen nutzen.

Der Deployment Manager basiert auf dem Konzept der Vorlagenmodule. Sie können Vorlagenmodule verwenden, um Vorlagen-Snippets einzubeziehen, die in mehreren Vorlagen verwendet werden können. Sie können beispielsweise ein Vorlagenmodul verwenden, um Instanznamen immer entsprechend ihrer Umgebung und Funktion zu erzeugen.

Im Deployment Manager werden alle Ressourcen parallel erstellt. Durch Verweise können Sie die Reihenfolge erzwingen, in der Ressourcen erstellt werden. Falls sich eine Instanz beispielsweise auf ein neues Netzwerk in einer Konfiguration bezieht, können Sie dafür sorgen, dass der Deployment Manager immer zuerst das Netzwerk und dann die Instanz erstellt, unabhängig davon, an welcher Stelle in der Konfigurationsdatei das Netzwerk deklariert wird.

Ausgaben im Deployment Manager sind dafür da, Schlüsselattribute von Ressourcen so freizugeben, dass andere Vorlagen sie einfach nutzen können oder sie in der Konfiguration verfügbar gemacht werden können. Ausgaben werden als Schlüssel/Wert-Paare deklariert und können aus einem statischen String, einem Verweis auf ein Attribut, einer Vorlagenvariablen oder einer Umgebungsvariablen bestehen.

Wenn die von Google Cloud unterstützten Typen nicht Ihren Anforderungen entsprechen, können Sie einen Typanbieter und somit zusätzliche Typen erstellen, die Sie beim Deployment Manager registrieren können. Zum Erstellen eines Typanbieters wird ein API-Deskriptordokument benötigt. Dies kann eine OpenAPI-Spezifikation oder ein Google Discovery-Dokument sein. Wenn Sie einen Typanbieter erstellen und registrieren, werden alle Ressourcen, die von der API bereitgestellt und von einer RESTful-Schnittstelle mit CRUD-Operationen (Create, Read, Update, Delete) unterstützt werden, als Typen in Ihrer Bereitstellung angezeigt und können von Ihnen verwendet werden.

Sie können die Basistypen erweitern, um einen zusammengesetzten Typ zu erstellen. Ein zusammengesetzter Typ ist eine Kombination mehrerer Basistypen, die zur Zusammenarbeit konfiguriert werden. Beispiel: Eine verwaltete Instanzgruppe mit Load-Balancing des Netzwerks ist ein zusammengesetzter Typ. Der Load-Balancer des Netzwerks erfordert mehrere Google Cloud-Ressourcen und eine gewisse Abstimmung der Ressourcen durch Konfiguration. Sie können diese Ressourcen in einer Konfiguration einmalig einrichten und diesen Typ dann beim Deployment Manager registrieren.

Metadaten, Hilfsskripts und Startskripts

Mit AWS CloudFormation können Sie eine Reihe von Python-Skripts verwenden und damit Dienste starten und Software auf EC2-Instanzen installieren. Die Skripts sind in einem Repository verfügbar oder auf einem Amazon Linux AMI installiert. Sie können sie aus Ihren Vorlagen heraus aufrufen. Mit dem Attribut metadata können Sie Ihren Instanzen Metadaten hinzufügen oder Metadaten abrufen.

Mit dem GCP Deployment Manager können Sie Startskripts verwenden oder Metadaten Ihren VM-Instanzen in Ihrer Bereitstellung hinzufügen, indem Sie die Metadaten in Ihrer Vorlage oder Konfiguration angeben. Der Metadatenschlüssel für Ihr Startskript muss startup-script sein und der Wert ist der Inhalt Ihres Startskripts.

Der folgende Codeausschnitt zeigt, wie es gemacht wird:

resources:
- name: my-first-vm-template
  type: compute.v1.instance
  properties:
   zone: us-central1-f
   machineType:
   ...[snip]...
   metadata:
     items:
     - key: startup-script
       value: "STARTUP-SCRIPT-CONTENTS"

Stapel und Bereitstellungen aktualisieren

AWS CloudFormation

Sie können CloudFormation-Stapel aktualisieren, indem Sie neue Parameterwerte oder aktualisierte Vorlagen übergeben. Sie können Änderungssätze verwenden, um zu sehen, welche Stapeleinstellungen und Ressourcen sich ändern, bevor Sie die Änderungen anwenden.

Cloud Deployment Manager

Beim Deployment Manager können Sie ebenfalls Bereitstellungen aktualisieren und potenzielle Änderungen in der Vorschau ansehen, um die Auswirkungen Ihrer Änderungen zu beurteilen. Der Deployment Manager instanziiert keine tatsächlichen Ressourcen bei der Vorschau einer Konfiguration. Stattdessen wird die vollständige Konfiguration eingeblendet und es werden Shell-Ressourcen erstellt. So haben Sie Gelegenheit, sich die Bereitstellung anzusehen, bevor Sie sie übernehmen.

Der Deployment Manager bietet außerdem Richtlinien, die Sie beim Aktualisieren einer Bereitstellung verwenden können, um zu steuern, wie im Deployment Manager Aktualisierungen verwaltet werden. Einige Ressourcen können nicht geändert werden und haben möglicherweise keine Aktualisierungsmethode. Wie bei AWS CloudFormation sollten Sie sich die API-Methoden für die Ressource ansehen, um die Auswirkungen von Aktualisierungen zu verstehen.

Sie können sich auch Manifeste ansehen, bevor Sie Aktualisierungen vornehmen, um zu verstehen, wie eine Bereitstellung tatsächlich aussieht. Dies können Sie über die Befehlszeilenschnittstelle oder die Konsole tun.

Kosten

Für AWS CloudFormation oder den Google Cloud Deployment Manager fallen keine Kosten an. In beiden Fällen werden Ihnen nur die Ressourcen berechnet, die Sie auch starten.

Weitere Informationen

Weitere Artikel zur Google Cloud Platform für AWS-Experten: