Informationen zu wiederverwendbaren Vorlagen

Bei der Entwicklung einer Anwendung benötigen Sie höchstwahrscheinlich komplexe Architekturen. Damit Sie Ihre Bereitstellung einfacher replizieren und Probleme leichter beheben können, empfehlen wir, Ihre Konfiguration in Vorlagen aufzuteilen.

Eine Vorlage ist eine separate Datei, mit der eine Reihe von Ressourcen definiert wird. Sie können Vorlagen in verschiedenen Bereitstellungen wiederverwenden, wodurch bei komplexen Bereitstellungen für Konsistenz gesorgt wird.

Zur Erstellung von Vorlagen für Deployment Manager können Sie Python oder Jinja2 verwenden. Wir empfehlen die Verwendung von Python-Vorlagen, da Python mehr Flexibilität und mehr Features für das Skalieren Ihrer Anwendung bietet.

Python-Vorlagen

Wenn Sie Vorlagen in Python schreiben, müssen diese folgende Anforderungen erfüllen:

  • Die Vorlage muss in Python 3.x geschrieben sein.

  • Die Vorlage muss eine Methode mit dem Namen GenerateConfig(context) oder generate_config(context) definieren. Wenn Sie beide Methodennamen in derselben Vorlage verwenden, hat die Methode generate_config() Vorrang.

    Das context-Objekt enthält Metadaten über die Bereitstellung und Ihre Umgebung, z. B. den Namen der Bereitstellung, das aktuelle Projekt usw. Diese implementierungsspezifischen Variablen werden in späteren Schritten verwendet.

  • Die Methode muss ein Python-Wörterbuch zurückgeben.

Beispielvorlagen untersuchen

Öffnen Sie vm-template.py im Beispiel-Repository:

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

nano vm-template.py  # use your preferred text editor

Diese Vorlage definiert die erste virtuelle Maschine (VM) aus den vorherigen Beispielen:

# 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."""

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


def GenerateConfig(unused_context):
  """Creates the first virtual machine."""

  resources = [{
      'name': 'the-first-vm',
      'type': 'compute.v1.instance',
      'properties': {
          'zone': 'us-central1-f',
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/MY_PROJECT',
                                  '/zones/us-central1-f/',
                                  'machineTypes/f1-micro']),
          '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.a-new-network.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

Öffnen Sie die zweite Vorlage, vm-template-2.py, die die zweite VM definiert:

# 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."""

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


def GenerateConfig(unused_context):
  """Creates the second virtual machine."""

  resources = [{
      'name': 'the-second-vm',
      'type': 'compute.v1.instance',
      'properties': {
          'zone': 'us-central1-f',
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/MY_PROJECT',
                                  '/zones/us-central1-f/',
                                  'machineTypes/g1-small']),
          '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.a-new-network.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

Ersetzen Sie in beiden Vorlagen MY_PROJECT durch Ihre Projekt-ID.

Vorlagen importieren

Nach der Erstellung von Vorlagen müssen Sie diese in Ihre Konfiguration importieren. Öffnen Sie die neue two-vms.yaml:

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

nano two-vms.yaml  # use your preferred text editor

Diese Konfigurationsdatei enthält einen neuen imports-Abschnitt, der die beiden VM-Vorlagen vm-template.py und vm-template-2.py aufruft:

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

imports:
- path: vm-template.py
- path: vm-template-2.py

# In the resources section below, the properties of the resources are replaced
# with the names of the templates.
resources:
- name: vm-1
  type: vm-template.py
- name: vm-2
  type: vm-template-2.py
- name: a-new-network
  type: compute.v1.network
  properties:
    routingConfig:
      routingMode: REGIONAL
    autoCreateSubnetworks: true

Hinweis zu Ressourcennamen

Wenn Sie eine Vorlage verwenden, werden die Namen Ihrer Ressourcen nicht mit dem Namen in der Konfigurationsdatei definiert, sondern mit dem Feld name in der Vorlage.

In diesem Fall werden die VM-Instanzen beispielsweise mit den Namen in den Vorlagen (the-first-vm und the-second-vm) erstellt. Die in der Konfiguration definierten Werte vm-1 und vm-2 werden verwendet, um eine Instantiierung der Vorlage zu benennen, sind jedoch keine Ressourcennamen.

Konfiguration speichern und bereitstellen

Führen Sie den folgenden Befehl aus, um die Konfiguration bereitzustellen:

gcloud deployment-manager deployments create deployment-with-templates --config two-vms.yaml

Führen Sie den folgenden Befehl aus, um sich Ihre Bereitstellung anzusehen:

gcloud deployment-manager deployments describe deployment-with-templates

Nächstes Thema: Verwendung mehrerer Vorlagen

Im nächsten Schritt kombinieren Sie Vorlagen, sodass Ihre Konfiguration nur eine Vorlage aufruft, um alle Ihre Ressourcen bereitzustellen.

Bereitstellung löschen

Bevor Sie fortfahren, sollten Sie die Bereitstellung löschen, um Kosten zu vermeiden. Diese Bereitstellung benötigen Sie für den nächsten Schritt nicht. Führen Sie den folgenden Befehl aus, um die Bereitstellung zu löschen:

gcloud deployment-manager deployments delete deployment-with-templates