Ein Startskript ist eine Datei, die während des Startvorgangs einer VM-Instanz Aufgaben ausführt. Startskripts können für alle VMs in einem Projekt oder für eine einzelne VM gelten. Durch Metadaten auf VM-Ebene angegebene Startskripts überschreiben von Metadaten auf Projektebene angegebene Startskripts. Startskripts werden nur ausgeführt, wenn ein Netzwerk verfügbar ist. In diesem Dokument wird beschrieben, wie Startskripts für Linux-VM-Instanzen verwendet werden. Informationen zum Hinzufügen eines Startskripts auf Projektebene finden Sie unter gcloud compute project-info add-metadata
.
Für Linux-Startskripts können Sie Bash oder Nicht-Bash-Dateien verwenden. Wenn Sie eine Nicht-Bash-Datei verwenden möchten, geben Sie den Interpreter durch Hinzufügen eines #!
oben in der Datei an. Wenn Sie beispielsweise ein Python 3-Startskript verwenden möchten, fügen Sie oben in der Datei #! /usr/bin/python3
ein.
Wenn Sie mit einem der Verfahren in diesem Dokument ein Startskript angeben, führt Compute Engine folgende Schritte aus:
Kopiert das Startskript auf die VM
Legt die Ausführungsberechtigungen für das Startskript fest
Führt das Startskript als
root
-Nutzer aus, wenn die VM bootet
Informationen zu den verschiedenen Aufgaben in Bezug auf Startskripts und wann die Ausführung der jeweiligen Aufgaben stattfinden soll finden Sie in der Übersicht.
Hinweise
- Lesen Sie die Übersicht über Startskripts.
- Metadatenserverinformationen
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich wie folgt bei Compute Engine authentifizieren.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
Wählen Sie für Bootlaufwerk die Option Ändern und dann ein Linux-Betriebssystem aus.
Maximieren Sie den Abschnitt Erweiterte Optionen und tun Sie Folgendes:
- Maximieren Sie den Bereich Verwaltung.
Fügen Sie im Abschnitt Automatisierung folgendes Startskript hinzu:
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF
Klicken Sie auf Erstellen.
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf den Namen der VM.
Klicken Sie auf Bearbeiten.
Fügen Sie unter Automatisierung den Inhalt Ihres Startskripts hinzu.
VM_NAME: der Name der VM
ZONE: Zone der VM
PROJECT_ID: die Projekt-ID
ZONE ist die Zone, in der die VM erstellt werden soll.
Rufen Sie den Wert
tags.fingerprint
der VM mit der Methodeinstances.get
ab.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Dabei gilt:
PROJECT_ID: die Projekt-ID
ZONE: Zone der VM
VM_NAME: die Zone der VM
Übergeben Sie das Startskript mithilfe des Werts
fingerprint
zusammen mit dem Metadatenschlüssel und dem Wert für das Startskript in einem Aufruf der Methodeinstances.setMetadata
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ], ... }
Dabei gilt:
PROJECT_ID: die Projekt-ID
ZONE: Zone der VM
VM_NAME: die Zone der VM
FINGERPRINT: Der Wert für
tags.fingerprint
, der mit der Methodeinstances.get
abgerufen wurde
Erstellen Sie eine lokale Datei zum Speichern des Startskripts.
Notieren Sie sich den relativen Pfad von der gcloud CLI zum Startskript.
Fügen Sie der Datei das folgende Startskript hinzu:
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from a local file.</p></body></html> EOF
VM_NAME: Der Name der VM
FILE_PATH: der relative Pfad zur Startskriptdatei
VM_NAME: der Name der VM
ZONE: Zone der VM
FILE_PATH: der relative Pfad zur Startskriptdatei
Erstellen Sie eine Datei, in der das Startskript gespeichert wird. In diesem Beispiel wird eine Bash-Datei (
.sh
) verwendet.Fügen Sie Folgendes zur Bash-Datei hinzu, die Apache installiert und eine einfache Webseite erstellt:
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from Cloud Storage.</p></body></html> EOF
Standardmäßig können Projektinhaber und Projektbearbeiter auf Cloud Storage-Dateien im selben Projekt zugreifen, außer es gibt explizite Zugriffssteuerungen, die dies verhindern.
Wenn der Cloud Storage-Bucket oder das Cloud Storage-Objekt weniger sicher ist als Metadaten, besteht ein Risiko der Rechteausweitung, wenn das Startskript geändert wird und die VM neu gestartet wird. Dies liegt daran, dass das Startskript nach dem Neustart der VM als
root
ausgeführt wird und dann mit den Berechtigungen des angehängten Dienstkontos auf andere Ressourcen zugreifen kann.- Container-Optimized OS bietet nur begrenzte oder keine Unterstützung für einige Features darunter das
gsutil
-Tool. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.
Geben Sie die VM-Details an.
Wählen Sie für Bootlaufwerk die Option Ändern und dann ein Linux-Betriebssystem aus.
Wählen Sie im Abschnitt Identität und API-Zugriff ein Dienstkonto mit der Rolle Storage-Objekt-Betrachter (
roles/storage.objectViewer
) aus.Maximieren Sie den Abschnitt Erweiterte Optionen und gehen Sie dann so vor:
- Maximieren Sie den Bereich Verwaltung.
Fügen Sie im Abschnitt Metadaten Werte für Folgendes hinzu:
Key (Schlüssel): Metadatenschlüssel Legen Sie dafür
startup-script-url
fest, um ein Startskript aus Cloud Storage hinzuzufügen.Wert: Der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
Dabei gilt:
- BUCKET ist der Name des Buckets, der die Startskriptdatei enthält.
- FILE: Der Name der Startskriptdatei.
- Authentifizierte URL:
Klicken Sie auf Erstellen, um die VM zu erstellen.
Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.
Klicken Sie auf den Namen der VM.
Klicken Sie auf Bearbeiten.
Fügen Sie unter Metadaten die folgenden Werte hinzu:
Key:
startup-script-url
Wert: Der Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
- Authentifizierte URL:
VM_NAME: der Name der VM.
CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
- Authentifizierte URL:
VM_NAME ist der Name der VM.
ZONE: Zone der VM.
CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
- Authentifizierte URL:
PROJECT_ID: die Projekt-ID.
ZONE ist die Zone, in der die neue VM erstellt werden soll.
CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
- Authentifizierte URL:
Rufen Sie den Wert
tags.fingerprint
der VM mit der Methodeinstances.get
ab.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Dabei gilt:
PROJECT_ID: die Projekt-ID
ZONE: Zone der VM
VM_NAME: die Zone der VM
Übergeben Sie das Startskript mithilfe des Werts
fingerprint
zusammen mit dem Metadatenschlüssel und dem Wert für das Startskript in einem Aufruf der Methodeinstances.setMetadata
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ], ... }
Dabei gilt:
PROJECT_ID: die Projekt-ID.
ZONE: Zone der VM.
VM_NAME: Die Zone der VM.
FINGERPRINT: Der mit der Methode
instances.get
abgerufene Werttags.fingerprint
.CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:
- Authentifizierte URL:
https://storage.googleapis.com/BUCKET/FILE
- gsutil-URI:
gs://BUCKET/FILE
- Authentifizierte URL:
Erstellen Sie ein Startskript, das den Wert eines Metadatenschlüssels abfragt. Das folgende Bash-Datei-Startskript (
.sh
) fragt beispielsweise den Wert des Metadatenschlüsselsfoo
ab.#! /bin/bash METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google") apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html> EOF
Legen Sie den Wert des Metadatenschlüssels
foo
beim Erstellen einer VM mit dem folgendengcloud compute instances create
-Befehl fest. In diesem Beispiel wird das Startskript von einer lokalen Datei an die VM übergeben.gcloud
gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH \ --metadata=foo=bar
Dabei gilt:
VM_NAME: Der Name der VM
FILE_PATH: der relative Pfad zur Startskriptdatei
Weitere Informationen zum Angeben eines Metadaten-Schlüssel/Wert-Paars finden Sie unter Benutzerdefinierte Metadaten festlegen.
Rufen Sie von Ihrer lokalen Workstation aus die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript den Wert von
foo
ausgibt. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.Führen Sie folgenden Befehl aus:
sudo google_metadata_script_runner startup
Verbindung zur Instanz herstellen und den folgenden Befehl ausführen:
sudo journalctl -u google-startup-scripts.service
Ausgabe über den seriellen Port 1 in der Google Cloud Console ansehen und auf
google_metadata_script_runner
-Ereignisse prüfen.Weitere Informationen zur Fehlerbehebung bei Startskripts.
Weitere Informationen zum Hinzufügen eines Shutdown-Skripts.
Weitere Informationen zum Speichern und Abrufen von Metadaten
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Metadatenschlüssel für Linux-Startskripts
Ein Startskript wird von einem durch einen Metadatenschlüssel angegebenen Speicherort an eine VM übergeben. Ein Metadatenschlüssel gibt an, ob das Startskript lokal, in Cloud Storage gespeichert oder direkt an die VM übergeben wird. Der verwendete Metadatenschlüssel kann auch von der Größe des Startskripts abhängen.
Die folgende Tabelle enthält die Metadatenschlüssel, die Sie für Linux-Startskripts verwenden können. Außerdem finden Sie Informationen dazu, welcher Schlüssel basierend auf dem Speicherort und der Größe des Startskripts verwendet werden sollte.
Metadatenschlüssel Nutzen für startup-script
Übergabe eines Bash- oder Nicht-Bash-Startskripts, das lokal gespeichert oder direkt hinzugefügt wird und bis zu 256 KB groß ist startup-script-url
Übergabe eines Bash- oder Nicht-Bash-Startskripts, das in Cloud Storage gespeichert ist und größer als 256 KB groß ist. Der hier eingegebene String wird unverändert ausgeführt, um gsutil
auszuführen. Wenn Ihrestartup-script-url
Leerzeichen enthält, ersetzen Sie die Leerzeichen nicht durch%20
und fügen Sie dem Stringstartup-script-url
keine doppelten Anführungszeichen (""
) hinzu.Reihenfolge der Ausführung von Linux-Startskripts
Sie können mehrere Startskripts verwenden. Startskripts oder direkt hinzugefügte Startskripts werden vor in Cloud Storage gespeicherten Startskripts ausgeführt. Die folgende Tabelle zeigt auf der Grundlage des Metadatenschlüssels die Reihenfolge der Ausführung von Linux-Startskripts.
Metadatenschlüssel Ausführungsreihenfolg startup-script
Als Erstes bei jedem Start nach dem ersten Start startup-script-url
Als Zweites während jedem Start nach dem ersten Start Linux-Startskript direkt übergeben
Sie können den Inhalt eines Startskripts beim Erstellen einer VM direkt einer VM hinzufügen. Die folgenden Verfahren zeigen, wie Sie eine VM mit einem Startskript erstellen, das Apache installiert und eine einfache Webseite erstellt.
Console
Linux-Startskript direkt an eine neue VM übergeben
Linux-Startskript direkt an eine vorhandene VM übergeben
Startskript überprüfen
Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
gcloud
Linux-Startskript direkt an eine neue VM übergeben
Übergeben Sie den Inhalt eines Startskripts beim Erstellen von diesem mit dem folgenden
gcloud compute instances create
-Befehl direkt an eine VM.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Ersetzen Sie VM_NAME durch den Namen der VM.
Linux-Startskript direkt an eine vorhandene VM übergeben
Fügen Sie das Startskript mit dem folgenden
gcloud compute instances add-metadata
-Befehl direkt einer vorhandenen VM hinzu:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Dabei gilt:
Startskript überprüfen
Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
REST
Linux-Startskript direkt an eine neue VM übergeben
Übergeben Sie den Inhalt eines Startskripts direkt an die VM, wenn Sie es erstellen, mit der folgenden
instances.insert
-Methode.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ] }, ... }
Dabei gilt:
Linux-Startskript direkt an eine vorhandene VM übergeben
Startskript überprüfen
Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
Linux-Startskript aus einer lokalen Datei übergeben
Sie können ein Startskript in einer lokalen Datei auf Ihrer Workstation speichern und die lokale Datei beim Erstellen als Metadaten an eine VM übergeben. Auf VMs gespeicherte Dateien können nicht als Startskripts verwendet werden.
Bevor Sie ein Linux-Startskript von einer lokalen Datei an eine VM übergeben, gehen Sie so vor:
gcloud
Linux-Startskript aus einer lokalen Datei an eine neue VM übergeben
Erstellen Sie eine VM und übergeben Sie den Inhalt einer lokalen Datei, die als Startskript verwendet werden soll. Verwenden Sie dazu den Befehl
gcloud compute instances create
mit dem Flag--metadata-from-file
.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH
Dabei gilt:
Linux-Startskript aus einer lokalen Datei an eine vorhandene VM übergeben
Übergeben Sie ein Startskript mit dem folgenden
gcloud compute instances add-metadata
-Befehl von einer lokalen Datei an eine vorhandene VM:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata-from-file startup-script=FILE_PATH
Dabei gilt:
Startskript überprüfen
Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
Linux-Startskript aus Cloud Storage übergeben
Sie können ein Startskript in Cloud Storage speichern und es beim Erstellen an eine VM übergeben. Nachdem Sie Cloud Storage ein Startskript hinzugefügt haben, haben Sie eine URL, mit der Sie beim Erstellen einer VM auf das Startskript verweisen können.
Führen Sie die folgenden Schritte aus, bevor Sie ein Startskript aus einem Cloud Storage-Bucket hinzufügen:
Auswirkungen auf die Sicherheit
Beschränkungen
Console
In Cloud Storage gespeichertes Startskript an eine neue VM übergeben
In Cloud Storage gespeichertes Startskript an eine vorhandene VM übergeben
Startskript überprüfen
Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
gcloud
In Cloud Storage gespeichertes Startskript an eine neue VM übergeben
Übergeben Sie ein in Cloud Storage gespeichertes Startskript an eine VM, wenn Sie es mit dem folgenden
gcloud compute instances create
-Befehl erstellen. Verwenden Sie für den Wert des Flags--scope
storage-ro
, damit die VM auf Cloud Storage zugreifen kann.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --scopes=storage-ro \ --metadata=startup-script-url=CLOUD_STORAGE_URL
Dabei gilt:
In Cloud Storage gespeichertes Startskript an eine vorhandene VM übergeben
Übergeben Sie ein Startskript, das in Cloud Storage gespeichert ist, mit dem folgenden
gcloud compute instances add-metadata
-Befehl an eine vorhandene VM:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata startup-script-url=CLOUD_STORAGE_URL
Dabei gilt:
Startskript überprüfen
Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
REST
In Cloud Storage gespeichertes Startskript an eine neue VM übergeben
Geben Sie das Startskript, das in Cloud Storage gespeichert ist, beim Erstellen an eine VM weiter, indem Sie die folgende
instances.insert
-Methode verwenden: Fügen Sie dem Feldscopes
den Werthttps://www.googleapis.com/auth/devstorage.read_only
hinzu, damit die VM auf Cloud Storage zugreifen kann.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "metadata": { "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ] }, ... }
Dabei gilt:
In Cloud Storage gespeichertes Startskript an eine vorhandene VM übergeben
Startskript überprüfen
Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Möglicherweise müssen Sie etwa eine Minute warten, bis das Beispiel-Startskript ausgeführt wurde.
Auf Metadaten aus einem Linux-Startskript zugreifen
In einem Startskript können Sie auf Metadatenwerte zugreifen. Sie können beispielsweise dasselbe Skript für mehrere VMs verwenden und jedes Skript einzeln parametrisieren. Dazu übergeben Sie verschiedene Metadatenwerte an jede VM.
So greifen Sie auf einen benutzerdefinierten Metadatenwert von einem Startskript zu:
Linux-Startskript noch einmal ausführen
Führen Sie das Startskript so aus:
Ausgabe eines Linux-Startskripts ansehen
Sie können die Ausgabe eines Linux-Startskripts aufrufen, indem Sie eines der folgenden Dinge tun:
Nächste Schritte
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-10-14 (UTC).
-