In dieser Anleitung erstellen Sie ein Inventar von Cloud Run-Diensten mithilfe der Google Cloud CLI in einem Cloud Run-Dienst. Sie können die in dieser Anleitung erworbenen Kenntnisse auf vorhandene Cloud Operations-Skripts anwenden oder ein Proof of Concept erstellen, bevor Sie mit Clientbibliotheken einen stabileren Dienst erstellen.
Sie können die gcloud CLI wie jedes andere Shell-Skript beispielsweise innerhalb eines Webdienstes verwenden, wie in der Shell-Kurzanleitung beschrieben. In Cloud Run funktionieren beide Tools mit Google Cloud-Diensten, indem sie automatisch mit der Cloud Run-Dienstidentität authentifiziert werden. Alle Berechtigungen, die der Dienstidentität gegeben werden, stehen der gcloud CLI zur Verfügung.
Die gcloud CLI ist dazu geeignet, in so weitreichender Weise Informationen in Google Cloud zu erfassen und Ressourcen zu verwalten, dass die Herausforderung seiner Nutzung in einem Webdienst das Risiko minimiert, dass ein Aufrufer diese Funktionen missbraucht. Ohne Sicherheitsfunktionen könnten Sie Risiken für andere Dienste oder Ressourcen auslösen, die im selben Projekt ausgeführt werden, indem Sie versehentliche oder absichtliche schädliche Aktivitäten zulassen. Folgende Beispiele für diese Risiken gehören dazu:
- Erkennung von IP-Adressen privater virtueller Maschinen ermöglichen
- Zugriff auf private Daten aus einer Datenbank im selben Projekt ermöglichen
- Löschen anderer ausgeführter Dienste ermöglichen
In einer Reihe von Schritten dieser Anleitung wird beschrieben, wie Sie Kontrollmaßnahmen einsetzen, um Risiken zu minimieren, z. B. die Angabe, dass der Befehl gcloud
im Code ausgeführt werden soll statt ihn als Nutzereingabe offen zu lassen.
Das Skript mit dem Befehlszeilentool in einem Cloud Run-Dienst ähnelt der lokalen Verwendung der Befehlszeile. Der Hauptunterschied liegt in den zusätzlichen Einschränkungen, die Sie bei der primären Skriptlogik einfügen sollten.
Ziele
- Mit einem Dockerfile einen benutzerdefinierten Container schreiben und erstellen
- Einen Cloud Run-Dienst schreiben, erstellen und bereitstellen
- gcloud CLI sicher in einem Webdienst verwenden
- Einen Bericht zu Cloud Run-Diensten erstellen und in Cloud Storage speichern
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Installieren und initialisieren Sie die gcloud CLI.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Anleitung benötigen:
-
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor
) -
Cloud Run-Administrator (
roles/run.admin
) -
Create Service Accounts (
roles/iam.serviceAccountCreator
) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) -
Storage-Administrator (
roles/storage.admin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
gcloud-Standardeinstellungen einrichten
So konfigurieren Sie gcloud mit Standardeinstellungen für den Cloud Run-Dienst:
Legen Sie ein Standardprojekt fest:
gcloud config set project PROJECT_ID
Ersetzen Sie PROJECT_ID durch den Namen des Projekts, das Sie für diese Anleitung erstellt haben.
Konfigurieren Sie gcloud für die von Ihnen ausgewählte Region:
gcloud config set run/region REGION
Ersetzen Sie REGION durch die unterstützte Cloud Run-Region Ihrer Wahl.
Cloud Run-Standorte
Cloud Run ist regional. Die Infrastruktur, in der die Cloud Run-Dienste ausgeführt werden, befindet sich demnach in einer bestimmten Region. Aufgrund der Verwaltung durch Google sind die Anwendungen in allen Zonen innerhalb dieser Region redundant verfügbar.
Bei der Auswahl der Region, in der Ihre Cloud Run-Dienste ausgeführt werden, ist vorrangig, dass die Anforderungen hinsichtlich Latenz, Verfügbarkeit oder Langlebigkeit erfüllt werden.
Sie können im Allgemeinen die Region auswählen, die Ihren Nutzern am nächsten liegt, aber Sie sollten den Standort der anderen Google Cloud-Produkte berücksichtigen, die von Ihrem Cloud Run-Dienst verwendet werden.
Die gemeinsame Nutzung von Google Cloud-Produkten an mehreren Standorten kann sich auf die Latenz und die Kosten des Dienstes auswirken.
Cloud Run ist in diesen Regionen verfügbar:
Unterliegt Preisstufe 1
asia-east1
(Taiwan)asia-northeast1
(Tokio)asia-northeast2
(Osaka)europe-north1
(Finnland) Niedriger CO2-Werteurope-southwest1
(Madrid) Niedriger CO2-Ausstoßeurope-west1
(Belgien) Niedriger CO2-Ausstoßeurope-west4
(Niederlande) Niedriger CO2-Ausstoßeurope-west8
(Mailand)europe-west9
(Paris) Niedriger CO2-Ausstoßme-west1
(Tel Aviv)us-central1
(Iowa) Niedriger CO2-Ausstoßus-east1
(South Carolina)us-east4
(Northern Virginia)us-east5
(Columbus)us-south1
(Dallas) Niedriger CO2-Ausstoßus-west1
(Oregon) Niedriger CO2-Ausstoß
Unterliegt Preisstufe 2
africa-south1
(Johannesburg)asia-east2
(Hongkong)asia-northeast3
(Seoul, Südkorea)asia-southeast1
(Singapur)asia-southeast2
(Jakarta)asia-south1
(Mumbai, Indien)asia-south2
(Delhi, Indien)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Warschau, Polen)europe-west10
(Berlin) Niedriger CO2-Ausstoßeurope-west12
(Turin)europe-west2
(London, Vereinigtes Königreich) Niedriger CO2-Ausstoßeurope-west3
(Frankfurt, Deutschland) Niedriger CO2-Ausstoßeurope-west6
(Zürich, Schweiz) Niedriger CO2-Ausstoßme-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal) Niedriger CO2-Ausstoßnorthamerica-northeast2
(Toronto) Niedriger CO2-Ausstoßsouthamerica-east1
(Sao Paulo, Brasilien) Niedriger CO2-Ausstoßsouthamerica-west1
(Santiago, Chile) Niedriger CO2-Ausstoßus-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Wenn Sie bereits einen Cloud Run-Dienst erstellt haben, können Sie dessen Region im Cloud Run-Dashboard der Google Cloud Console aufrufen.
Codebeispiel abrufen
So rufen Sie das gewünschte Codebeispiel ab:
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:
cd cloud-run-samples/gcloud-report/
Code ansehen
Dieser Abschnitt enthält Informationen zu dem abgerufenen Codebeispiel.
Bericht erstellen und in Cloud Storage hochladen
Dieses Shell-Skript erstellt einen Bericht über Cloud Run-Dienste im aktuellen Projekt und in der aktuellen Region und lädt das Ergebnis in Cloud Storage hoch. Es listet Dienste auf, deren Name das angegebene String-search
-Argument enthält.
Das Skript verwendet den Befehl gcloud run services list
,
erweiterte gcloud
-Formatoptionen und den Kopiermodus per gcloud
-Stream-Übertragung.
Dieses Skript kann sicher als Dienst ausgeführt werden, da wiederholte Aufrufe den Bericht ohne weitere kostspielige Abwanderung aktualisieren. Andere Skripts, die die gcloud CLI verwenden, können teurer sein, wenn sie wiederholt aufgerufen werden, wie beispielsweise das Erstellen neuer Cloud-Ressourcen oder das Ausführen teurer Aufgaben. Idempotente Skripts, die dasselbe Ergebnis bei wiederholten Aufrufen erhalten, können sicherer als Dienst ausgeführt werden.
Script für HTTP-Anfrage aufrufen
Dieser Go-Code richtet einen Webdienst ein, der ein Shell-Skript zum Erstellen eines Berichts ausführt. Da die Suchanfrage Nutzereingaben ist, überprüft der Code sie, ob sie nur Buchstaben, Zahlen oder Bindestriche enthält, um zu verhindern, dass schädliche Befehle eingegeben werden. Diese Reihe von Zeichen ist schmal genug, um Angriffs-Injection-Angriffe zu verhindern.
Der Webdienst übergibt den Suchparameter als Argument an das Shell-Skript.
Die Datei go.mod
deklariert die Anwendungsabhängigkeiten in einem Go-Modul:
Containerumgebung definieren
Mit dem Dockerfile wird definiert, wie die Umgebung für den Dienst zusammengesetzt wird.
Sie ähnelt dem Dockerfile aus dem helloworld-shell quickstart, mit dem Unterschied, dass das endgültige Container-Image auf dem Google Cloud CLI-Image gcloud
basiert. Dadurch kann Ihr Dienst gcloud
ohne benutzerdefinierte Installations- und Konfigurationsschritte für die Google Cloud CLI verwenden.
Artifact Registry-Standard-Repository erstellen
Erstellen Sie ein Artifact Registry-Standard-Repository zum Speichern des Docker-Container-Images:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
Ersetzen Sie:
- REPOSITORY durch einen eindeutigen Namen für das Repository.
- REGION durch die Google Cloud-Region der Artifact Registry.
Cloud Storage-Bucket einrichten
Erstellen Sie einen Cloud Storage-Bucket zum Hochladen von Berichten:
gcloud storage buckets create gs://REPORT_ARCHIVE_BUCKET
Ersetzen Sie REPORT_ARCHIVE_BUCKET durch einen global eindeutigen Bucket-Namen.
Dienstidentität einrichten
Sie erstellen eine Dienstidentität und passen die spezifischen IAM-Berechtigungen an, die für die Arbeit erforderlich sind, um den Zugriff des Dienstes auf anderweitige Infrastruktur zu beschränken.
In diesem Fall sind die Berechtigungen zum Lesen von Cloud Run-Diensten und zum Lesen von und zum Schreiben in den Cloud Storage-Bucket erforderlich.
Erstellen Sie ein Dienstkonto:
gcloud iam service-accounts create gcloud-report-identity
Gewähren Sie dem Dienstkonto die Berechtigung zum Lesen von Cloud Run-Diensten:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/run.viewer
Gewähren Sie dem Dienstkonto die Berechtigungen zum Lesen von und Schreiben in den Cloud Storage-Bucket:
gcloud storage buckets add-iam-policy-binding gs://REPORT_ARCHIVE_BUCKET \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser
Der eingeschränkte Zugriff dieser benutzerdefinierten Dienstidentität verhindert, dass der Dienst auf andere Google Cloud-Ressourcen zugreift.
Dienst versenden
Der Versand von Code besteht aus drei Schritten:
- Ein Container-Image mit Cloud Build erstellen
- Container-Image per Push an Artifact Registry hochladen
- Das Container-Image in Cloud Run bereitstellen
So versenden Sie den Code:
Erstellen Sie einen Container und veröffentlichen Sie ihn in Artifact Registry.
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report
Ersetzen Sie:
- PROJECT_ID durch Ihre Google Cloud-Projekt-ID
- REPOSITORY durch den Namen des Artifact Registry-Repositorys.
- REGION durch die Google Cloud-Region der Artifact Registry.
gcloud-report
ist der Name Ihres Dienstes.Bei Erfolg wird in einer SUCCESS-Meldung die ID, die Erstellungszeit und der Image-Name angezeigt. Das Image wird in Artifact Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Stellen Sie die Anwendung mit dem folgenden Befehl bereit:
gcloud run deploy gcloud-report \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report \ --update-env-vars GCLOUD_REPORT_BUCKET=REPORT_ARCHIVE_BUCKET \ --service-account gcloud-report-identity \ --no-allow-unauthenticated
Ersetzen Sie:
- PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
- REPOSITORY durch den Namen des Artifact Registry-Repositorys.
- REGION durch die Google Cloud-Region des Dienstes.
gcloud-report
ist Teil des Containernamens und des Dienstes. Das Container-Image wird für den Dienst und die Region (Cloud Run) bereitgestellt, die Sie zuvor unter gcloud einrichten konfiguriert haben.Das Flag
--no-allow-unauthenticated
beschränkt den nicht authentifizierten Zugriff auf den Dienst. Wenn Sie den Dienst privat nutzen, können Sie sich darauf verlassen, dass mit der in Cloud Run integrierten Authentifizierung nicht autorisierte Anfragen blockiert werden. Weitere Informationen zur Authentifizierung auf Grundlage des Identity and Access Management (IAM) finden Sie unter Zugriff mit IAM verwalten.Warten Sie, bis die Bereitstellung abgeschlossen ist. Dies kann etwa eine halbe Minute dauern. Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt.
Wenn Sie eine Codeaktualisierung für den Dienst bereitstellen möchten, wiederholen Sie die vorherigen Schritte. Bei jeder Bereitstellung für einen Dienst wird eine neue Version erstellt und der Traffic wird automatisch verarbeitet, sobald der Dienst bereit ist.
Unter Zugriff mit IAM verwalten erfahren Sie, wie Sie Google Cloud-Nutzern Zugriff zum Aufrufen dieses Dienstes gewähren. Projektbearbeiter und -inhaber haben automatisch Zugriff.
Bericht generieren
So erstellen Sie einen Bericht der Cloud Run-Dienste:
Verwenden Sie curl, um eine authentifizierte Anfrage zu senden:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Ersetzen Sie SERVICE_URL durch die von Cloud Run bereitgestellte URL, nachdem die Bereitstellung abgeschlossen ist.
Wenn Sie ein neues Projekt erstellt haben und dieser Anleitung gefolgt sind, sieht die Ausgabe ungefähr so aus:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-.-DATE.txt
Der
.
im Dateinamen ist das Standardsuchargument, wie im Quellcode erwähnt.Wenn Sie die Suchfunktion verwenden möchten, fügen Sie der Anfrage ein
search
-Argument hinzu:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL?search=gcloud
Diese Abfrage gibt eine Ausgabe ähnlich wie hier zurück:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-gcloud-DATE.txt
Rufen Sie die Datei lokal mit der gcloud CLI ab:
gcloud storage cp gs://REPORT_FILE_NAME .
Der
.
im Befehl steht für das aktuelle Arbeitsverzeichnis.Ersetzen Sie REPORT_FILE_NAME durch die Ausgabe des Cloud Storage-Objektnamens im vorherigen Schritt.
Öffnen Sie die Datei, um sich den Bericht anzusehen. Das sollte so aussehen:
Stabilität für die Zukunft verbessern
Wenn Sie diesen Dienst weiter entwickeln möchten, sollten Sie darüber nachdenken, ihn in einer stabileren Programmiersprache neu zu schreiben und dabei die Cloud Run Admin API und die Cloud Storage-Clientbibliothek zu verwenden.
Sie können die ausgeführten API-Aufrufe (und einige Details zur Authentifizierung) prüfen, indem Sie --log-http
zu den gcloud CLI-Befehlen hinzufügen.
Vorgang automatisieren
Nachdem der Bericht der Cloud Run-Dienste jetzt durch eine HTTP-Anfrage ausgelöst werden kann, verwenden Sie die Automatisierung, um bei Bedarf Berichte zu erstellen:
- Führen Sie diesen Dienst nach einem Zeitplan mit Cloud Scheduler aus.
- Erstellen Sie den Bericht als Aufgabe in der Warteschlange oder planen Sie ihn in der Zukunft mithilfe von Google Tasks.
Bereinigen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben:
gcloud run services delete SERVICE-NAME
Dabei ist SERVICE-NAME der von Ihnen ausgewählte Dienstname.
Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.
Entfernen Sie die Konfiguration der Standardregion gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:
gcloud config unset run/region
Entfernen Sie die Projektkonfiguration:
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
Nächste Schritte
- Reduzieren Sie die Abhängigkeiten Ihres Dienstes, indem Sie den gcloud CLI-Befehl durch API-Aufrufe ersetzen: Objekte hochladen, Cloud Run Admin API-Referenz.
- Verbessern Sie die Sicherheit noch weiter, indem Sie die Netzwerk-Steuerelemente für eingehenden Traffic verwenden, um den Zugriff auf Ihren Dienst einzuschränken.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center