In dieser Anleitung erfahren Sie, wie Sie mit Cloud Run for Anthos, der Cloud Vision API und ImageMagick anstößige Bilder erkennen und unkenntlich machen, die in einen Cloud Storage-Bucket hochgeladen wurden. Diese Anleitung baut auf der Anleitung Pub/Sub mit Cloud Run for Anthos verwenden auf.
In dieser Anleitung erfahren Sie, wie Sie eine vorhandene Beispielanwendung ändern. Sie können auch das vollständige Beispiel herunterladen.
Lernziele
- Einen asynchronen Datenverarbeitungsdienst in Cloud Run for Anthos schreiben, erstellen und bereitstellen
- Den Dienst aufrufen, indem Sie eine Datei in Cloud Storage hochladen und eine Pub/Sub-Nachricht erstellen
- Gewalttätige oder nicht jugendfreie Inhalte mit der Cloud Vision API erkennen
- Anstößige Bilder mit ImageMagick unkenntlich machen
- Den Dienst testen, indem Sie ein Bild eines fleischfressenden Zombies hochladen
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
-
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 Cloud Run for Anthos and Cloud Vision APIs.
- gcloud CLI installieren und initialisieren
- Installieren Sie die Komponente
kubectl
:gcloud components install kubectl
- Aktualisieren Sie die Komponenten:
gcloud components update
- Erstellen Sie mit Cloud Run for Anthos einen neuen Cluster. Folgen Sie dazu der Anleitung unter Cloud Run for Anthos einrichten.
- Richten Sie ein Pub/Sub-Thema, ein sicheres Push-Abo und einen ersten Cloud Run for Anthos-Dienst ein, um Nachrichten zu verarbeiten. Folgen Sie dazu der Anleitung Pub/Sub mit Cloud Run for Anthos verwenden.
gcloud-Standardeinstellungen einrichten
So konfigurieren Sie gcloud mit Standardeinstellungen für Ihren Cloud Run for Anthos-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 verwenden.
Konfigurieren Sie gcloud für Ihren Cluster:
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER-NAME gcloud config set run/cluster_location REGION
Ersetzen Sie:
- CLUSTER-NAME durch den Namen, den Sie für den Cluster verwendet haben, und
- REGION durch den unterstützten Clusterstandort Ihrer Wahl.
Die Reihenfolge der Vorgänge verstehen
Der Datenfluss in dieser Anleitung umfasst die folgenden Schritte:
- Ein Nutzer lädt ein Bild in einen Cloud Storage-Bucket hoch.
- Cloud Storage veröffentlicht eine Nachricht über die neue Datei an Pub/Sub.
- Pub/Sub überträgt die Nachricht an den Cloud Run for Anthos-Dienst.
- Der Cloud Run for Anthos-Dienst ruft die Bilddatei ab, auf die in der Pub/Sub-Nachricht verwiesen wird.
- Der Cloud Run for Anthos-Dienst verwendet die Cloud Vision API, um das Bild zu analysieren.
- Wenn Inhalte mit Darstellungen von Gewalt oder nicht jugendfreie Inhalte erkannt werden, nutzt der Cloud Run for Anthos-Dienst ImageMagick, um das Bild unkenntlich zu machen.
- Der Cloud Run for Anthos-Dienst lädt das unkenntlich gemachte Bild zur Verwendung in einen anderen Cloud Storage-Bucket hoch.
Die nachfolgende Verwendung des unkenntlich gemachten Bildes bleibt dem Leser als Übung überlassen.
Cloud Storage-Buckets einrichten
Erstellen Sie einen Cloud Storage-Bucket zum Hochladen von Bildern. Dabei sollte INPUT_BUCKET_NAME ein global eindeutiger Bucket-Name sein:
gsutil mb gs://INPUT_BUCKET_NAME
Der Cloud Run for Anthos-Dienst liest nur aus diesem Bucket.
Erstellen Sie einen zweiten Cloud Storage-Bucket zum Ablegen unkenntlich gemachter Bilder. Dabei sollte BLURRED_BUCKET_NAME ein global eindeutiger Bucket-Name sein:
gsutil mb gs://BLURRED_BUCKET_NAME
Der Cloud Run for Anthos-Dienst lädt unkenntlich gemachte Bilder in diesen Bucket hoch. Durch die Verwendung eines separaten Buckets wird verhindert, dass verarbeitete Bilder den Dienst wieder auslösen.
In den folgenden Schritten erstellen Sie einen Dienst, der Benachrichtigungen über Dateiuploads in den INPUT_BUCKET_NAME verarbeitet, und stellen diesen bereit. Sie aktivieren die Benachrichtigungszustellung, nachdem Sie den Dienst bereitgestellt und getestet haben, um einen vorzeitigen Aufruf des neuen Dienstes zu vermeiden.
Beispielcode der Pub/Sub-Anleitung ändern
Diese Anleitung baut auf dem Code auf, der in der Pub/Sub-Anleitung zusammengestellt wurde. Wenn Sie diese Anleitung noch nicht abgeschlossen haben, tun Sie dies jetzt, überspringen Sie die Bereinigungsschritte und kehren Sie dann hierher zurück, um Bildverarbeitungsverhalten hinzuzufügen.
Bildverarbeitungscode hinzufügen
Der Bildverarbeitungscode ist zur besseren Lesbarkeit und zum einfacheren Testen von der Anfrageverarbeitung getrennt. So fügen Sie einen Bildverarbeitungscode hinzu:
Wechseln Sie in das Verzeichnis des Beispielcodes der Pub/Sub-Anleitung.
Fügen Sie Code hinzu, um die Bildverarbeitungsabhängigkeiten zu importieren, einschließlich Bibliotheken für die Integration in Google Cloud-Dienste, ImageMagick und das Dateisystem.
Node.js
Öffnen Sie in Ihrem Editor eine neueimage.js
-Datei und kopieren Sie Folgendes:Python
Öffnen Sie in Ihrem Editor eine neueimage.py
-Datei und kopieren Sie Folgendes:Go
Öffnen Sie in Ihrem Editor eine neueimagemagick/imagemagick.go
-Datei und kopieren Sie Folgendes:Java
Öffnen Sie in Ihrem Editor eine neuesrc/main/java/com/example/cloudrun/ImageMagick.java
-Datei und kopieren Sie Folgendes:Fügen Sie Code hinzu, um eine Pub/Sub-Nachricht als Ereignisobjekt zu empfangen und die Bildverarbeitung zu steuern.
Das Ereignis enthält Daten zum ursprünglich hochgeladenen Bild. Dieser Code bestimmt, ob das Bild unkenntlich gemacht werden muss. Die Ergebnisse einer Cloud Vision-Analyse werden dazu auf gewalttätige Inhalte oder Inhalte nur für Erwachsene überprüft.
Node.js
Python
Go
Java
Rufen Sie das Bild, auf das verwiesen wird, aus dem oben erstellten Cloud Storage-Eingabe-Bucket auf, verwenden Sie ImageMagick, um das Bild mit einem Effekt zum Unkenntlichmachen zu transformieren, und laden Sie das Ergebnis in den Ausgabe-Bucket hoch.
Node.js
Python
Go
Java
Bildverarbeitung in den Pub/Sub-Beispielcode einbinden
So ändern Sie den vorhandenen Dienst zum Einbinden des Bildverarbeitungscodes:
Fügen Sie neue Abhängigkeiten für Ihren Dienst hinzu, einschließlich der Cloud Vision- und Cloud Storage-Clientbibliotheken:
Node.js
npm install --save gm @google-cloud/storage @google-cloud/vision
Python
Fügen Sie die erforderlichen Clientbibliotheken hinzu, damitrequirements.txt
wie folgt aussieht:Go
Die go-Beispielanwendung verwendet go-Module. Die neuen Abhängigkeiten, die oben in der Importanweisungimagemagick/imagemagick.go
hinzugefügt wurden, werden automatisch mit dem nächsten Befehl heruntergeladen, der sie benötigt.Java
Fügen Sie unter<dependencyManagement>
impom.xml
die Abhängigkeit hinzu: Fügen Sie unter<dependencies>
inpom.xml
die folgenden Abhängigkeiten hinzu:Fügen Sie das ImageMagick-Systempaket zu Ihrem Container hinzu, indem Sie
Dockerfile
unter der AnweisungFROM
ändern. Wenn Sie ein mehrstufiges Dockerfile mit mehreren Phasen verwenden, platzieren Sie dieses in der letzten Phase.Debian/Ubuntu Alpen Weitere Informationen zum Arbeiten mit Systempaketen in Ihrem Cloud Run for Anthos-Dienst finden Sie in der Anleitung zum Verwenden von Systempaketen.
Ersetzen Sie den vorhandenen Pub/Sub-Nachrichtenverarbeitungscode durch einen Funktionsaufruf für unsere neue Logik zum Unkenntlichmachen.
Node.js
Dieapp.js
-Datei definiert die Express.js-Anwendung und bereitet empfangene Pub/Sub-Nachrichten für die Verwendung vor. Nehmen Sie die folgenden Änderungen vor:- Fügen Sie Code hinzu, um die neue
image.js
-Datei zu importieren - Entfernen Sie den vorhandenen „Hello-World”-Code aus der Route
- Fügen Sie Code hinzu, um die Pub/Sub-Nachricht weiter zu validieren
Fügen Sie Code hinzu, um die neue Bildverarbeitungsfunktion aufzurufen
Wenn Sie fertig sind, sieht der Code so aus:
Python
Die Dateimain.py
definiert die Flask-Anwendung und bereitet empfangene Pub/Sub-Nachrichten für die Verwendung vor. Nehmen Sie die folgenden Änderungen vor:- Fügen Sie Code hinzu, um die neue
image.py
-Datei zu importieren - Entfernen Sie den vorhandenen „Hello-World”-Code aus der Route
- Fügen Sie Code hinzu, um die Pub/Sub-Nachricht weiter zu validieren
Fügen Sie Code hinzu, um die neue Bildverarbeitungsfunktion aufzurufen
Wenn Sie fertig sind, sieht der Code so aus:
Go
Die Dateimain.go
definiert den HTTP-Dienst und bereitet empfangene Pub/Sub-Nachrichten zur Verwendung vor. Nehmen Sie die folgenden Änderungen vor:- Fügen Sie Code hinzu, um die neue
imagemagick.go
-Datei zu importieren - Entfernen Sie den vorhandenen „Hello-World”-Code aus dem Handler
- Fügen Sie Code hinzu, um die Pub/Sub-Nachricht weiter zu validieren
- Fügen Sie Code hinzu, um die neue Bildverarbeitungsfunktion aufzurufen
Java
Die DateiPubSubController.java
definiert den Controller, der HTTP-Anfragen verarbeitet und empfangene Pub/Sub-Nachrichten für die Verwendung vorbereitet. Nehmen Sie die folgenden Änderungen vor:- Fügen Sie die neuen Importe hinzu
- Entfernen Sie den vorhandenen „Hello-World”-Code vom Controller
- Fügen Sie Code hinzu, um die Pub/Sub-Nachricht weiter zu validieren
- Fügen Sie Code hinzu, um die neue Bildverarbeitungsfunktion aufzurufen
- Fügen Sie Code hinzu, um die neue
Das vollständige Beispiel herunterladen
So rufen Sie das vollständige Codebeispiel für die Bildverarbeitung ab:
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Beispielcode für Cloud Run for Anthos enthält:
Node.js
cd nodejs-docs-samples/run/image-processing/
Python
cd python-docs-samples/run/image-processing/
Go
cd golang-samples/run/image-processing/
Java
cd java-docs-samples/run/image-processing/
Code versenden
Das Versenden von Code erfolgt in drei Schritten: ein Container-Image mit Cloud Build erstellen, in die Container Registry hochladen und in Cloud Run for Anthos bereitstellen.
So versenden Sie den Code:
Erstellen Sie einen Container und veröffentlichen Sie ihn in Container Registry.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre GCP-Projekt-ID und
pubsub
der Name, den Sie Ihrem Dienst geben möchten.Bei Erfolg wird eine SUCCESS-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/pubsub
Dabei ist PROJECT_ID Ihre GCP-Projekt-ID und
pubsub
der Name, den Sie Ihrem Dienst geben möchten.Bei Erfolg wird eine SUCCESS-Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre GCP-Projekt-ID und
pubsub
der Name, den Sie Ihrem Dienst geben möchten.Bei Erfolg wird eine SUCCESS-Meldung mit der ID, Erstellungszeit und dem Image-Namen angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Java
In diesem Beispiel wird Jib verwendet, um Docker-Images mit gängigen Java-Tools zu erstellen. Jib optimiert Container-Builds, ohne dass ein Dockerfile erforderlich ist oder Docker installiert sein muss. Weitere Informationen zum Erstellen von Java-Containern mit JibKonfigurieren und erstellen Sie mit dem Dockerfile ein Basis-Image mit den installierten Systempaketen, um das Standard-Basis-Image von Jib zu überschreiben:
gcloud builds submit --tag gcr.io/PROJECT_ID/imagemagick
Dabei ist PROJECT_ID die ID des GCP-Projekts.
Erstellen Sie Ihren endgültigen Container mit Jib und veröffentlichen Sie ihn in Container Registry:
mvn compile jib:build \ -Dimage=gcr.io/PROJECT_ID/pubsub \ -Djib.from.image=gcr.io/PROJECT_ID/imagemagick
Dabei ist PROJECT_ID die ID des GCP-Projekts.
Führen Sie den folgenden Befehl aus, um den Dienst mit demselben Dienstnamen bereitzustellen, den Sie in der Anleitung zu Pub/Sub verwendet haben:
Node.js
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --set-env-vars=BLURRED_BUCKET_NAME=BLURRED_BUCKET_NAME
Python
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --set-env-vars=BLURRED_BUCKET_NAME=BLURRED_BUCKET_NAME
Go
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --set-env-vars=BLURRED_BUCKET_NAME=BLURRED_BUCKET_NAME
Java
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --set-env-vars=BLURRED_BUCKET_NAME=BLURRED_BUCKET_NAME --memory 512M
Ersetzen Sie PROJECT_ID durch Ihre GCP-Projekt-ID.
pubsub
ist der Containername undpubsub-tutorial
der Name des Dienstes. Beachten Sie, dass das Container-Image für den Dienst und den Cluster bereitgestellt wird, den Sie zuvor unter gcloud-Standardeinstellungen einrichten konfiguriert haben.Ersetzen Sie BLURRED_BUCKET_NAME durch Ihren Cloud Storage-Bucket, den Sie zuvor erstellt haben, um unkenntlich gemachte Bilder zum Festlegen der Umgebungsvariablen zu erhalten.
Warten Sie, bis die Bereitstellung abgeschlossen ist. Dies kann ungefähr eine halbe Minute dauern. Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt.
Benachrichtigungen aus Cloud Storage aktivieren
Konfigurieren Sie Cloud Storage so, dass eine Nachricht in einem Pub/Sub-Thema immer dann veröffentlicht wird, wenn eine Datei, die als Objekt bezeichnet wird, hochgeladen oder geändert wird. Senden Sie die Benachrichtigung an das zuvor erstellte Thema, damit beim Hochladen neuer Dateien der Dienst aufgerufen wird.
gsutil notification create -t myRunTopic -f json gs://INPUT_BUCKET_NAME
Der gsutil-Befehl wird als Teil des Google Cloud CLI installiert. myRunTopic
ist das Thema, das Sie in der vorherigen Anleitung erstellt haben.
Ersetzen Sie INPUT_BUCKET_NAME durch den Namen, den Sie beim Erstellen der Buckets verwendet haben.
Weitere Informationen zu Storage-Bucket-Benachrichtigungen finden Sie unter Benachrichtigungen zu Objektänderungen.
Testen
Laden Sie ein anstößiges Bild hoch, z. B. dieses Bild eines fleischfressenden Zombies:
gsutil cp zombie.jpg gs://INPUT_BUCKET_NAME
Dabei ist INPUT_BUCKET_NAME der Cloud Storage-Bucket, den Sie zuvor zum Hochladen von Bildern erstellt haben.
Rufen Sie die Dienstlogs auf:
Rufen Sie in der Google Cloud Console die Seite „Cloud Run for Anthos” auf:
Klicken Sie auf den Dienst
pubsub-tutorial
.Wählen Sie den Tab Logs aus. Es kann einige Momente dauern, bis Logs angezeigt werden. Falls sie nicht sofort angezeigt werden, warten Sie kurz ab und sehen Sie dann noch einmal nach.
Suchen Sie nach der Nachricht
Blurred image: zombie.png
.Sie können die unkenntlich gemachten Bilder im Cloud Storage-Bucket BLURRED_BUCKET_NAME ansehen, den Sie zuvor erstellt haben. Suchen Sie ihn auf der Cloud Storage-Seite in der Google Cloud Console.
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 for Anthos-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 for Anthos-Dienste auch über die Google Cloud Console löschen:
Entfernen Sie die gcloud-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.
gcloud config unset run/platform gcloud config unset run/cluster gcloud config unset run/cluster_location
Entfernen Sie die Projektkonfiguration:
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
- Löschen Sie das Pub/Sub-Thema
myRunTopic
. - Löschen Sie das Pub/Sub-Abo
myRunSubscription
- Löschen Sie das Container-Image mit dem Namen
gcr.io/
PROJECT_ID/pubsub
aus Container Registry. - Löschen Sie das Aufrufer-Dienstkonto
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
- Löschen Sie die Cloud Storage-Buckets, die für die Platzhalter
INPUT_BUCKET_NAME
undBLURRED_BUCKET_NAME
erstellt wurden - Wenn Sie einen Cluster für diese Anleitung erstellt haben, löschen Sie den Cluster.
- Löschen Sie das Pub/Sub-Thema
Nächste Schritte
- Speichern von Daten mit Cloud Run for Anthos über Cloud Storage
- Erfahren Sie, wie Sie mit der Cloud Vision API neben anstößigen Inhalten auch andere Dinge erkennen
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center