Bildverarbeitung mit Mikrodiensten und asynchronem Messaging bereitstellen

Last reviewed 2023-07-17 UTC

In diesem Dokument wird die Implementierung der Referenzarchitektur beschrieben, die unter Mikrodienste in Pub/Sub und GKE einbinden beschrieben wird. Die Architektur ist darauf ausgelegt, lang andauernde Prozesse mithilfe von Containern und asynchronem Messaging zu verarbeiten.

Dieses Dokument verwendet eine Beispielanwendung zum Teilen von Fotos, in der Miniaturansichten von Fotos generiert werden. Sie stellen die Anwendung mit Google Kubernetes Engine (GKE) bereit und verwenden Pub/Sub, um lang andauernde Prozesse asynchron aufzurufen. Außerdem verwenden Sie Pub/Sub-Benachrichtigungen für Cloud Storage, um Nebenjobs hinzuzufügen, ohne den Code der Anwendung zu ändern.

Die Anwendung wird von Cloud Build containerisiert und in Artifact Registry gespeichert. Mithilfe von Cloud Vision werden unangemessene Bilder erkannt.

Architektur für die Anwendung zum Generieren von Miniaturansichten

Das folgende Diagramm veranschaulicht das Design der Beispiel-Fotoalbumanwendung, die die Referenzarchitektur implementiert.

Architektur der Fotoalbumanwendung.

Abbildung 1. Architektur für Image-Verarbeitung, die auf der Verwendung von Containern und asynchronem Messaging basiert.

Das obige Diagramm veranschaulicht, wie die Miniaturansicht generiert wird:

  1. Ein Kunde lädt ein Bild in die Anwendung hoch.
  2. Die Anwendung speichert das Bild in Cloud Storage.
  3. Für die Miniaturansicht wird eine Anfrage generiert.
  4. Der Miniaturansichtsgenerator erstellt die Miniaturansicht.
  5. Die erfolgreiche Antwort wird an die Fotoalbumanwendung gesendet.
  6. Die erfolgreiche Antwort wird an den Client gesendet und die Miniaturansicht ist in Cloud Storage verfügbar.

Das folgende Diagramm zeigt, wie die Anwendung die Generierung von Miniaturansichten als separaten Dienst asynchron implementiert.

Architektur der Extraktion von Miniaturansichten

Abbildung 2. Architektur der Extraktion von Miniaturansichten

Sie verwenden Pub/Sub, um Dienstanfragen an den Dienst zum Generieren von Miniaturansichten zu senden. Diese neue Architektur macht den Dienstaufruf asynchron, sodass im Hintergrund eine Miniaturansicht erstellt wird, nachdem die Anwendung die Antwort an einen Client gesendet hat. Mit diesem Design lässt sich der Dienst zum Generieren von Miniaturansichten außerdem skalieren, sodass mehrere Jobs parallel ausgeführt werden können.

Lernziele

  • Exemplarische Fotoalbumanwendung in GKE bereitstellen
  • Asynchrone Dienstaufrufe über die Anwendung ausführen
  • Pub/Sub-Benachrichtigungen für Cloud Storage zum Auslösen der Anwendung verwenden, wenn eine neue Datei in den Cloud Storage-Bucket hochgeladen wird
  • Mithilfe von Pub/Sub weitere Aufgaben ausführen, ohne die Anwendung zu ändern

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

Wenn Sie die Beispielanwendung fertig erstellt haben, können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. GKE, Cloud SQL, Cloud Build, Artifact Registry, and Cloud Vision APIs aktivieren.

    Aktivieren Sie die APIs

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. GKE, Cloud SQL, Cloud Build, Artifact Registry, and Cloud Vision APIs aktivieren.

    Aktivieren Sie die APIs

  8. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

Umgebung einrichten

