Questo tutorial illustra l'utilizzo di Cloud Run for Anthos, dell'API Cloud Vision e ImageMagick per rilevare e sfocare le immagini offensive caricate in un bucket Cloud Storage. Questo tutorial si basa sul tutorial Utilizzo di Pub/Sub con Cloud Run for Anthos.
Questo tutorial illustra come modificare un'app di esempio esistente. Puoi anche scaricare l'app completata se vuoi.
Obiettivi
- Scrivi, crea ed esegui il deployment di un servizio di elaborazione dati asincrono in Cloud Run for Anthos.
- Richiamare il servizio caricando un file in Cloud Storage, creando un messaggio Pub/Sub.
- Usa l'API Cloud Vision per rilevare contenuti per adulti o violenti.
- Utilizza ImageMagick per sfocare le immagini offensive.
- Testa il servizio caricando l'immagine di uno zombie che mangia carne.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
-
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.
- Installa e inizializza l'interfaccia alla gcloud CLI.
- Installa il componente
kubectl
:gcloud components install kubectl
- Aggiorna i componenti:
gcloud components update
- Utilizzando Cloud Run for Anthos, crea un nuovo cluster utilizzando le istruzioni in Configurazione di Cloud Run for Anthos.
- Configura un argomento Pub/Sub, una sottoscrizione push sicura e un servizio Cloud Run for Anthos iniziale per gestire i messaggi seguendo il tutorial Utilizzo di Pub/Sub con Cloud Run for Anthos.
Configurazione dei valori predefiniti gcloud
Per configurare gcloud con i valori predefiniti per il servizio Cloud Run for Anthos:
Imposta il progetto predefinito:
gcloud config set project PROJECT_ID
Sostituisci PROJECT_ID con il nome del progetto che utilizzi per questo tutorial.
Configura gcloud per il tuo cluster:
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER-NAME gcloud config set run/cluster_location REGION
Sostituisci:
- CLUSTER-NAME con il nome utilizzato per il cluster,
- REGION con la località del cluster supportata di tua scelta.
Informazioni sulla sequenza delle operazioni
Il flusso di dati in questo tutorial è il seguente:
- Un utente carica un'immagine in un bucket Cloud Storage.
- Cloud Storage pubblica un messaggio sul nuovo file in Pub/Sub.
- Pub/Sub esegue il push del messaggio al servizio Cloud Run for Anthos.
- Il servizio Cloud Run for Anthos recupera il file immagine a cui si fa riferimento nel messaggio Pub/Sub.
- Il servizio Cloud Run for Anthos utilizza l'API Cloud Vision per analizzare l'immagine.
- Se vengono rilevati contenuti violenti o per adulti, il servizio Cloud Run for Anthos utilizza ImageMagick per sfocare l'immagine.
- Il servizio Cloud Run for Anthos carica l'immagine sfocata in un altro bucket Cloud Storage da utilizzare.
Il successivo utilizzo dell'immagine sfocata viene lasciato come esercizio per il lettore.
Configurazione dei bucket Cloud Storage
Crea un bucket Cloud Storage per il caricamento delle immagini, dove INPUT_BUCKET_NAME è un nome di bucket univoco a livello globale:
gsutil mb gs://INPUT_BUCKET_NAME
Il servizio Cloud Run for Anthos legge solo questo bucket.
Crea un secondo bucket Cloud Storage per ricevere immagini sfocate, in cui BLURRED_BUCKET_NAME è il nome di un bucket univoco a livello globale:
gsutil mb gs://BLURRED_BUCKET_NAME
Il servizio Cloud Run for Anthos carica le immagini sfocate in questo bucket. L'utilizzo di un bucket separato impedisce alle immagini elaborate di riattivare il servizio.
Nei passaggi seguenti, creerai ed eseguirai il deployment di un servizio che elabora la notifica dei caricamenti di file su INPUT_BUCKET_NAME. Puoi attivare il recapito delle notifiche dopo aver eseguito il deployment e il test del servizio, per evitare chiamate premature al nuovo servizio.
Modifica del codice campione del tutorial Pub/Sub
Questo tutorial si basa sul codice assemblato nel tutorial sull'utilizzo di Pub/Sub. Se non hai ancora completato il tutorial, fallo ora, saltando i passaggi di pulizia e torna qui per aggiungere il comportamento di elaborazione delle immagini.
Aggiunta del codice di elaborazione dell'immagine in corso...
Il codice di elaborazione dell'immagine è separato dalla gestione delle richieste per favorire la leggibilità e la facilità di test. Per aggiungere il codice per l'elaborazione delle immagini:
Cambia la directory del codice campione del tutorial su Pub/Sub.
Aggiungi il codice per importare le dipendenze di elaborazione delle immagini, incluse le librerie da integrare con i servizi Google Cloud, ImageMagick e il file system.
Node.js
Apri un nuovo fileimage.js
nell'editor e copia quanto segue:Python
Apri un nuovo fileimage.py
nell'editor e copia quanto segue:Go
Apri un nuovo fileimagemagick/imagemagick.go
nell'editor e copia quanto segue:Java
Apri un nuovo filesrc/main/java/com/example/cloudrun/ImageMagick.java
nell'editor e copia quanto segue:Aggiungi il codice per ricevere un messaggio Pub/Sub come oggetto evento e controlla l'elaborazione delle immagini.
L'evento contiene dati relativi all'immagine caricata originariamente. Questo codice determina se l'immagine deve essere sfocata controllando i risultati di un'analisi Cloud Vision per i contenuti violenti o per adulti.
Node.js
Python
Go
Java
Recupera l'immagine di riferimento dal bucket di input Cloud Storage creato sopra, utilizza ImageMagick per trasformare l'immagine con un effetto di sfocatura e carica il risultato nel bucket di output.
Node.js
Python
Go
Java
Integrazione dell'elaborazione delle immagini nel codice campione Pub/Sub
Per modificare il servizio esistente e incorporare il codice di elaborazione dell'immagine:
Aggiungi nuove dipendenze per il servizio, incluse le librerie client di Cloud Vision e Cloud Storage:
Node.js
npm install --save gm @google-cloud/storage @google-cloud/vision
Python
Aggiungi le librerie client necessarie in modo cherequirements.txt
abbia il seguente aspetto:Go
L'applicazione di esempio go utilizza i moduli go, le nuove dipendenze aggiunte sopra nell'istruzione di importazioneimagemagick/imagemagick.go
verranno scaricate automaticamente dal comando successivo che ne richiede.Java
Aggiungi la seguente dipendenza in<dependencyManagement>
inpom.xml
: Aggiungi le seguenti dipendenze in<dependencies>
inpom.xml
:Aggiungi il pacchetto di sistema ImageMagick al tuo container modificando l'istruzione
Dockerfile
sotto l'istruzioneFROM
. Se utilizzi un Dockerfile "multi-stage", inseriscilo nella fase finale.Debian/Ubuntu Alpine Scopri di più sull'utilizzo dei pacchetti di sistema nel servizio Cloud Run for Anthos nel tutorial sull'utilizzo dei pacchetti di sistema.
Sostituisci il codice di gestione dei messaggi Pub/Sub esistente con una chiamata funzione alla nostra nuova logica di sfocatura.
Node.js
Il fileapp.js
definisce l'app Express.js e prepara i messaggi Pub/Sub ricevuti per l'uso. Apporta le seguenti modifiche:- Aggiungi codice per importare il nuovo file
image.js
- Rimuovi il codice "Hello World" esistente dalla route
- Aggiungi codice per convalidare ulteriormente il messaggio Pub/Sub
Aggiungi codice per chiamare la nuova funzione di elaborazione delle immagini
Al termine, il codice sarà simile a questo:
Python
Il filemain.py
definisce l'app Flask e prepara l'utilizzo dei messaggi Pub/Sub ricevuti. Apporta le seguenti modifiche:- Aggiungi codice per importare il nuovo file
image.py
- Rimuovi il codice "Hello World" esistente dalla route
- Aggiungi codice per convalidare ulteriormente il messaggio Pub/Sub
Aggiungi codice per chiamare la nuova funzione di elaborazione delle immagini
Al termine, il codice sarà simile a questo:
Go
Il filemain.go
definisce il servizio HTTP e prepara i messaggi Pub/Sub ricevuti per l'uso. Apporta le seguenti modifiche:- Aggiungi codice per importare il nuovo file
imagemagick.go
- Rimuovi il codice "Hello World" esistente dal gestore
- Aggiungi codice per convalidare ulteriormente il messaggio Pub/Sub
- Aggiungi codice per chiamare la nuova funzione di elaborazione delle immagini
Java
Il filePubSubController.java
definisce il controller che gestisce le richieste HTTP e prepara l'utilizzo dei messaggi Pub/Sub ricevuti. Apporta le seguenti modifiche:- Aggiungere le nuove importazioni
- Rimuovi il codice "Hello World" esistente dal controller
- Aggiungi codice per convalidare ulteriormente il messaggio Pub/Sub
- Aggiungi codice per chiamare la nuova funzione di elaborazione delle immagini
- Aggiungi codice per importare il nuovo file
Download dell'anteprima completa
Per recuperare l'esempio di codice completo di elaborazione delle immagini da utilizzare:
Clona il repository dell'app di esempio nella macchina locale:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.
Passa alla directory che contiene il codice campione di 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/
Spedizione del codice
Il codice di spedizione è composto da tre passaggi: la creazione di un'immagine container con Cloud Build, il caricamento dell'immagine container in Container Registry e il deployment dell'immagine container su Cloud Run for Anthos.
Per spedire il codice:
Crea il container e pubblicalo su Container Registry:
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dove PROJECT_ID è l'ID progetto GCP e
pubsub
è il nome che vuoi assegnare al servizio.Se l'operazione va a buon fine, verrà visualizzato un messaggio di operazione riuscita contenente l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e, se necessario, può essere riutilizzata.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dove PROJECT_ID è l'ID progetto GCP e
pubsub
è il nome che vuoi assegnare al servizio.Se l'operazione va a buon fine, verrà visualizzato un messaggio di operazione riuscita contenente l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e, se necessario, può essere riutilizzata.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dove PROJECT_ID è l'ID progetto GCP e
pubsub
è il nome che vuoi assegnare al servizio.Se l'operazione va a buon fine, verrà visualizzato un messaggio di operazione riuscita contenente l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e, se necessario, può essere riutilizzata.
Java
Questo esempio utilizza Jib per creare immagini Docker utilizzando strumenti Java comuni. Jib ottimizza le build dei container senza bisogno di un Dockerfile o senza installare Docker. Scopri di più sulla creazione di container Java con Jib.Utilizzando il Dockerfile, configura e crea un'immagine di base con i pacchetti di sistema installati per eseguire l'override dell'immagine di base predefinita di Jib:
gcloud builds submit --tag gcr.io/PROJECT_ID/imagemagick
Dove PROJECT_ID è il tuo ID progetto GCP.
Crea il tuo container finale con Jib e pubblicalo su Container Registry:
mvn compile jib:build \ -Dimage=gcr.io/PROJECT_ID/pubsub \ -Djib.from.image=gcr.io/PROJECT_ID/imagemagick
Dove PROJECT_ID è il tuo ID progetto GCP.
Esegui questo comando per eseguire il deployment del tuo servizio utilizzando lo stesso nome di servizio utilizzato nel tutorial Pub/Sub:
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
Sostituisci PROJECT_ID con l'ID progetto GCP.
pubsub
è il nome del container epubsub-tutorial
è il nome del servizio. Tieni presente che viene eseguito il deployment dell'immagine container sul servizio e sul cluster configurati in precedenza in Configurazione delle impostazioni predefinite di gcloud.Sostituisci BLURRED_BUCKET_NAME con il bucket Cloud Storage creato in precedenza per ricevere immagini sfocate in modo da impostare la variabile di ambiente.
Attendi il completamento del deployment: questa operazione può richiedere circa mezzo minuto. Se l'operazione riesce, la riga di comando visualizza l'URL del servizio.
Attivazione delle notifiche da Cloud Storage
Configurare Cloud Storage per pubblicare un messaggio in un argomento Pub/Sub ogni volta che un file (noto come un oggetto) viene caricato o modificato. Invia la notifica all'argomento creato in precedenza in modo che qualsiasi nuovo caricamento di file richiami il servizio.
gsutil notification create -t myRunTopic -f json gs://INPUT_BUCKET_NAME
Il comando gsutil è installato come parte di Google Cloud CLI. myRunTopic
è l'argomento creato nel tutorial precedente.
Sostituisci INPUT_BUCKET_NAME con il nome utilizzato durante la creazione dei bucket.
Per ulteriori dettagli sulle notifiche di bucket di archiviazione, consulta la pagina Notifiche di modifica degli oggetti.
Prova in corso
Carica un'immagine offensiva, ad esempio l'immagine di uno zombi che mangia carne:
gsutil cp zombie.jpg gs://INPUT_BUCKET_NAME
dove INPUT_BUCKET_NAME è il bucket Cloud Storage che hai creato in precedenza per il caricamento delle immagini.
Accedi ai log del servizio:
Vai alla pagina Cloud Run for Anthos nella console Google Cloud:
Fai clic sul servizio
pubsub-tutorial
.Seleziona la scheda Log. La visualizzazione dei log potrebbe richiedere alcuni istanti. Se non li vedi immediatamente, ricontrolla dopo qualche istante.
Cerca il messaggio
Blurred image: zombie.png
.Puoi visualizzare le immagini sfocate nel bucket Cloud Storage BLURRED_BUCKET_NAME che hai creato in precedenza: individua il bucket nella pagina Cloud Storage della console Google Cloud
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi mantenerlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- 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.
Eliminazione delle risorse del tutorial
Elimina il servizio Cloud Run for Anthos di cui hai eseguito il deployment in questo tutorial:
gcloud run services delete SERVICE-NAME
Dove SERVICE-NAME è il nome del servizio che hai scelto.
Puoi anche eliminare i servizi Cloud Run for Anthos dalla console Google Cloud:
Rimuovi le configurazioni gcloud predefinite che hai aggiunto durante la configurazione del tutorial:
gcloud config unset run/platform gcloud config unset run/cluster gcloud config unset run/cluster_location
Rimuovi la configurazione del progetto:
gcloud config unset project
Elimina altre risorse Google Cloud create in questo tutorial:
- Elimina l'argomento Pub/Sub
myRunTopic
- Elimina la sottoscrizione Pub/Sub
myRunSubscription
- Elimina l'immagine container denominata
gcr.io/
PROJECT_ID/pubsub
da Container Registry - Elimina l'account di servizio dell'invoker
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
- Elimina i bucket Cloud Storage creati per i segnaposto
INPUT_BUCKET_NAME
eBLURRED_BUCKET_NAME
- Se hai creato un cluster per questo tutorial, elimina il cluster
- Elimina l'argomento Pub/Sub
Passaggi successivi
- Scopri di più sulla persistenza dei dati con Cloud Run for Anthos tramite Cloud Storage
- Scopri come utilizzare l'API Cloud Vision per rilevare contenuti diversi dai contenuti espliciti.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Dai un'occhiata al nostro Centro di architettura cloud.