Ce tutoriel explique comment utiliser Cloud Run for Anthos, l'API Cloud Vision et ImageMagick pour détecter et flouter les images choquantes importées dans un bucket Cloud Storage. Il s'appuie sur le tutoriel Utiliser Pub/Sub avec Cloud Run for Anthos.
Ce tutoriel explique comment modifier un exemple d'application existant. Vous pouvez également télécharger l'exemple complet si vous le souhaitez.
Objectifs
- Écrire, créer et déployer un service de traitement des données asynchrone dans Cloud Run for Anthos
- Appeler le service en important un fichier dans Cloud Storage, en créant un message Pub/Sub
- Utiliser l'API Cloud Vision pour détecter les contenus violents ou réservés aux adultes
- Utiliser ImageMagick pour flouter les images choquantes
- Tester le service en important une image représentant un zombie mangeur de chair
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
-
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.
- Installez et initialisez gcloud CLI.
- Installez le composant
kubectl
:gcloud components install kubectl
- Mettez à jour les composants :
gcloud components update
- À l'aide de Cloud Run for Anthos, créez un cluster en suivant les instructions de la section Configurer Cloud Run for Anthos.
- Configurez un sujet Pub/Sub, un abonnement push sécurisé et un service Cloud Run for Anthos initial pour gérer les messages en suivant le tutoriel Utiliser Pub/Sub avec Cloud Run for Anthos.
Configurer les paramètres par défaut de gcloud
Pour configurer gcloud avec les valeurs par défaut pour votre service Cloud Run pour Anthos, procédez comme suit :
Définissez le projet par défaut :
gcloud config set project PROJECT_ID
Remplacez PROJECT_ID par le nom du projet que vous utilisez pour ce tutoriel.
Configurez gcloud pour votre cluster :
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER-NAME gcloud config set run/cluster_location REGION
Remplacez :
- CLUSTER-NAME par le nom que vous avez utilisé pour votre cluster ;
- REGION par l'emplacement de cluster compatible de votre choix
Comprendre la séquence des opérations
Le flux de données de ce tutoriel comprend les étapes suivantes :
- Un utilisateur importe une image dans un bucket Cloud Storage.
- Cloud Storage publie un message sur le nouveau fichier dans Pub/Sub.
- Pub/Sub envoie le message au service Cloud Run for Anthos.
- Le service Cloud Run for Anthos récupère le fichier image référencé dans le message Pub/Sub.
- Le service Cloud Run for Anthos utilise l'API Cloud Vision pour analyser l'image.
- Si du contenu violent ou réservé aux adultes est détecté, le service Cloud Run for Anthos utilise ImageMagick pour flouter l'image.
- Le service Cloud Run for Anthos importe l'image floutée dans un autre bucket Cloud Storage pour l'utiliser.
L'utilisation ultérieure de l'image floutée est laissée en exercice au lecteur.
Configurer des buckets Cloud Storage
Créez un bucket Cloud Storage pour importer des images, où INPUT_BUCKET_NAME est un nom de bucket unique :
gsutil mb gs://INPUT_BUCKET_NAME
Le service Cloud Run for Anthos ne lit que depuis ce bucket.
Créez un second bucket Cloud Storage destiné à recevoir les images floutées, où BLURRED_BUCKET_NAME est un nom de bucket unique :
gsutil mb gs://BLURRED_BUCKET_NAME
Le service Cloud Run for Anthos importe les images floutées dans ce bucket. L'utilisation d'un bucket distinct empêche les images traitées de déclencher de nouveau le service.
Dans les étapes suivantes, vous allez créer et déployer un service qui traite les notifications sur les importations de fichiers dans le bucket INPUT_BUCKET_NAME. Vous activez l'envoi de notifications après avoir déployé et testé le service, afin d'éviter tout appel prématuré du nouveau service.
Modifier l'exemple de code du tutoriel Pub/Sub
Ce tutoriel s'appuie sur le code assemblé dans le tutoriel Utiliser Pub/Sub. Si vous n'avez pas encore terminé ce tutoriel, faites-le maintenant en ignorant les étapes de nettoyage, puis revenez sur cette page pour ajouter le comportement de traitement des images.
Ajouter du code de traitement des images
Le code de traitement des images est séparé de la gestion des requêtes pour des raisons de lisibilité et de facilité de test. Pour ajouter du code de traitement des images, procédez comme suit :
Accédez au répertoire de l'exemple de code du tutoriel Pub/Sub.
Ajoutez du code pour importer les dépendances de traitement des images, y compris les bibliothèques à intégrer aux services Google Cloud, à ImageMagick et au système de fichiers.
Node.js
Ouvrez un nouveau fichierimage.js
dans votre éditeur et copiez-y ce qui suit:Python
Ouvrez un nouveau fichierimage.py
dans votre éditeur et copiez-y ce qui suit:Go
Ouvrez un nouveau fichierimagemagick/imagemagick.go
dans votre éditeur et copiez-y ce qui suit:Java
Ouvrez un nouveau fichiersrc/main/java/com/example/cloudrun/ImageMagick.java
dans votre éditeur et copiez-y ce qui suit:Ajoutez le code pour recevoir un message Pub/Sub en tant qu'objet d'événement et contrôler le traitement des images.
L'événement contient des données sur l'image importée à l'origine. Ce code détermine si l'image doit être floutée en vérifiant les résultats d'une analyse Cloud Vision pour le contenu violent ou réservé aux adultes.
Node.js
Python
Go
Java
Récupérez l'image référencée dans le bucket d'entrée Cloud Storage créé ci-dessus, utilisez ImageMagick pour transformer l'image avec un effet de flou et importez le résultat dans le bucket de sortie.
Node.js
Python
Go
Java
Intégrer le traitement des images dans l'exemple de code Pub/Sub
Pour modifier le service existant afin d'intégrer le code de traitement des images, procédez comme suit :
Ajoutez de nouvelles dépendances pour votre service, y compris les bibliothèques clientes Cloud Vision et Cloud Storage :
Node.js
npm install --save gm @google-cloud/storage @google-cloud/vision
Python
Ajoutez les bibliothèques clientes nécessaires pour querequirements.txt
se présente comme suit:Go
L'exemple d'application go utilise des modules Go. Les nouvelles dépendances ajoutées ci-dessus dans l'instruction d'importationimagemagick/imagemagick.go
seront automatiquement téléchargées par la commande suivante qui les requiert.Java
Ajoutez la dépendance suivante sous<dependencyManagement>
danspom.xml
: Ajoutez les dépendances suivantes sous<dependencies>
danspom.xml
:Ajoutez le package système ImageMagick à votre conteneur en modifiant le fichier
Dockerfile
sous l'instructionFROM
. Si vous utilisez un fichier Dockerfile "multi-étapes", placez-le à l'étape finale.Debian/Ubuntu Alpine Pour en savoir plus sur l'utilisation des packages système dans votre service Cloud Run for Anthos, consultez le tutoriel Utiliser des packages système.
Remplacez le code de traitement des messages Pub/Sub existant par un appel de fonction à notre nouvelle logique de floutage.
Node.js
Le fichierapp.js
définit l'application Express.js et prépare les messages Pub/Sub reçus en vue de leur utilisation. Apportez les modifications suivantes :- Ajoutez du code pour importer le nouveau fichier
image.js
. - Supprimez le code "Hello World" existant de la route.
- Ajoutez du code pour valider le message Pub/Sub.
Ajoutez du code pour appeler la nouvelle fonction de traitement des images.
Lorsque vous avez terminé, le code se présente comme suit :
Python
Le fichiermain.py
définit l'application Flask et prépare les messages Pub/Sub reçus en vue de leur utilisation. Apportez les modifications suivantes :- Ajoutez du code pour importer le nouveau fichier
image.py
. - Supprimez le code "Hello World" existant de la route.
- Ajoutez du code pour valider le message Pub/Sub.
Ajoutez du code pour appeler la nouvelle fonction de traitement des images.
Lorsque vous avez terminé, le code se présente comme suit :
Go
Le fichiermain.go
définit le service HTTP et prépare les messages Pub/Sub reçus en vue de leur utilisation. Apportez les modifications suivantes :- Ajoutez du code pour importer le nouveau fichier
imagemagick.go
. - Supprimez le code "Hello World" existant du gestionnaire.
- Ajoutez du code pour valider le message Pub/Sub.
- Ajoutez du code pour appeler la nouvelle fonction de traitement des images.
Java
Le fichierPubSubController.java
définit le contrôleur qui gère les requêtes HTTP et prépare les messages Pub/Sub reçus en vue de leur utilisation. Apportez les modifications suivantes :- Ajoutez les nouvelles importations.
- Supprimez le code "Hello World" existant du contrôleur.
- Ajoutez du code pour valider le message Pub/Sub.
- Ajoutez du code pour appeler la nouvelle fonction de traitement des images.
- Ajoutez du code pour importer le nouveau fichier
Télécharger l'exemple complet
Pour récupérer l'intégralité de l'exemple de code de traitement des images à utiliser, procédez comme suit :
Clonez le dépôt de l'exemple d'application sur votre machine locale :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code Cloud Run for Anthos :
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/
Transmettre le code
La transmission du code se déroule en trois étapes : création d'une image de conteneur avec Cloud Build, importation de l'image de conteneur dans Container Registry, puis déploiement de cette image dans Cloud Run pour Anthos.
Pour transmettre votre code, procédez comme suit :
Créez votre conteneur et publiez-le dans Container Registry :
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Où PROJECT_ID est l'ID de votre projet GCP et
pubsub
le nom que vous souhaitez attribuer à votre service.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. Celle-ci est stockée dans Container Registry et peut être réutilisée au besoin.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Où PROJECT_ID est l'ID de votre projet GCP et
pubsub
le nom que vous souhaitez attribuer à votre service.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. Celle-ci est stockée dans Container Registry et peut être réutilisée au besoin.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Où PROJECT_ID est l'ID de votre projet GCP et
pubsub
le nom que vous souhaitez attribuer à votre service.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. Celle-ci est stockée dans Container Registry et peut être réutilisée au besoin.
Java
Cet exemple utilise Jib pour créer des images Docker à l'aide d'outils Java courants. Jib optimise les builds de conteneurs sans requérir de fichier Dockerfile ni d'installation Docker. Découvrez comment créer des conteneurs Java avec Jib.À l'aide du fichier Dockerfile, configurez et créez une image de base avec les packages système installés pour remplacer l'image de base par défaut de Jib :
gcloud builds submit --tag gcr.io/PROJECT_ID/imagemagick
Où PROJECT_ID est l'ID de votre projet GCP.
Créez votre conteneur final avec Jib et publiez-le sur Container Registry :
mvn compile jib:build \ -Dimage=gcr.io/PROJECT_ID/pubsub \ -Djib.from.image=gcr.io/PROJECT_ID/imagemagick
Où PROJECT_ID est l'ID de votre projet GCP.
Exécutez la commande suivante pour déployer votre service, en utilisant le même nom de service que celui utilisé dans le tutoriel Utiliser Pub/Sub avec Cloud Run for Anthos sur Google Cloud :
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
Remplacez PROJECT_ID par l'ID de votre projet GCP.
pubsub
correspond au nom du conteneur etpubsub-tutorial
au nom du service. Notez que l'image de conteneur est déployée sur le service et le cluster que vous avez configurés précédemment dans la section Configurer les paramètres par défaut de gcloud.Pour définir la variable d'environnement, remplacez BLURRED_BUCKET_NAME par le bucket Cloud Storage destiné à recevoir les images floutées que vous avez créé précédemment.
Patientez jusqu'à la fin du déploiement, soit environ 30 secondes. En cas de réussite, la ligne de commande affiche l'URL du service.
Activer les notifications depuis Cloud Storage
Configurez Cloud Storage pour publier un message dans un sujet Pub/Sub chaque fois qu'un fichier (appelé "objet") est importé ou modifié. Envoyez la notification au sujet créé précédemment pour que toute nouvelle importation de fichier appelle le service.
gsutil notification create -t myRunTopic -f json gs://INPUT_BUCKET_NAME
La commande gsutil est installée dans la CLI Google Cloud. myRunTopic
est le sujet que vous avez créé dans le tutoriel précédent.
Remplacez INPUT_BUCKET_NAME par le nom que vous avez utilisé lors de la création des buckets.
Pour plus d'informations sur les notifications concernant les buckets de stockage, consultez la section Notifications de modification des objets.
Essayez-le !
Importez une image choquante, telle que cette image d'un zombie mangeur de chair :
gsutil cp zombie.jpg gs://INPUT_BUCKET_NAME
où INPUT_BUCKET_NAME est le bucket Cloud Storage que vous avez créé précédemment pour importer des images.
Accédez aux journaux du service :
Accédez à la page Cloud Run for Anthos de la console Google Cloud :
Cliquez sur le service
pubsub-tutorial
.Sélectionnez l'onglet Journaux. L'affichage des journaux peut nécessiter quelques instants. S'ils n'apparaissent pas immédiatement, patientez et vérifiez de nouveau.
Recherchez le message
Blurred image: zombie.png
.Vous pouvez afficher les images floutées dans le bucket Cloud Storage BLURRED_BUCKET_NAME que vous avez créé précédemment: localisez le bucket sur la page Cloud Storage dans la console Google Cloud.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run pour Anthos que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE-NAME
Où SERVICE-NAME est le nom de service que vous avez choisi.
Vous pouvez également supprimer des services Cloud Run for Anthos depuis la console Google Cloud :
Supprimez les configurations gcloud par défaut que vous avez ajoutées lors de la configuration du tutoriel :
gcloud config unset run/platform gcloud config unset run/cluster gcloud config unset run/cluster_location
Supprimez la configuration du projet :
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
- Supprimez le sujet Pub/Sub
myRunTopic
. - Supprimez l'abonnement Pub/Sub
myRunSubscription
. - Supprimez l'image de conteneur nommée
gcr.io/
PROJECT_ID/pubsub
de Container Registry. - Supprimez le compte de service demandeur
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
. - Supprimez les buckets Cloud Storage créés pour les espaces réservés
INPUT_BUCKET_NAME
etBLURRED_BUCKET_NAME
. - Si vous avez créé un cluster pour ce tutoriel, supprimez-le.
- Supprimez le sujet Pub/Sub
Étapes suivantes
- Apprenez-en plus sur la persistance des données avec Cloud Run for Anthos via Cloud Storage.
- Découvrez comment utiliser l'API Cloud Vision pour détecter des éléments autres que du contenu explicite.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.