gcloud-Kommandozeilenbefehle in Skripts verwenden

Sie können gcloud-Kommandozeilenbefehle nicht nur über die Kommandozeile, sondern auch über Skripts oder andere Automatisierungsmethoden ausführen, beispielsweise wenn Sie Jenkins zur Automatisierung von Aufgaben in der Google Cloud Platform verwenden.

Autorisierung

Google Cloud SDK-Tools unterstützen zwei Autorisierungsmethoden:

  • 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 führen Sie die Zugriffsautorisierung und andere gängige Cloud SDK-Einrichtungsschritte 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-Kommandozeilenbefehle auf einer Instanz einer virtuellen Maschine mit Google Compute Engine ausführen, bei der alle Nutzer Zugriff auf root haben.

Verwenden Sie für die Autorisierung über ein Dienstkonto ein vorhandenes Dienstkonto oder erstellen Sie über die Google Cloud Platform Console ein neues. Erstellen Sie in der Tabelle mit den Dienstkonten über die Optionsspalte den zugehörigen privaten Schlüssel als Schlüsseldatei im JSON-Format und laden Sie die Datei herunter.

Führen Sie die Autorisierung mit gcloud auth activate-service-account aus:

    gcloud auth activate-service-account --key-file [KEY_FILE]

Mit dem Befehl gcloud compute ssh können Sie eine SSH-Verbindung zu Ihrer VM-Instanz herstellen und die Authentifizierung durchführen. SSH-Konfigurationsdateien können mit gcloud compute config-ssh konfiguriert werden.

Eine ausführliche Anleitung zur Autorisierung von Cloud SDK-Tools finden Sie in diesem umfassenden Leitfaden.

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-Kommandozeilenbefehlen deaktivieren. Setzen Sie dazu das Attribut disable_prompts in Ihrer Konfiguration auf True oder verwenden Sie das globale Flag --quiet oder -q. 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 --quiet debug targets list

Das Flag --quiet wird gleich am Anfang eingefügt.

Ausgabe bearbeiten

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 keine Aktionen von Meldungen abhängig, die an die Standardfehlerausgabe gesendet werden.

    Diese können sich in zukünftigen Versionen der gcloud-Kommandozeile ändern und die Automatisierung verhindern.

  • 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 solcher Änderungen minimieren. Formatieren Sie dazu die Ausgabe mit dem Flag --format und einer der folgenden Optionen, sodass bestimmte Werte zurückgegeben werden: --format=json|yaml|csv|text|list. Führen Sie für weitere Optionen "$ gcloud topic formats" aus.

    Die Standardausgabe von --format kann mit projections geändert werden. Mithilfe des Flags --filter und eines Ausdrucks kann der Detaillierungsgrad erhöht und nur ein Teil der Werte zurückgegeben werden. 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.

  • 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 mit der Property show_structured_logs Fehler-Logs parsen. Führen Sie für weitere Details "$ gcloud config" aus.

Filter- und Formatierungsbeispiele

Über die folgende Schaltfläche gelangen Sie alternativ zu einer interaktiven Anleitung zur Verwendung der Filter- und Format-Flags:

In Cloud Shell öffnen

Die folgenden Beispiele zeigen gängige Einsatzmöglichkeiten beim Formatieren und Filtern mit gcloud-Kommandozeilenbefehlen:

Instanzen, die in der Zone us-central1-a erstellt wurden, auflisten:

    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 nach der Festlegung der Datumsformatierung auf den Schlüssel "createTime" angewendet.

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:title=zone,status)'

Die im Projekt authentifizierte E-Mail-Adresse des Nutzers auflisten:

    gcloud info --format='value(config.account)'

Skriptbeispiele

Mit diesen Formatierungs- und Filterfunktionen können Sie gcloud-Kommandozeilenbefehle in einem Skript kombinieren, um eingebettete Informationen ohne großen Aufwand zu extrahieren.

Beispiel: Es sollen alle Schlüssel aus sämtlichen Dienstkonten für Ihre Projekte aufgelistet werden. Zu diesem Zweck müssen Sie über alle Projekte hinweg iterieren und für jedes Projekt alle zugehörigen Dienstkonten abrufen. Dann müssen für jedes Dienstkonto alle Schlüssel abgerufen werden. Dies kann wie folgt bewerkstelligt werden:

Als Bash-Skript:

#!/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

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"
      }
  }
}

Häufig muss die Ausgabe zur Verarbeitung geparst werden. Dabei ist es beispielsweise hilfreich, die Informationen zum Dienstkonto in ein Array zu schreiben und die Werte in dem mehrwertigen Feld serviceAccounts.scope() mit CSV-Format zu trennen, wie im folgenden Script gezeigt:

#!/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

Weitere Informationen

Eine detaillierte Anleitung zum Erstellen grundlegender Skripts mit der gcloud-Kommandozeile finden Sie in dieser einführenden Anleitung zur Automatisierung von GCP-Aufgaben.

Komplexere Beispiele zu den Flags filters, formats und projections, die in die gcloud-Kommandozeile zur Ausgabekonfiguration eingebunden sind, finden Sie in diesem Blogbeitrag zum Thema Filtern und Formatieren.

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

Feedback geben zu...

Cloud SDK-Dokumentation