Metadaten festlegen und Startskripts verwenden

Bei der Bereitstellung komplexerer Konfigurationen haben Sie möglicherweise hunderte oder gar tausende VM-Instanzen. Falls Sie mit Compute Engine vertraut sind, wollen Sie wahrscheinlich Startskripte verwenden, die bei der automatischen Installation oder Konfigurierung Ihrer Instanzen helfen.

Mit Deployment Manager können Sie die gleichen Startskripte ausführen oder Metadaten zu Ihren VM-Instanzen in Ihrer Bereitstellung hinzufügen, indem Sie Metadaten in Ihrer Vorlage oder Konfiguration angeben.

Fügen Sie die Property metadata und die relevanten Metadatenschlüssel und -werte hinzu, um Metadaten oder Startskripte zu Ihrer Vorlage hinzuzufügen. Um beispielsweise ein Startskript festzulegen, muss der Metadatenschlüssel startup-script sein, und der Wert muss dem Inhalt Ihres Startskripts entsprechen.

Eine Vorlage mit einem Startskript sieht so aus:

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"

Fügen wir Ihrer Vorlage ein einfaches Startskript hinzu, dass einen HTTP-Server startet. Schließlich sollte es Ihnen möglich sein, den Server, der auf Ihrer VM-Instanz ausgeführt wird, zu besuchen.

Die VM-Vorlagendatei bearbeiten

Fügen Sie im Abschnitt properties die folgenden Felder zu Ihrer vm-template.[jinja|py]-Datei hinzu.

Jinja

metadata:
  items:
  - key: startup-script
    value: |
      #!/bin/bash
      sudo python -m SimpleHTTPServer 80

Python

'metadata': {
  'items': [{
      'key': 'startup-script',
      'value': ''.join(['#!/bin/bash\n',
                        'python -m SimpleHTTPServer 80'])
  }]
 }

Ihre Vorlage sollte so aussehen:

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
          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',
                                    'python -m SimpleHTTPServer 80'])
              }]
          }
      }
  }]
  return {'resources': resources}

Speichern Sie die Änderungen.

Konfiguration erneut bereitstellen

gcloud deployment-manager deployments create deployment-with-startup-script --config config-with-many-templates.yaml

Ihr Startskript testen

  1. Externe IP von the-first-vm abrufen:

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

  3. Öffnen Sie einen Browser und kopieren Sie die IP-Adresse in die Adressleiste.

Bei Erfolg sollten Sie einen Verzeichniseintrag der Dateien auf Ihrer virtuellen Maschine sehen:

Weitere Informationen über Startskripte erhalten Sie in der Startskripte-Dokumentation.

Ihre Bereitstellung nicht löschen!

Sie sollten diese Bereitstellung, anders als in allen anderen Teilen dieser Anleitung, behalten, da Sie sie für den nächsten Schritt brauchen werden.

Nächster Schritt: Eine Bereitstellung aktualisieren

Weitere Informationen

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

Feedback geben zu...

Cloud Deployment Manager-Dokumentation