In diesem Abschnitt weisen Sie Standardeinstellungen für Werte zu, die im gesamten Dokument verwendet werden. Wenn Sie Ihre Cloud Shell-Sitzung schließen, gehen diese Umgebungseinstellungen verloren.

  1. Legen Sie in Cloud Shell Ihr Google Cloud-Standardprojekt fest:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

  2. Legen Sie die Compute Engine-Standardregion fest:

    gcloud config set compute/region REGION
    export REGION=REGION
    

    Ersetzen Sie REGION durch eine Region in Ihrer Nähe. Weitere Informationen finden Sie unter Regionen und Zonen.

  3. Legen Sie Ihre standardmäßige Compute Engine-Zone fest.

    gcloud config set compute/zone ZONE
    export ZONE=ZONE
    

    Ersetzen Sie ZONE durch eine Zone in Ihrer Nähe.

  4. Laden Sie die Beispielanwendungsdateien herunter und legen Sie das aktuelle Verzeichnis fest:

    git clone https://github.com/GoogleCloudPlatform/gke-photoalbum-example
    cd gke-photoalbum-example
    

Cloud Storage-Bucket erstellen und Standardbild für Miniaturansicht hochladen

  1. Erstellen Sie in Cloud Shell einen Cloud Storage-Bucket zum Speichern der Originalbilder und Miniaturansichten:

    export PROJECT_ID=$(gcloud config get-value project)
    gsutil mb -c regional -l ${REGION} gs://${PROJECT_ID}-photostore
    
  2. Laden Sie die Standarddatei für die Miniaturansicht hoch:

    gsutil cp ./application/photoalbum/images/default.png \
        gs://${PROJECT_ID}-photostore/thumbnails/default.png
    
    • Die hochgeladenen Bilder werden im folgenden Format gespeichert: gs://PROJECT_ID-photostore/FILENAME, wobei FILENAME für den Namen der hochgeladenen Bilddatei steht.
    • Die generierten Miniaturansichten werden im folgenden Format gespeichert: gs://PROJECT_ID-photostore/thumbnails/FILENAME.
    • Das Originalbild und die zugehörige Miniaturansicht haben denselben FILENAME-Wert, die Miniaturansicht wird jedoch im Bucket thumbnails gespeichert.
    • Während die Miniaturansicht erstellt wird, ist das folgende Platzhalterbild für die Miniaturansicht default.png in der Fotoalbumanwendung zu sehen.

      Grafik: Standardplatzhalterbild für die Miniaturansicht.

  3. Veröffentlichen Sie die Datei mit der Miniaturansicht:

    gsutil acl ch -u AllUsers:R \
        gs://${PROJECT_ID}-photostore/thumbnails/default.png
    

Cloud SQL-Instanz und MySQL-Datenbank erstellen

  1. Erstellen Sie die Cloud SQL-Instanz in Cloud Shell:

    gcloud sql instances create photoalbum-db --region=${REGION} \
        --database-version=MYSQL_8_0
    
  2. Rufen Sie den Verbindungsnamen ab:

    gcloud sql instances describe photoalbum-db \
        --format="value(connectionName)"
    

    Notieren Sie sich den Namen. Sie benötigen ihn später.

  3. Legen Sie das Passwort für den MySQL-Nutzer root@% fest:

    gcloud sql users set-password root --host=% --instance=photoalbum-db \
        --password=PASSWORD
    

    Ersetzen Sie PASSWORD durch ein sicheres Passwort für den Nutzer root@%.

  4. Stellen Sie eine Verbindung zur Cloud SQL-Instanz her:

    gcloud sql connect photoalbum-db --user=root --quiet
    

    Wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein, das Sie im vorherigen Schritt eingerichtet haben.

  5. Erstellen Sie eine Datenbank mit dem Namen photo_db, wobei der Nutzer appuser und das Passwort pas4appuser ist:

    create database photo_db;
    create user 'appuser'@'%' identified by 'pas4appuser';
    grant all on photo_db.* to 'appuser'@'%' with grant option;
    flush privileges;
    
  6. Bestätigen Sie das Ergebnis und beenden Sie MySQL:

    show databases;
    select user from mysql.user;
    exit
    

    Bestätigen Sie in der Ausgabe, dass die Datenbank photo_db und der Nutzer appuser erstellt wurden:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | photo_db           |
    | sys                |
    +--------------------+
    5 rows in set (0.16 sec)
    
    mysql> \t
    Outfile disabled.
    mysql> select user from mysql.user;
    +-------------------+
    | user              |
    +-------------------+
    | appuser           |
    | cloudsqlreplica   |
    | cloudsqlsuperuser |
    | root              |
    | cloudsqlexport    |
    | cloudsqlimport    |
    | cloudsqloneshot   |
    | root              |
    | cloudsqlexport    |
    | cloudsqlimport    |
    | cloudsqloneshot   |
    | root              |
    | cloudsqlapplier   |
    | cloudsqlimport    |
    | mysql.infoschema  |
    | mysql.session     |
    | mysql.sys         |
    | root              |
    +-------------------+
    18 rows in set (0.16 sec)
    
    mysql> exit
    Bye
    

