Anleitung: Fehler in einem Cloud Run-Dienst mit Eventarc beheben

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

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

    
    // Sample audit_storage is a Cloud Run service which handles Cloud Audit Log events with Cloud Storage data.
    package main
    
    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
    // HelloEventsStorage receives and processes a Cloud Audit Log event with Cloud Storage data.
    func HelloEventsStorage(w http.ResponseWriter, r *http.Request) {
    	s := fmt.Sprintf("Detected change in Cloud Storage bucket: %s", string(r.Header.Get("Ce-Subject")))
    	log.Printf(s)
    	fmt.Fprintln(w, s)
    }
    

    Java

    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class EventController {
    
      private static final List<String> requiredFields =
          Arrays.asList("ce-id", "ce-source", "ce-type", "ce-specversion");
    
      @RequestMapping(value = "/", method = RequestMethod.POST)
      public ResponseEntity<String> receiveMessage(
          @RequestBody Map<String, Object> body, @RequestHeader Map<String, String> headers) {
        for (String field : requiredFields) {
          if (headers.get(field) == null) {
            String msg = String.format("Missing expected header: %s.", field);
            System.out.println(msg);
            return new ResponseEntity<String>(msg, HttpStatus.BAD_REQUEST);
          }
        }
    
        if (headers.get("ce-subject") == null) {
          String msg = "Missing expected header: ce-subject.";
          System.out.println(msg);
          return new ResponseEntity<String>(msg, HttpStatus.BAD_REQUEST);
        }
    
        String ceSubject = headers.get("ce-subject");
        String msg = "Detected change in Cloud Storage bucket: " + ceSubject;
        System.out.println(msg);
        return new ResponseEntity<String>(msg, HttpStatus.OK);
      }
    }

    .NET

    
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
    
            logger.LogInformation("Service is starting...");
    
            app.UseRouting();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapPost("/", async context =>
                {
                    logger.LogInformation("Handling HTTP POST");
    
                    var ceSubject = context.Request.Headers["ce-subject"];
                    logger.LogInformation($"ce-subject: {ceSubject}");
    
                    if (string.IsNullOrEmpty(ceSubject))
                    {
                        context.Response.StatusCode = 400;
                        await context.Response.WriteAsync("Bad Request: expected header Ce-Subject");
                        return;
                    }
    
                    await context.Response.WriteAsync($"GCS CloudEvent type: {ceSubject}");
                });
            });
        }
    }
    

    Node.js

    const express = require('express');
    const app = express();
    
    app.use(express.json());
    app.post('/', (req, res) => {
      if (!req.header('ce-subject')) {
        return res
          .status(400)
          .send('Bad Request: missing required header: ce-subject');
      }
    
      console.log(
        `Detected change in Cloud Storage bucket: ${req.header('ce-subject')}`
      );
      return res
        .status(200)
        .send(
          `Detected change in Cloud Storage bucket: ${req.header('ce-subject')}`
        );
    });
    
    module.exports = app;

    Python

    import os
    
    from flask import Flask, request
    
    app = Flask(__name__)
    if __name__ == "__main__":
        app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
  • Ein Dockerfile, das die Betriebsumgebung für den Dienst definiert. Der Inhalt des Dockerfile variiert je nach Sprache:

    Go

    
    # Use the offical golang image to create a binary.
    # This is based on Debian and sets the GOPATH to /go.
    # https://hub.docker.com/_/golang
    FROM golang:1.17-buster as builder
    
    # Create and change to the app directory.
    WORKDIR /app
    
    # Retrieve application dependencies.
    # This allows the container build to reuse cached dependencies.
    # Expecting to copy go.mod and if present go.sum.
    COPY go.* ./
    RUN go mod download
    
    # Copy local code to the container image.
    COPY . ./
    
    # Build the binary.
    RUN go build -v -o server
    
    # Use the official Debian slim image for a lean production container.
    # https://hub.docker.com/_/debian
    # https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
    FROM debian:buster-slim
    RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
        ca-certificates && \
        rm -rf /var/lib/apt/lists/*
    
    # Copy the binary to the production image from the builder stage.
    COPY --from=builder /app/server /server
    
    # Run the web service on container startup.
    CMD ["/server"]
    

    Java

    
    # Use the official maven/Java 8 image to create a build artifact.
    # https://hub.docker.com/_/maven
    FROM maven:3.8-jdk-11 as builder
    
    # Copy local code to the container image.
    WORKDIR /app
    COPY pom.xml .
    COPY src ./src
    
    # Build a release artifact.
    RUN mvn package -DskipTests
    
    # Use AdoptOpenJDK for base image.
    # It's important to use OpenJDK 8u191 or above that has container support enabled.
    # https://hub.docker.com/r/adoptopenjdk/openjdk8
    # https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
    FROM adoptopenjdk/openjdk11:alpine-slim
    
    # Copy the jar to the production image from the builder stage.
    COPY --from=builder /app/target/audit-storage-*.jar /audit-storage.jar
    
    # Run the web service on container startup.
    CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/audit-storage.jar"]
    

    .NET

    
    # Use Microsoft's official build .NET image.
    # https://hub.docker.com/_/microsoft-dotnet-core-sdk/
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine AS build
    WORKDIR /app
    
    # Install production dependencies.
    # Copy csproj and restore as distinct layers.
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy local code to the container image.
    COPY . ./
    WORKDIR /app
    
    # Build a release artifact.
    RUN dotnet publish -c Release -o out
    
    # Use Microsoft's official runtime .NET image.
    # https://hub.docker.com/_/microsoft-dotnet-core-aspnet/
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine AS runtime
    WORKDIR /app
    COPY --from=build /app/out ./
    
    # Run the web service on container startup.
    ENTRYPOINT ["dotnet", "AuditStorage.dll"]

    Node.js

    
    # Use the official lightweight Node.js 10 image.
    # https://hub.docker.com/_/node
    FROM node:18-slim
    
    # Create and change to the app directory.
    WORKDIR /usr/src/app
    
    # Copy application dependency manifests to the container image.
    # A wildcard is used to ensure both package.json AND package-lock.json are copied.
    # Copying this separately prevents re-running npm install on every code change.
    COPY package*.json ./
    
    # Install dependencies.
    # If you add a package-lock.json speed your build by switching to 'npm ci'.
    # RUN npm ci --only=production
    RUN npm install --production
    
    # Copy local code to the container image.
    COPY . .
    
    # Run the web service on container startup.
    CMD [ "npm", "start" ]
    

    Python

    
    # Use the official Python image.
    # https://hub.docker.com/_/python
    FROM python:3.10-slim
    
    # Allow statements and log messages to immediately appear in the Cloud Run logs
    ENV PYTHONUNBUFFERED True
    
    # Copy application dependency manifests to the container image.
    # Copying this separately prevents re-running pip install on every code change.
    COPY requirements.txt ./
    
    # Install production dependencies.
    RUN pip install -r requirements.txt
    
    # Copy local code to the container image.
    ENV APP_HOME /app
    WORKDIR $APP_HOME
    COPY . ./
    
    # Run the web service on container startup.
    # Use gunicorn webserver with one worker process and 8 threads.
    # For environments with multiple CPU cores, increase the number of workers
    # to be equal to the cores available.
    CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

Code versenden

So versenden Sie den Code:

  1. 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

    1. Verwenden Sie gcloud credential helper, um Docker zum Übertragen des Containers an Container Registry zu autorisieren.
      gcloud auth configure-docker
    2. 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.

  2. 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 und troubleshoot-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.

  3. 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

  1. 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.

  2. Führen Sie diesen Befehl aus, um zu prüfen, ob troubleshoot-trigger erstellt wurde:

    gcloud eventarc triggers list
    

    troubleshoot-trigger wird mit dem Ziel troubleshoot-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:

  1. 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
    
  2. 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.

  1. 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
  2. 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.

  1. Löschen Sie den vorhandenen Trigger am Standort us-central1:

       gcloud eventarc triggers delete troubleshoot-trigger
    
  2. 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
    
  3. Senden Sie den Code noch einmal.

  4. 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
    
  5. 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

  1. 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.

  2. Prüfen Sie, ob ein Pub/Sub-Thema mit demselben Triggernamen vorhanden ist.

    1. Informationen zum Auflisten von Triggern finden Sie unter gcloud eventarc triggers list.
    2. 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.

  3. Prüfen Sie den Status des Pub/Sub-Themas:

    1. Prüfen Sie, ob auf dem Tab Trigger ein Häkchen 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.

    2. Öffnen Sie Pub/Sub > Themen und klicken Sie auf das Pub/Sub-Thema.

      Zu Pub/Sub-Themen

    3. 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.

      Grafik: Themenmesswert

    4. Beobachten Sie, ob Nachrichten erfolgreich an Cloud Run mit dem Messwert subscription/push_request_count gesendet wurden (response_code).

      1. Rufen Sie in der Cloud Console Cloud Monitoring auf.

        Zu Monitoring

      2. Fügen Sie Ihr Projekt zu einem neuen Workspace hinzu.

      3. Klicken Sie auf Dashboards und wählen Sie das Cloud Pub/Sub-Dashboard aus.

      4. Klicken Sie im Dashboard Cloud Pub/Sub auf das von Ihnen erstellte Pub/Sub-Thema.

      5. Klicken Sie im Abschnitt Vorfälle auf Richtlinie erstellen.

      6. Klicken Sie auf der Seite Benachrichtigungsrichtlinie erstellen auf Bedingung hinzufügen.

      7. 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 Grafik: Abo-Messwert Weitere Informationen zu Nutzungsmesswerten für Pub/Sub finden Sie unter Push-Abos beobachten.
      8. Klicken Sie auf Hinzufügen, um die Seite Benachrichtigungsrichtlinie erstellen aufzurufen.

      9. Geben Sie im Abschnitt Wie kann das Problem behoben werden? einen Benachrichtigungsnamen ein, z. B. samplealert, und klicken Sie auf Speichern.

      10. 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:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Anleitungsressourcen löschen

  1. 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.

  2. 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

  3. 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 Sie TRIGGER_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.

Nächste Schritte

  • Informationen zur Behebung anderer Probleme bei der Verwendung von Eventarc finden Sie unter Fehlerbehebung.