Sie können Befehle der Google Cloud-Befehlszeile nicht nur über die Befehlszeile ausführen, sondern auch in Skripts oder anderen Automatisierungen, z. B. bei der Verwendung von Jenkins zur Automatisierung von Google Cloud-Aufgaben.
Die gcloud-Befehlszeile bietet eine Vielzahl von Tools wie Filtern, Formatieren und das Flag --quiet
, mit dem Sie die Ausgabe effektiv verarbeiten und Aufgaben automatisieren können.
Grundlagen der Skripterstellung mit der gcloud-Befehlszeile
Eine detaillierte Anleitung zum Erstellen einfacher Skripts mit der gcloud-CLI finden Sie unter Skript für gcloud erstellen: Einsteigerleitfaden zum Automatisieren von Google Cloud-Aufgaben.
Autorisierung
Wenn Sie Skripts mit der gcloud-Befehlszeile verwenden, müssen Sie Autorisierungsmethoden in Betracht ziehen. Die gcloud-Befehlszeile bietet zwei Optionen:
- Autorisierung über ein Nutzerkonto
- Autorisierung über ein Dienstkonto
Die Autorisierung über ein Nutzerkonto empfiehlt sich, wenn Sie ein Skript oder eine andere Automatisierung auf einem einzigen Rechner ausführen.
So autorisieren Sie den Zugriff und führen andere gängige Schritte zur Einrichtung der gcloud-Befehlszeile aus:
gcloud init
Die Autorisierung über ein Dienstkonto empfiehlt sich, wenn Sie ein Skript oder eine andere Automatisierung auf mehreren Rechnern in einer Produktionsumgebung bereitstellen. Dies ist auch die empfohlene Autorisierungsmethode, wenn Sie gcloud-Befehlszeilenbefehle auf einer Compute Engine-VM-Instanz ausführen, auf der alle Nutzer Zugriff auf root
haben.
Verwenden Sie für die Autorisierung über ein Dienstkonto ein vorhandenes Dienstkonto oder erstellen Sie ein neues auf der Seite "Dienstkonten":
Zum Erstellen und Herunterladen des zugehörigen privaten Schlüssels als JSON-formatierte Schlüsseldatei wählen Sie im Aktionsmenü des Dienstkontos Schlüssel verwalten aus.
Führen Sie zum Ausführen der Autorisierung gcloud auth activate-service-account
aus:
gcloud auth activate-service-account --key-file [KEY_FILE]
Sie können eine SSH-Verbindung zu Ihrer VM-Instanz herstellen, indem Sie gcloud compute ssh
verwenden. Diese übernimmt die Authentifizierung. SSH-Konfigurationsdateien können mit gcloud compute config-ssh
konfiguriert werden.
Eine ausführliche Anleitung zum Autorisieren von gcloud-Befehlszeilentools finden Sie unter gcloud-CLI autorisieren.
Eingabeaufforderungen deaktivieren
Einige gcloud-Kommandozeilenbefehle sind interaktiv und fordern Nutzer zur Bestätigung eines Vorgangs auf oder erfordern zusätzliche Angaben zu einem eingegebenen Befehl.
Bei der Ausführung von Befehlen in einem Skript oder einer anderen Automatisierung ist dies jedoch in den meisten Fällen nicht zu empfehlen. Sie können Eingabeaufforderungen von gcloud-Befehlszeilenbefehlen deaktivieren, indem Sie das Attribut disable_prompts
in Ihrer Konfiguration auf True
setzen oder Folgendes verwenden: das globale --quiet
- oder -q
-Flag. Die meisten interaktiven Befehle bieten Standardwerte für den Fall, dass eine zusätzliche Bestätigung oder Eingabe erforderlich ist. Wenn Sie Eingabeaufforderungen deaktivieren, werden diese Standardwerte verwendet.
Beispiel:
gcloud debug targets list --quiet
Ausgabe filtern und formatieren
Damit Skripts mit der gcloud-Befehlszeile ausgeführt werden können, ist eine vorhersehbare Ausgabe erforderlich. Hier helfen die Flags --filter
und --format
. Sie sorgen dafür, dass beim Ausführen eines Befehls mit der gcloud-Befehlszeile eine Ausgabe erzeugt wird, die Ihrem Format (z. B. JSON, YAML, CSV und Text) und dem Filter (VM-Namen mit dem Präfix "test") entspricht. ', Erstellungsdatum des Jahres nach 2015 usw.).
Klicken Sie auf folgende Schaltfläche, um eine interaktive Anleitung zur Verwendung des Filters und der Format-Flags zu starten:
Die folgenden Beispiele zeigen gängige Einsatzmöglichkeiten beim Formatieren und Filtern mit gcloud-Befehlen:
Instanzen aufführen, die in der Zone us-central1-a erstellt wurden:
gcloud compute instances list --filter="zone:us-central1-a"
Projekte, in denen die Labels bestimmten Werten entsprechen (z. B. "labels.env" ist "test" und "labels.version" ist "alpha") im JSON-Format auflisten:
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Projekte mit Erstellungsdatum und -zeit nach der lokalen Zeitzone auflisten:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Projekte, die nach einem bestimmten Datum erstellt wurden, im Tabellenformat auflisten:
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Im letzten Beispiel wurde eine Projektion für den Schlüssel verwendet. Der Filter wird auf den Schlüssel createTime
angewendet, nachdem die Datumsformatierung festgelegt wurde.
Kontingente für eine Region in einer verschachtelten Tabelle auflisten:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Globale Kontingente als vereinfachte Liste im CSV-Format ausgeben:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Compute-Instanzressourcen mit Kästchen und Titeln nach Name sortiert im Tabellenformat auflisten:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Die im Projekt authentifizierte E-Mail-Adresse des Nutzers auflisten:
gcloud info --format='value(config.account)'
Weitere komplexere Beispiele zu den Funktionen zur Ausgabekonfiguration, die in die filters
, formats
und projections
-Flags finden Sie in diesem Blogpost zum Filtern und Formatieren.
Best Practices
Wenn Sie möchten, dass ein Skript oder eine andere Automatisierungsmethode auf der Grundlage der Ausgabe eines gcloud-Kommandozeilenbefehls bedingte Aktionen ausführt, achten Sie auf dies:
Machen Sie Aktionen vom Exit-Status von Befehlen abhängig.
Wenn der Exit-Status nicht Null ist, ist ein Fehler aufgetreten und die Ausgabe ist möglicherweise unvollständig, sofern in der Befehlsdokumentation nicht anders angegeben. Ein Beispiel ist ein Befehl zur Erstellung mehrerer Ressourcen, der nur einen Teil der Ressourcen erstellt, diese in der Standardausgabe auflistet und dann den Vorgang mit einem Status ungleich Null beendet. Alternativ können Sie das
show_structured_logs
-Attribut zum Parsen von Fehlerlogs verwenden. Führen Siegcloud config
aus, um weitere Informationen zu erhalten.Machen Sie keine Aktionen von Meldungen abhängig, die an die Standardfehlerausgabe gesendet werden.
Der Wortlaut dieser Nachrichten kann sich in zukünftigen Versionen der gcloud-Befehlszeile ändern und die Automatisierung beeinträchtigen.
Machen Sie keine Aktionen von der Rohausgabe von Meldungen abhängig, die an die Standardausgabe gesendet werden.
Die Standardausgabe für Befehle kann sich in einem zukünftigen Release ändern. Sie können die Auswirkungen dieser Änderungen minimieren. Dazu verwenden Sie das Flag
--format
, um die Ausgabe mit einer der folgenden Optionen zu formatieren:--format=json|yaml|csv|text|list
zum Angeben der Werte, die zurückgegeben werden sollen. Führen Siegcloud topic formats
für weitere Optionen aus.Sie können die Standardausgabe von
--format
mitprojections
ändern. Verwenden Sie für eine genauere Granularität das Flag--filter
, um eine Teilmenge der Werte basierend auf einem Ausdruck zurückzugeben. Sie können dann das Skript auf Basis dieser zurückgegebenen Werte erstellen.Beispiele zum Formatieren und Filtern der Ausgabe finden Sie im folgenden Abschnitt.
Beispielskripte
Mithilfe der Funktionalität von Format und Filter können Sie gcloud-Befehlszeilenbefehle in einem Skript kombinieren, um eingebettete Informationen einfach zu extrahieren.
Schlüssel für alle Dienstkonten Ihrer Projekte auflisten
Die folgenden Beispielskripts listen die Schlüssel auf, die allen Dienstkonten Ihrer Projekte zugeordnet sind:
- Projekte iterieren
- Für jedes Projekt die zugehörigen Dienstkonten abrufen
Für jedes Dienstkonto die zugehörigen Schlüssel abrufen
Bash
#!/bin/bash
for project in $(gcloud projects list --format="value(projectId)")
do
echo "ProjectId: $project"
for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
do
echo " -> Robot $robot"
for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
do
echo " $key"
done
done
done
Windows PowerShell
Oder als Windows PowerShell-Skript:
foreach ($project in gcloud projects list --format="value(projectId)")
{
Write-Host "ProjectId: $project"
foreach ($robot in gcloud iam service-accounts list --project $project --format="value(email)")
{
Write-Host " -> Robot $robot"
foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
{
Write-Host " $key"
}
}
}
Ausgabe für die Verarbeitung parsen
Im folgenden Beispiel wird das Parsen der Ausgabe für die Verarbeitung veranschaulicht. Insbesondere schreibt das Beispielskript die Dienstkontoinformationen in ein Array und trennt die Werte im mehrwertigen CSV-Format serviceAccounts.scope()
:
#!/bin/bash
for scopesInfo in $(
gcloud compute instances list --filter=name:instance-1 \
--format="csv[no-heading](name,id,serviceAccounts[].email.list(),
serviceAccounts[].scopes[].map().list(separator=;))")
do
IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
NAME="${scopesInfoArray[0]}"
ID="${scopesInfoArray[1]}"
EMAIL="${scopesInfoArray[2]}"
SCOPES_LIST="${scopesInfoArray[3]}"
echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
echo ""
IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
for SCOPE in "${scopeListArray[@]}"
do
echo " SCOPE: $SCOPE"
done
done