Pub/Sub-Thema und -Abo erstellen

  1. Erstellen Sie in Cloud Shell ein Pub/Sub-Thema mit dem Namen thumbnail-service:

    gcloud pubsub topics create thumbnail-service
    

    Die Fotoalbumanwendung veröffentlicht eine Nachricht im Thema thumbnail-service, um Anfragen an den Dienst zum Generieren von Miniaturansichten zu senden.

  2. Erstellen Sie ein Pub/Sub-Abo mit dem Namen thumbnail-workers:

    gcloud pubsub subscriptions create --topic thumbnail-service thumbnail-workers
    

    Der Dienst zum Generieren von Miniaturansichten erhält Anfragen vom Abo thumbnail-workers.

GKE-Cluster erstellen

  1. Erstellen Sie in Cloud Shell einen GKE-Cluster mit der Berechtigung zum Aufrufen von APIs:

    gcloud container clusters create "photoalbum-cluster" \
        --scopes "https://www.googleapis.com/auth/cloud-platform" \
        --num-nodes "5"
    
  2. Rufen Sie Anmeldedaten für den Zugriff ab, die so konfiguriert sind, dass Sie den Cluster in späteren Schritten mit dem kubectl-Befehl verwalten können:

    gcloud container clusters get-credentials photoalbum-cluster
    
  3. Listen Sie die Knoten auf:

    kubectl get nodes
    

    Bestätigen Sie in der Ausgabe, dass es fünf Knoten gibt, deren STATUS-Wert Ready ist:

    NAME                                                STATUS   ROLES    AGE     VERSION
    gke-photoalbum-cluster-default-pool-d637570a-2pfh   Ready    <none>   2m55s   v1.24.10-gke.2300
    gke-photoalbum-cluster-default-pool-d637570a-3rm4   Ready    <none>   2m55s   v1.24.10-gke.2300
    gke-photoalbum-cluster-default-pool-d637570a-f7l4   Ready    <none>   2m55s   v1.24.10-gke.2300
    gke-photoalbum-cluster-default-pool-d637570a-qb2z   Ready    <none>   2m53s   v1.24.10-gke.2300
    gke-photoalbum-cluster-default-pool-d637570a-rvnp   Ready    <none>   2m54s   v1.24.10-gke.2300
    

Artifact Registry-Repository erstellen

  • Erstellen Sie in Cloud Shell ein neues Repository zum Speichern von Container-Images:

    gcloud artifacts repositories create photoalbum-repo \
        --repository-format=docker \
        --location=us-central1 \
        --description="Docker repository"
    

