Questo tutorial mostra come creare un servizio Cloud Run personalizzato
che trasforma un parametro di input per la descrizione del grafico in un diagramma nell'elemento PNG
formato dell'immagine. che utilizza Graphviz e
viene installato come pacchetto di sistema nell'ambiente container del servizio.
Graphviz viene utilizzato tramite le utilità a riga di comando per gestire le richieste.
Obiettivi
- Scrivere e creare un container personalizzato con un Dockerfile
- Scrivi, crea ed esegui il deployment di un servizio Cloud Run
- Usa il punto Graphviz per generare diagrammi
- Testa il servizio pubblicando un diagramma della sintassi DOT dalla raccolta o da una tua creazione
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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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.
-
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.
- Abilita l'API Cloud Run Admin
- Installa e inizializza con gcloud CLI.
- Aggiorna i componenti:
gcloud components update
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare il tutorial: chiedi all'amministratore di concederti i seguenti ruoli IAM sul tuo progetto:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Amministratore Cloud Run (
roles/run.admin
) -
Crea account di servizio (
roles/iam.serviceAccountCreator
) -
Utente account di servizio (
roles/iam.serviceAccountUser
) -
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Storage Admin (
roles/storage.admin
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Configurazione dei valori predefiniti di gcloud
Per configurare gcloud con i valori predefiniti per il tuo servizio Cloud Run:
Imposta il progetto predefinito:
gcloud config set project PROJECT_ID
Sostituisci PROJECT_ID con il nome del progetto per cui hai creato questo tutorial.
Configura gcloud per la regione scelta:
gcloud config set run/region REGION
Sostituisci REGION con il Cloud Run supportato regione a tua scelta.
Località Cloud Run
Cloud Run è regionale, il che significa che l'infrastruttura
dei tuoi servizi Cloud Run si trova in una regione specifica
gestiti da Google in modo che siano disponibili in modo ridondante
tutte le zone all'interno di quella regione.
Soddisfare i requisiti di latenza, disponibilità o durabilità è fondamentale
i fattori necessari per selezionare la regione in cui vengono eseguiti i servizi Cloud Run.
Generalmente puoi selezionare la regione più vicina ai tuoi utenti, ma devi considerare
la località dell'altro account Google Cloud
prodotti utilizzati dal tuo servizio Cloud Run.
L'utilizzo combinato dei prodotti Google Cloud in più località può influire
nonché la latenza del tuo servizio.
Cloud Run è disponibile nelle regioni seguenti:
Soggetto ai prezzi di Livello 1
asia-east1
(Taiwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)europe-north1
(Finlandia) A basse emissioni di CO2europe-southwest1
(Madrid) A basse emissioni di CO2europe-west1
(Belgio) A basse emissioni di CO2europe-west4
(Paesi Bassi) A basse emissioni di CO2europe-west8
(Milano)europe-west9
(Parigi) A basse emissioni di CO2me-west1
(Tel Aviv)us-central1
(Iowa) A basse emissioni di CO2us-east1
(Carolina del Sud)us-east4
(Virginia del Nord)us-east5
(Colombo)us-south1
(Dallas) A basse emissioni di CO2us-west1
(Oregon) A basse emissioni di CO2
Soggetto ai prezzi di Livello 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Seul, Corea del Sud)asia-southeast1
(Singapore)asia-southeast2
(Giacarta)asia-south1
(Mumbai, India)asia-south2
(Delhi, India)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsavia, Polonia)europe-west10
(Berlino) A basse emissioni di CO2europe-west12
(Torino)europe-west2
(Londra, Regno Unito) A basse emissioni di CO2europe-west3
(Francoforte, Germania) A basse emissioni di CO2europe-west6
(Zurigo, Svizzera) A basse emissioni di CO2me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal) A basse emissioni di CO2northamerica-northeast2
(Toronto) A basse emissioni di CO2southamerica-east1
(San Paolo, Brasile) A basse emissioni di CO2southamerica-west1
(Santiago, Cile) A basse emissioni di CO2us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Se hai già creato un servizio Cloud Run, puoi visualizzare nella dashboard di Cloud Run all'interno Console Google Cloud.
Recupero dell'esempio di codice in corso
Per recuperare l'esempio di codice da utilizzare:
Clona il repository dell'app di esempio nella tua macchina locale:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
In alternativa, puoi scarica l'esempio . come file ZIP ed estrarlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
In alternativa, puoi scarica l'esempio . come file ZIP ed estrarlo.
Vai
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
In alternativa, puoi scarica l'esempio . come file ZIP ed estrarlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
In alternativa, puoi scarica l'esempio . come file ZIP ed estrarlo.
Passa alla directory che contiene l'esempio di Cloud Run codice:
Node.js
cd nodejs-docs-samples/run/system-package/
Python
cd python-docs-samples/run/system-package/
Vai
cd golang-samples/run/system_package/
Java
cd java-docs-samples/run/system-package/
Visualizzazione dell'architettura
L'architettura di base è simile alla seguente:
L'utente invia una richiesta HTTP al servizio Cloud Run che esegue un'utilità Graphviz per trasformare la richiesta in un'immagine. L'immagine è inviati all'utente come risposta HTTP.
Nozioni di base sul codice
Definisci la configurazione del tuo ambiente con l'Dockerfile
Dockerfile
è specifico per la lingua e l'ambiente operativo di base.
come Ubuntu, che il tuo servizio utilizzerà.
La guida rapida alla creazione e al deployment
mostra vari Dockerfiles
che possono essere utilizzati come punto di partenza per creare un
Dockerfile
per altri servizi.
Questo servizio richiede uno o più pacchetti di sistema aggiuntivi non disponibili per impostazione predefinita.
Apri
Dockerfile
in un editor.Cerca un
Dockerfile
RUN
l'Informativa. Questa istruzione consente di eseguire comandi shell arbitrari per modificare dell'ambiente. SeDockerfile
prevede più fasi, identificate da più istruzioniFROM
, lo troverai nell'ultima fase.I pacchetti specifici richiesti e il meccanismo per installarli variano a seconda il sistema operativo dichiarato all'interno del container.
Per ricevere istruzioni relative al tuo sistema operativo o all'immagine di base, fai clic sull'icona scheda appropriata.
Debian/Ubuntu Alpine di Gemini Advanced. Alps richiede un secondo pacchetto per il supporto dei caratteri.Per determinare il sistema operativo dell'immagine container, controlla il nome in l'istruzione
FROM
o un file README associato all'immagine di base. Ad esempio: Se estendi danode
, puoi trovare la documentazione e l'istanza principaleDockerfile
su Docker Hub.Testa la personalizzazione creando l'immagine utilizzando
docker build
in locale o Cloud Build.
Gestione delle richieste in entrata
Il servizio di esempio utilizza i parametri della richiesta HTTP in entrata per richiamare un
che esegue il comando di utilità dot
appropriato.
Nel gestore HTTP di seguito, viene estratto un parametro di input per la descrizione del grafico
la variabile stringa di query dot
.
Le descrizioni dei grafici possono includere caratteri che devono essere Codificato come URL per l'utilizzo in una stringa di query.
Node.js
Python
Vai
Java
Dovrai distinguere tra errori interni del server e utenti non validi
di testo. Questo servizio di esempio restituisce un errore interno del server per tutti i punti
errori della riga di comando, a meno che il messaggio di errore non contenga la stringa syntax
, che
indica un problema di input utente.
Generare un diagramma
La logica di base della generazione di diagrammi utilizza lo strumento a riga di comando. il parametro di input della descrizione del grafico in un diagramma nel formato di immagine PNG.
Node.js
Python
Vai
Java
Progettazione di un servizio sicuro
Eventuali vulnerabilità nello strumento dot
sono potenziali vulnerabilità di
servizio web. Puoi mitigare questo problema utilizzando versioni aggiornate del
graphviz
creando regolarmente l'immagine container.
Se estendi l'esempio corrente in modo da accettare l'input utente come riga di comando occorre proteggere attacchi di tipo command-injection. Alcuni di i modi per prevenire gli attacchi di iniezione includono:
- Mappatura degli input a un dizionario di parametri supportati
- Gli input di convalida corrispondono a un intervallo di valori di sicurezza nota, magari utilizzando regolari espressioni
- Sequenza di escape degli input per garantire che la sintassi della shell non venga valutata
Puoi mitigare ulteriormente le potenziali vulnerabilità eseguendo il deployment del servizio con un account di servizio a cui non sono state concesse le autorizzazioni per utilizzare Google Cloud piuttosto che usare l'account predefinito, che di solito ha usato autorizzazioni aggiuntive. Per questo motivo, i passaggi in questo tutorial creare e utilizzare un nuovo account di servizio.
Spedizione del codice
Per distribuire il codice, devi utilizzare Cloud Build e caricarlo sul Artifact Registry ed eseguire il deployment su Cloud Run:
Crea un Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
Sostituisci:
- REPOSITORY con un nome univoco per il repository. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.
- REGION con la regione Google Cloud da utilizzare per nel repository Artifact Registry.
Esegui questo comando per creare il container e pubblicarlo su Artifact Registry.
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
Dove PROJECT_ID è l'ID progetto Google Cloud e
graphviz
è l'ID che vuoi assegnare al servizio.Se l'operazione riesce, verrà visualizzato il messaggio SUCCESS contenente l'ID, la creazione ora e nome dell'immagine. L'immagine è archiviata in Artifact Registry e può essere se lo desideri,
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
Dove PROJECT_ID è l'ID progetto Google Cloud e
graphviz
è l'ID che vuoi assegnare al servizio.Se l'operazione riesce, verrà visualizzato il messaggio SUCCESS contenente l'ID, la creazione ora e nome dell'immagine. L'immagine è archiviata in Artifact Registry e può essere riutilizzate, se necessario.
Vai
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
Dove PROJECT_ID è l'ID progetto Google Cloud e
graphviz
è l'ID che vuoi assegnare al servizio.Se l'operazione riesce, verrà visualizzato il messaggio SUCCESS contenente l'ID, la creazione ora e nome dell'immagine. L'immagine è archiviata in Artifact Registry e può essere riutilizzate, se necessario.
Java
Questo esempio utilizza Jib per creare utilizzando strumenti Java comuni. Jib ottimizza le build di container senza la necessità di un Dockerfile o di avere Docker installato. Scopri di più sulla creazione di container Java con Jib.Utilizzando il Dockerfile, configura e crea un'immagine di base con il sistema pacchetti installati per sostituire l'immagine di base predefinita di Jib:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz-base
Dove PROJECT_ID è l'ID progetto Google Cloud.
Utilizza gcloud credentials helper per autorizzare Docker a eseguire il push in Artifact Registry.
gcloud auth configure-docker
Crea il container finale con Jib e pubblicalo su Artifact Registry:
mvn compile jib:build \ -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz \ -Djib.from.image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz-base
Dove PROJECT_ID è l'ID progetto Google Cloud.
Esegui il deployment utilizzando:
gcloud
- Crea un nuovo account di servizio. Il tuo codice, inclusi eventuali pacchetti di sistema
può usare solo quelle
Servizi Google Cloud concessi a questo account di servizio.
Dove SA_NAME è un nome assegnato a questo account di servizio. Se c'è a causa di un errore o una vulnerabilità nel codice, il codice non sarà in grado di accedere ad alcuna delle altre risorse del progetto Google Cloud.gcloud iam service-accounts create SA_NAME
- Esegui il deployment del codice specificando l'account di servizio.
Dove PROJECT_ID è l'ID progetto Google Cloud, SA_NAME è il nome dell'account di servizio che hai creato, mentregcloud run deploy graphviz-web --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
graphviz
è del container sopra, mentregraphviz-web
è il nome del completamente gestito di Google Cloud. RispondiY
alla richiesta di autorizzazione per gli utenti non autenticati. . Per ulteriori informazioni, consulta Gestire l'accesso i dettagli sull'autenticazione basata su IAM. - 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.
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.
Il codice Terraform seguente crea un servizio Cloud Run.
Sostituisci IMAGE_URL con un riferimento all'immagine container, per ad esempio
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. L'URL ha la formaLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
di Google.Il seguente codice Terraform rende pubblico il tuo servizio Cloud Run.
- Crea un nuovo account di servizio. Il tuo codice, inclusi eventuali pacchetti di sistema
può usare solo quelle
Servizi Google Cloud concessi a questo account di servizio.
Se vuoi eseguire il deployment di un aggiornamento del codice nel servizio, ripeti la precedente passaggi. Ogni deployment in un servizio crea una nuova revisione e, e inizia a gestire il traffico quando è pronto.
Fai una prova
Prova il tuo servizio inviando richieste POST
HTTP con sintassi DOT
nel payload della richiesta.
Invia una richiesta HTTP al tuo servizio.
Copia l'URL nella barra degli URL del browser e aggiorna
[SERVICE_DOMAIN]
:https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }
Puoi incorporare il diagramma in una pagina web:
<img src="https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }" />
Apri il file
diagram.png
risultante in qualsiasi applicazione che supportiPNG
file, come Chrome.Dovrebbe avere il seguente aspetto:
Puoi esplorare una piccola raccolta di descrizioni dei diagrammi già pronte.
- Copia i contenuti del file
.dot
selezionato Invia una richiesta HTTP al tuo servizio.
Copia l'URL nella barra degli URL del browser.
https://SERVICE_DOMAIN/diagram.png?dot=SELECTED DOTFILE CONTENTS
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 l'aggiunta delle modifiche In questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione 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 in corso...
Elimina il servizio Cloud Run 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.
I servizi Cloud Run possono essere eliminati anche Console Google Cloud.
Rimuovi la configurazione predefinita della regione gcloud che hai aggiunto durante il tutorial configurazione:
gcloud config unset run/region
Rimuovi la configurazione del progetto:
gcloud config unset project
Elimina altre risorse Google Cloud create in questo tutorial:
Elimina l'immagine container denominata
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/graphviz
da Artifact Registry.Elimina l'account di servizio SA_NAME.
gcloud iam service-accounts delete SA_NAME@PROJECT_ID.iam.gserviceaccount.com
Passaggi successivi
- Sperimenta con l'app Graphviz:
- È stato aggiunto il supporto di altre utilità di Graphviz che applicano algoritmi diversi a la generazione di diagrammi.
- Salva i diagrammi in Cloud Storage. Vuoi salvare l'immagine? o la sintassi DOT?
- Implementa la protezione dall'abuso dei contenuti con l'API Cloud Natural Language.
- Guarda un altro esempio di pacchetto di sistema nella Tutorial sull'elaborazione delle immagini con Cloud Run.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Centro architetture cloud.