In dieser Anleitung wird beschrieben, wie Sie Laufzeitfehler beheben, die auftreten, wenn Sie Ereignisse aus Cloud Storage mithilfe von Cloud-Audit-Logging in einem nicht authentifizierten Cloud Run-Dienst bereitstellen.
Ziele
- Cloud Storage-Bucket als Ereignisquelle erstellen
- Container-Image in Cloud Run erstellen, hochladen und bereitstellen
- Eventarc-Trigger erstellen
- Datei in den Cloud Storage-Bucket hochladen
- Laufzeitfehler beheben
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Folgen Sie den Voraussetzungen unter Cloud-Audit-Logging-Ereignis empfangen.
Cloud Storage-Bucket erstellen
Erstellen Sie zwei Storage-Buckets in zwei Regionen als Ereignisquelle für den Cloud Run-Dienst:
us-east1
export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
us-west1
export BUCKET2="troubleshoot-bucket2-$PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
Nachdem die Ereignisquelle erstellt wurde, stellen Sie den Ereignisempfängerdienst in Cloud Run bereit.
Codebeispiel abrufen
Klonen Sie das Repository:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/eventarc/audit-storage
Code ansehen
Der Code dieser Anleitung besteht aus folgenden Elementen:
Ein Server, der eingehende Nachrichten verarbeitet, die in ein CloudEvent in der HTTP-POST-Anfrage verpackt sind:
Go
Java
.NET
Node.js
Python
Ein Dockerfile, das die Betriebsumgebung für den Dienst definiert. Der Inhalt des Dockerfile variiert je nach Sprache:
Go
Java
.NET
Node.js
Python
Code versenden
So versenden Sie den Code:
Erstellen Sie das Container-Image mit Cloud Build und laden Sie es in Container Registry hoch:
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
Bei Erfolg wird eine entsprechende Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Java
- Verwenden Sie gcloud credential helper, um Docker zum Übertragen des Containers an Container Registry zu autorisieren.
gcloud auth configure-docker
Verwenden Sie das Jib-Maven-Plug-in, um den Container zu erstellen und per Push in Container Registry zu übertragen.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/audit-storage
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
audit-storage
ist der Containername. Bei Erfolg wird eine SUCCESS-Nachricht angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
.NET
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
Bei Erfolg wird eine entsprechende Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
Bei Erfolg wird eine entsprechende Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
Bei Erfolg wird eine entsprechende Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
- Verwenden Sie gcloud credential helper, um Docker zum Übertragen des Containers an Container Registry zu autorisieren.
Stellen Sie das Container-Image in Cloud Run bereit:
gcloud run deploy troubleshoot-service --image gcr.io/PROJECT_ID/audit-storage \ --allow-unauthenticated
Ersetzen Sie PROJECT_ID durch Ihre GCP-Projekt-ID.
audit-storage
ist der Containername undtroubleshoot-service
der Name des Cloud Run-Dienstes.Beachten Sie, dass das Container-Image für den Dienst und die Region bereitgestellt wird, die Sie zuvor bei der Einrichtung von gcloud konfiguriert haben.
Antworten Sie bei der Bereitstellung in Cloud Run mit
y
(Ja) auf die AufforderungNicht authentifiziert zulassen. Weitere Informationen zur IAM-basierten Authentifizierung finden Sie unter Eventarc-Rollen und -Berechtigungen.Wenn die Bereitstellung erfolgreich war, wird in der Befehlszeile die Dienst-URL angezeigt.
Trigger erstellen
Nachdem Sie einen Cloud Run-Dienst bereitgestellt haben, richten Sie einen Trigger ein, um über Audit-Logs Ereignisse aus Cloud Storage aufzuzeichnen
Erstellen Sie einen Audit-Log-Trigger, um Cloud Storage-Ereignisse aufzuzeichnen:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Dadurch wird ein Trigger mit dem Namen
troubleshoot-trigger
erstellt.Führen Sie diesen Befehl aus, um zu prüfen, ob
troubleshoot-trigger
erstellt wurde:gcloud eventarc triggers list
troubleshoot-trigger
wird mit dem Zieltroubleshoot-service
angezeigt.
Ereignis erstellen und abrufen
So prüfen Sie, ob der Dienst erfolgreich bereitgestellt wurde und die Ereignisse aus Cloud Storage empfangen werden können:
Erstellen Sie eine Datei und laden Sie sie in den ersten Storage-Bucket hoch:
echo "Hello World" > random.txt gsutil cp random.txt gs://${BUCKET1}/random.txt
Beobachten Sie die Logs, um zu prüfen, ob der Dienst ein Ereignis empfangen hat. Die Dienstlogs zeigen, dass der Dienst Ereignisse überwacht, was auf ein Problem mit der Einrichtung hinweist:
Now listening on: http://0.0.0.0:8080
Problem untersuchen
Sie können nun den Grund dafür ermitteln, warum der Dienst keine Ereignisse empfängt.
Audit-Logs
In dieser Anleitung werden Cloud Storage-Ereignisse über Audit-Logs ausgegeben und an Cloud Run gesendet. Prüfen Sie, ob die Audit-Logs für Cloud Storage aktiviert sind.
- Rufen Sie die Seite IAM und Admin > Audit-Logs auf und wählen Sie das Kästchen Google Cloud Storage aus. Zur Cloud-Audit-Logging-Konsole
- Achten Sie darauf, dass die Logtypen Lesen durch den Administrator, Daten lesen und Daten schreiben für Cloud-Audit-Logging ausgewählt sind.
Nachdem Sie Cloud-Audit-Logging aktiviert haben, laden Sie die Datei noch einmal und prüfen Sie die Logs. Wenn der Dienst immer noch keine Ereignisse empfängt, kann dies mit dem Triggerstandort zusammenhängen.
Triggerstandort
Es können mehrere Ressourcen an verschiedenen Standorten vorhanden sein und Sie müssen nach Ereignissen aus Quellen filtern, die sich in derselben Region wie das Cloud Run-Ziel befinden. Weitere Informationen finden Sie unter Von Eventarc unterstützte Standorte.
In dieser Anleitung haben Sie den Cloud Run-Dienst in us-central1
bereitgestellt.
Außerdem haben Sie am selben Standort einen Trigger erstellt, da Sie eventarc/location
auf us-central1
gesetzt haben.
Beschreiben Sie den Trigger, um den Standort des Triggers aufzulisten:
gcloud eventarc triggers describe troubleshoot-trigger
Sie haben jedoch zwei Buckets an den Standorten us-east1
und us-west1
erstellt. Um Ereignisse von diesen Standorten zu erhalten, müssen Sie Trigger an diesen Standorten erstellen.
Lassen Sie uns einen Trigger in us-east1
erstellen.
Löschen Sie den vorhandenen Trigger am Standort
us-central1
:gcloud eventarc triggers delete troubleshoot-trigger
Legen Sie den Standort und die Region auf
us-east1
fest:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Senden Sie den Code noch einmal.
Erstellen Sie einen neuen Trigger am Standort
us-east1
:gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Prüfen Sie, ob der Trigger erstellt wird:
gcloud eventarc triggers list
Die Initialisierung eines Triggers kann bis zu zehn Minuten dauern, bevor Ereignisse gesendet werden.
Initialisierungszeit
Nach dem Erstellen von Triggern kann die Initialisierungszeit bis zu 10 Minuten betragen, bevor Ereignisse beginnen. Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Trigger aktiv sind:
gcloud eventarc triggers list
Es wird eine ähnliche Ausgabe angezeigt, die den Status des Triggers angibt:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE
troubleshoot-trigger3 google.cloud.audit.log.v1.written troubleshoot-service2 By 14:16:56
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service Yes
Laden Sie nach 10 Minuten in jeden Bucket noch einmal eine Datei hoch. Ereignisse für die einzelnen Dateien werden in die Cloud Run-Dienstlogs geschrieben. Wenn der Dienst keine Ereignisse empfängt, kann dies mit der Größe der Ereignisse zusammenhängen.
Termingröße
Die von Ihnen gesendeten Ereignisse dürfen die Limits für die Ereignisgröße (512 KB) nicht überschreiten.
Ein Trigger, der Ereignisse bisher bereitgestellt hat, funktioniert nicht mehr
Prüfen Sie, ob die Quelle Ereignisse generiert. Prüfen Sie in den Cloud-Audit-Logs, ob der überwachte Dienst Logs ausgibt. Wenn Logs aufgezeichnet, aber keine Ereignisse zugestellt werden, wenden Sie sich an den Support.
Prüfen Sie, ob ein Pub/Sub-Thema mit demselben Triggernamen vorhanden ist.
- Informationen zum Auflisten von Triggern finden Sie unter gcloud eventarc triggers list.
Führen Sie folgenden Befehl aus, um die Pub/Sub-Themen aufzulisten:
gcloud pubsub topics list
Prüfen Sie, ob der Name des Pub/Sub-Themas den Namen des erstellten Triggers enthält. Wenn das Pub/Sub-Thema fehlt, erstellen Sie ein Thema, wenn Sie den Trigger erstellen.
Prüfen Sie den Status des Pub/Sub-Themas:
Prüfen Sie, ob auf dem Tab Trigger ein Häkchen check_circle angezeigt wird. Wechseln Sie in der Cloud Console zu Cloud Run und wählen Sie den erstellten Dienst aus. Wechseln Sie dann zum Tab Trigger.
Öffnen Sie Pub/Sub > Themen und klicken Sie auf das Pub/Sub-Thema.
Beobachten Sie, ob Nachrichten zum Thema mit dem Messwert veröffentlicht werden:
topic/send_message_operation_count
. Wenn keine Nachrichten zum Thema veröffentlicht werden, prüfen Sie in den Cloud-Audit-Logs, ob der überwachte Dienst Logs ausgibt. Wenn Logs aufgezeichnet, aber keine Ereignisse zugestellt werden, wenden Sie sich an den Support.Beobachten Sie, ob Nachrichten erfolgreich an Cloud Run mit dem Messwert
subscription/push_request_count
gesendet wurden (response_code
).Rufen Sie in der Cloud Console Cloud Monitoring auf.
Fügen Sie Ihr Projekt zu einem neuen Workspace hinzu.
Klicken Sie auf Dashboards und wählen Sie das Cloud Pub/Sub-Dashboard aus.
Klicken Sie im Dashboard Cloud Pub/Sub auf das von Ihnen erstellte Pub/Sub-Thema.
Klicken Sie im Abschnitt Vorfälle auf Richtlinie erstellen.
Klicken Sie auf der Seite Benachrichtigungsrichtlinie erstellen auf Bedingung hinzufügen.
Geben Sie auf dem Tab Messwert die folgenden Bedingungen an:
- Cloud Pub/Sub-Abo als Ressourcentyp
- Push-Anfragen als Messwert
- response_code als Gruppieren nach
- 0 als Konfigurationsschwellenwert
Weitere Informationen zu Nutzungsmesswerten für Pub/Sub finden Sie unter Push-Abos beobachten.
Klicken Sie auf Hinzufügen, um die Seite Benachrichtigungsrichtlinie erstellen aufzurufen.
Geben Sie im Abschnitt Wie kann das Problem behoben werden? einen Benachrichtigungsnamen ein, z. B.
samplealert
, und klicken Sie auf Speichern.Die Benachrichtigung finden Sie unter Monitoring > Dashboard > Cloud Pub/Sub. Klicken Sie auf das Thema Pub/Sub und dann auf den Tab Abo.
Wenn Übertragungsfehler gemeldet werden, prüfen Sie die Cloud Run-Dienstlogs. Wenn der empfangende Endpunkt einen Statuscode zurückgibt, der nicht „OK“ ist, bedeutet dies, dass der Cloud Run-Code nicht wie erwartet funktioniert. Wenden Sie sich in diesem Fall an den Support.
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 durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
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 gcloud CLI-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.
Beispiel:
gcloud config unset run/region
oder
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
- Löschen Sie den Eventarc-Trigger:
gcloud eventarc triggers delete TRIGGER_NAME
Ersetzen SieTRIGGER_NAME
durch den Namen des Triggers.
- Löschen Sie das Container-Image mit dem Namen
gcr.io/PROJECT_ID/audit-storage
aus Container Registry. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
- Löschen Sie den Eventarc-Trigger:
Nächste Schritte
- Informationen zur Behebung anderer Probleme bei der Verwendung von Eventarc finden Sie unter Fehlerbehebung.