Images für die Anwendung erstellen

  1. Öffnen Sie die Datei application/photoalbum/src/auth_decorator.py in einem Texteditor und aktualisieren Sie den Nutzernamen und das Passwort:

    USERNAME = 'username'
    PASSWORD = 'passw0rd'
    
  2. Erstellen Sie in Cloud Shell mit dem Cloud Build-Dienst ein Image für die Fotoalbumanwendung:

    gcloud builds submit ./application/photoalbum -t \
        us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/photoalbum-app
    
  3. Erstellen Sie mit dem Cloud Build-Dienst ein Image für den Dienst zum Generieren von Miniaturansichten thumbnail-worker:

    gcloud builds submit ./application/thumbnail -t \
        us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/thumbnail-worker
    

Fotoalbumanwendung bereitstellen

  1. Aktualisieren Sie in Cloud Shell die Kubernetes-Deployment-Manifeste für das Fotoalbum und den Miniaturansichtsgenerator mit Werten aus Ihrer Umgebung:

    connection_name=$(gcloud sql instances describe photoalbum-db \
        --format "value(connectionName)")
    
    digest_photoalbum=$(gcloud container images describe \
        us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/photoalbum-app:latest --format \
        "value(image_summary.digest)")
    
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_photoalbum}/" \
        config/photoalbum-deployment.yaml
    
    digest_thumbnail=$(gcloud container images describe \
        us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/thumbnail-worker:latest --format \
        "value(image_summary.digest)")
    
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_thumbnail}/" \
            config/thumbnail-deployment.yaml
    
  2. Erstellen Sie Deployment-Ressourcen, um die Fotoalbumanwendung und den Dienst zum Generieren von Miniaturansichten zu starten:

    kubectl create -f config/photoalbum-deployment.yaml
    kubectl create -f config/thumbnail-deployment.yaml
    
  3. Erstellen Sie eine Dienstressource, um der Anwendung eine externe IP-Adresse zuzuweisen:

    kubectl create -f config/photoalbum-service.yaml
    
  4. Prüfen Sie die Ergebnisse für die Pods:

    kubectl get pods
    

    Bestätigen Sie in der Ausgabe, dass es drei Pods für jeden photoalbum-app- und thumbail-worker-Pod gibt und dass ihr STATUS-Wert Running ist:

    NAME                                READY     STATUS    RESTARTS   AGE
    photoalbum-app-555f7cbdb7-cp8nw     2/2       Running   0          2m
    photoalbum-app-555f7cbdb7-ftlc6     2/2       Running   0          2m
    photoalbum-app-555f7cbdb7-xsr4b     2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-728k5   2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-hqxqr   2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-xnxhc   2/2       Running   0          2m
    

    Die thumbnail-worker-Pods abonnieren Anfragen zum Generieren von Miniaturansichten vom Abo thumbnail-workers. Weitere Informationen finden Sie im Abschnitt zur Verwendung der Funktion callback im Quellcode.

  5. Prüfen Sie die Ergebnisse für die Dienste:

    kubectl get services
    

    Bestätigen Sie in der Ausgabe, dass in der Spalte EXTERNAL-IP eine externe IP-Adresse für den Dienst photoalbum-service vorhanden ist. Es kann einige Minuten dauern, bis alle Dienste ausgeführt werden.

    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
    kubernetes           ClusterIP      10.23.240.1     <none>            443/TCP        20m
    photoalbum-service   LoadBalancer   10.23.253.241   146.148.111.115   80:32657/TCP   2m
    

    Notieren Sie sich die externe IP-Adresse, da sie später verwendet wird. In diesem Beispiel hat es den Wert 146.148.111.115.

Fotoalbumanwendung testen

  1. Wenn Sie in einem Webbrowser auf die bereitgestellte Anwendung zugreifen möchten, rufen Sie die folgende URL auf und geben den zuvor eingerichteten Nutzernamen und das zugehörige Passwort ein:

    http://EXTERNAL_IP
    

    Ersetzen Sie EXTERNAL_IP durch die IP-Adresse, die Sie im vorherigen Schritt notiert haben.

  2. Klicken Sie zum Hochladen einer Bilddatei auf Hochladen.

    Die Platzhalter-Miniaturansicht, die angezeigt wird, während der Dienst eine spezifische Miniaturansicht generiert.

    Der Platzhalter für die Miniaturansicht wird auf dem Bildschirm angezeigt.

    Im Hintergrund erstellt der Dienst zum Generieren von Miniaturansichten eine Miniaturansicht des hochgeladenen Bildes. Damit Sie die generierte Miniaturansicht sehen, klicken Sie auf Aktualisieren. Die Cloud Vision API fügt die von ihr erkannten Bildlabels hinzu.

    Die Miniaturansicht mit zugehörigen Bildlabels.

    Damit Sie das Originalbild sehen, klicken Sie auf die Miniaturansicht.

Feature zum Erkennen unangemessener Bilder hinzufügen

Die folgende Abbildung zeigt, wie Sie mithilfe von Pub/Sub-Benachrichtigungen für Cloud Storage einen Dienst auslösen können, der unangemessene Inhalte erkennt. Mit diesem Feature wird das Bild unkenntlich gemacht, wenn eine neue Datei mit unangemessenem Inhalt im Cloud Storage-Bucket gespeichert wird.

Grafik: Architektur des Features zum Erkennen unangemessener Inhalte.

In der vorherigen Abbildung verwendet der Dienst das Feature SafeSearch-Erkennung der Vision API, um unangemessene Inhalte in einem Bild zu erkennen.

Die Fotoanwendung löst den Miniaturansichtsgenerator und die Bildprüfung asynchron aus. Daher gibt es keine Garantie dafür, dass sie in einer bestimmten Reihenfolge ausgeführt werden. Wenn die Miniaturansicht vor dem Unkenntlichmachen des Bildes erstellt wird, sehen Sie möglicherweise für kurze Zeit eine unangemessene Miniaturansicht. Die Bildprüfung macht allerdings sowohl das unangemessene Bild als auch die unangemessene Miniaturansicht unkenntlich.

Pub/Sub-Thema, -Abo und -Benachrichtigung erstellen

  1. Erstellen Sie in Cloud Shell ein Pub/Sub-Thema mit dem Namen safeimage-service:

    gcloud pubsub topics create safeimage-service
    
  2. Erstellen Sie ein Pub/Sub-Abo mit dem Namen safeimage-workers:

    gcloud pubsub subscriptions create --topic safeimage-service \
        safeimage-workers
    
  3. Konfigurieren Sie eine Pub/Sub-Benachrichtigung, sodass eine Nachricht an das Thema safeimage-service gesendet wird, wenn eine neue Datei in den Cloud Storage-Bucket hochgeladen wird:

    gsutil notification create -t safeimage-service -f json \
        gs://${PROJECT_ID}-photostore
    

Worker-Image erstellen und bereitstellen

  1. Erstellen Sie in Cloud Shell mit Cloud Build ein Container-Image für das Abo safeimage-workers:

    gcloud builds submit ./application/safeimage \
        -t us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/safeimage-worker
    
  2. Aktualisieren Sie die Kubernetes-Deployment-Manifeste für den Dienst "safe-image" mit Ihrer Google Cloud-Projekt-ID, dem Cloud SQL-Verbindungsnamen und den Container-Image-Digests:

    digest_safeimage=$(gcloud container images describe \
        us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/safeimage-worker:latest --format \
        "value(image_summary.digest)")
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_safeimage}/" \
        config/safeimage-deployment.yaml
    

Deployment-Ressource erstellen

  1. Erstellen Sie eine Deployment-Ressource mit dem Namen safeimage-deployment, um das Thema safeimage-service bereitzustellen:

    kubectl create -f config/safeimage-deployment.yaml
    
  2. Prüfen Sie die Ergebnisse:

    kubectl get pods
    

    Bestätigen Sie in der Ausgabe, dass es drei safeimage-worker-Pods gibt, deren STATUS-Wert Running ist.

    NAME                                READY     STATUS    RESTARTS   AGE
    photoalbum-app-555f7cbdb7-cp8nw     2/2       Running   0          30m
    photoalbum-app-555f7cbdb7-ftlc6     2/2       Running   0          30m
    photoalbum-app-555f7cbdb7-xsr4b     2/2       Running   8          30m
    safeimage-worker-7dc8c84f54-6sqzs   1/1       Running   0          2m
    safeimage-worker-7dc8c84f54-9bskw   1/1       Running   0          2m
    safeimage-worker-7dc8c84f54-b7gtp   1/1       Running   0          2m
    thumbnail-worker-86bd95cd68-9wrpv   2/2       Running   0          30m
    thumbnail-worker-86bd95cd68-kbhsn   2/2       Running   2          30m
    thumbnail-worker-86bd95cd68-n4rj7   2/2       Running   0          30m
    

    Die safeimage-worker-Pods abonnieren Erkennungsanforderungen für unangemessene Bilder vom Abo safeimage-workers. Weitere Informationen finden Sie im Abschnitt zur Verwendung der Funktion callback im Quellcode.

Feature zum Erkennen unangemessener Bilder testen

In diesem Abschnitt laden Sie ein Testbild hoch, um zu prüfen, ob das Feature SafeSearch-Erkennung ein unangemessenes Bild unkenntlich macht. Das Testbild ist ein Bild von einem Mädchen, das als Zombie verkleidet ist (lizenziert unter einer CC0-Lizenz von Pixaby).

  1. Laden Sie das Testbild herunter.
  2. Zum Hochladen des Bildes rufen Sie http://EXTERNAL_IP auf und klicken dann auf Hochladen.
  3. Klicken Sie auf Aktualisieren. Die Anwendung zeigt eine unkenntlich gemachte Miniaturansicht an.

    Eine unkenntlich gemachte Miniaturansicht.

    Klicken Sie auf die Miniaturansicht, um festzustellen, ob das hochgeladene Bild ebenfalls unkenntlich gemacht wurde.

Bereinigen

Wenn Sie die Google Cloud-Ressourcen, die Sie für die Beispielanwendung erstellt haben, nicht behalten möchten, können Sie sie entfernen, damit Ihnen diese nicht weiter in Rechnung gestellt werden. Sie können entweder das Projekt komplett löschen oder die Clusterressourcen löschen und anschließend den Cluster entfernen.

Projekt löschen

  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.

Einzelne Ressourcen löschen

Anstatt das Projekt zu löschen, können Sie die einzelnen von Ihnen erstellten Ressourcen löschen.

  1. Löschen Sie Ressourcen aus GKE:

    kubectl delete -f config/safeimage-deployment.yaml
    kubectl delete -f config/photoalbum-service.yaml
    kubectl delete -f config/thumbnail-deployment.yaml
    kubectl delete -f config/photoalbum-deployment.yaml
    
  2. Löschen Sie den Cluster aus GKE:

    gcloud container clusters delete photoalbum-cluster --quiet
    
  3. Löschen Sie das Repository aus Artifact Registry:

    gcloud artifacts repositories delete photoalbum-repo --location us-central1 --quiet
    
  4. Löschen Sie Abos und Themen aus Pub/Sub:

    gcloud pubsub subscriptions delete safeimage-workers
    gcloud pubsub topics delete safeimage-service
    gcloud pubsub subscriptions delete thumbnail-workers
    gcloud pubsub topics delete thumbnail-service
    
  5. Löschen Sie die Cloud SQL-Instanz:

    gcloud sql instances delete photoalbum-db --quiet
    
  6. Löschen Sie den Cloud Storage-Bucket:

    gsutil rm -r gs://${PROJECT_ID}-photostore
    gsutil rm -r gs://${PROJECT_ID}_cloudbuild
    
  7. Löschen Sie die Dateien:

    cd ..
    rm -rf gke-photoalbum-example
    

Nächste Schritte