Questo tutorial mostra come utilizzare Workflows per collegare una serie servizi insieme. Collegando due servizi HTTP pubblici utilizzando le funzioni Cloud Run, un'API REST esterna e Cloud Run, puoi creare un'applicazione flessibile e serverless.
Obiettivi
In questo tutorial utilizzerai Google Cloud CLI per creare un singolo flusso di lavoro, collegare un servizio alla volta:
- Esegui il deployment di due servizi di funzioni Cloud Run: la prima funzione genera un numero casuale e poi lo passa alla seconda funzione che lo moltiplica.
- Utilizzando Workflows, connetti le due funzioni HTTP. Eseguire il flusso di lavoro e restituire un risultato che viene poi passato a un tramite Google Cloud CLI o tramite l'API Compute Engine.
- Utilizzando Workflows, connetti un'API HTTP esterna
che restituisce
log
per un determinato numero. Esegui il flusso di lavoro per restituire un risultato che viene poi passato a Cloud Run completamente gestito di Google Cloud. - Esegui il deployment di un servizio Cloud Run che consente
solo per l'accesso. Il servizio restituisce il valore
math.floor
per un determinato numero. - Utilizzando Workflows, connetti Cloud Run eseguire l'intero flusso di lavoro e restituire un risultato finale.
Il seguente diagramma mostra una panoramica del processo e una visualizzazione del flusso di lavoro finale:
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Enable the Artifact Registry, Cloud Build, Cloud Run functions, Cloud Run, Cloud Storage, and Workflows APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com run.googleapis.com storage.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Enable the Artifact Registry, Cloud Build, Cloud Run functions, Cloud Run, Cloud Storage, and Workflows APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com run.googleapis.com storage.googleapis.com workflows.googleapis.com - Aggiorna i componenti di Google Cloud CLI:
gcloud components update
- Se esegui comandi all'interno di Cloud Shell, stai già
autenticati con gcloud CLI; altrimenti accedi con
:
gcloud auth login
- Imposta la località predefinita utilizzata in questo tutorial:
gcloud config set project PROJECT_ID export REGION=REGION gcloud config set functions/region ${REGION} gcloud config set run/region ${REGION} gcloud config set workflows/location ${REGION}
Sostituisci
REGION
con i Workflows supportati località di tua scelta. -
Se sei il creator del progetto, ti viene concesso il ruolo di proprietario di base (
roles/owner
). Per impostazione predefinita, questo ruolo di Identity and Access Management (IAM) include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle risorse Google Cloud e puoi saltare questo passaggio.Se non sei il creator del progetto, le autorizzazioni richieste devono essere concesse al principale appropriato. Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per applicazioni carichi di lavoro di computing). Per ulteriori informazioni, consulta Pagina Ruoli e autorizzazioni per la destinazione del tuo evento.
Autorizzazioni obbligatorie
Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Sviluppatore Cloud Functions (
roles/cloudfunctions.developer
) -
Amministratore Cloud Run (
roles/run.admin
) -
Crea account di servizio (
roles/iam.serviceAccountCreator
) -
Amministratore IAM progetto (
roles/resourcemanager.projectIamAdmin
) -
Utente account di servizio (
roles/iam.serviceAccountUser
) -
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Storage Admin (
roles/storage.admin
) -
Editor flussi di lavoro (
roles/workflows.editor
)
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 i ruoli personalizzati o altri ruoli predefiniti.
-
Editor Cloud Build (
Esegui il deployment del primo servizio di funzioni Cloud Run
Dopo aver ricevuto una richiesta HTTP, questa funzione HTTP genera un numero random tra 1 e 100 e poi lo restituisce in formato JSON.
Crea una directory denominata
randomgen
e passa a questa directory:mkdir ~/randomgen cd ~/randomgen
Crea un file di testo con il nome
main.py
che contenga quanto segue. Codice Python:Per supportare una dipendenza su Flask per l'elaborazione HTTP, crea un file di testo per il gestore di pacchetti pip. Assegna il nome
requirements.txt
al file e aggiungi quanto segue:Crea un account di servizio da utilizzare per Workflows:
export SERVICE_ACCOUNT=workflows-sa gcloud iam service-accounts create ${SERVICE_ACCOUNT}
consentire all'account di servizio di chiamare Cloud Run autenticato assegna il ruolo
run.invoker
a Workflows account di servizio:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SERVICE_ACCOUNT}@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/run.invoker"
Esegui il deployment della funzione con un trigger HTTP e consenti l'accesso non autenticato:
gcloud functions deploy randomgen-function \ --gen2 \ --runtime python310 \ --entry-point=randomgen \ --trigger-http \ --allow-unauthenticated
Il deployment della funzione potrebbe richiedere alcuni minuti. In alternativa, puoi usa l'interfaccia delle funzioni di Cloud Run nella console Google Cloud per eseguire il deployment della funzione.
Una volta eseguito il deployment della funzione
randomgen
, puoi verificare ProprietàhttpsTrigger.url
:gcloud functions describe randomgen-function \ --gen2 \ --format="value(serviceConfig.uri)"
Salva l'URL. Dovrai aggiungerlo al file di origine del flusso di lavoro in allenamenti successivi.
Puoi provare la funzione con il seguente comando curl:
curl $(gcloud functions describe randomgen-function \ --gen2 \ --format="value(serviceConfig.uri)")
Viene generato e restituito un numero casuale.
Esegui il deployment del secondo servizio di funzioni Cloud Run
Dopo aver ricevuto una richiesta HTTP, questa funzione HTTP estrae input
dal corpo JSON, lo moltiplica per 2 e restituisce il risultato in formato JSON.
Torna alla home directory:
cd ~
Crea una directory denominata
multiply
e passa a questa directory:mkdir ~/multiply cd ~/multiply
Crea un file di testo con il nome
main.py
che contenga quanto segue. Codice Python:Per supportare una dipendenza su Flask per l'elaborazione HTTP, crea un file di testo per il gestore di pacchetti pip. Assegna il nome
requirements.txt
al file e aggiungi quanto segue:Esegui il deployment della funzione con un trigger HTTP e consenti l'accesso non autenticato:
gcloud functions deploy multiply-function \ --gen2 \ --runtime python310 \ --entry-point=multiply \ --trigger-http \ --allow-unauthenticated
Il deployment della funzione potrebbe richiedere alcuni minuti.In alternativa, puoi usa l'interfaccia delle funzioni di Cloud Run nella console Google Cloud per eseguire il deployment della funzione.
Una volta eseguito il deployment della funzione
multiply
, puoi verificare ProprietàhttpsTrigger.url
:gcloud functions describe multiply-function \ --gen2\ --format="value(serviceConfig.uri)"
Salva l'URL. Dovrai aggiungerlo al file di origine del flusso di lavoro in allenamenti successivi.
Puoi provare la funzione con il seguente comando curl:
curl -X POST MULTIPLY_FUNCTION_URL \ -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"input": 5}'
Deve essere restituito il numero 10.
Collega i due servizi di funzioni Cloud Run in un flusso di lavoro
Un flusso di lavoro è costituito da una serie di passaggi descritti utilizzando Sintassi di Workflows, che può essere scritta in formato YAML o JSON formato. Questa è la definizione del flusso di lavoro. Per una spiegazione dettagliata, consulta Pagina Riferimento per la sintassi.
Torna alla home directory:
cd ~
Crea un file di testo con il nome
workflow.yaml
che contenga quanto segue. contenuti:- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - return_result: return: ${multiply_result}
- Sostituisci
RANDOMGEN_FUNCTION_URL
con l'URL del tuo Funzionerandomgen
. - Sostituisci
MULTIPLY_FUNCTION_URL
con l'URL del tuo Funzionemultiply
.
Questo file di origine collega le due funzioni HTTP e restituisce un risultato finale.
- Sostituisci
Dopo aver creato il flusso di lavoro, puoi eseguirne il deployment, rendendolo pronto per l'esecuzione.
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml
Sostituisci
WORKFLOW_NAME
con un nome per il flusso di lavoro.Esegui il flusso di lavoro:
gcloud workflows run WORKFLOW_NAME
Un'esecuzione è una singola esecuzione della logica contenuta nella definizione di un flusso di lavoro. Tutte le esecuzioni dei flussi di lavoro sono indipendenti e la rapida scalabilità Workflows consente un numero elevato di esecuzioni simultanee.
Dopo aver eseguito il flusso di lavoro, l'output dovrebbe essere simile al seguente:
result: '{"body":{"multiplied":120},"code":200,"headers":{"Alt-Svc":"h3-29=\":443\"; ... startTime: '2021-05-05T14:17:39.135251700Z' state: SUCCEEDED ...
Connetti un servizio REST pubblico nel flusso di lavoro
Aggiorna il flusso di lavoro esistente e connetti un'API REST pubblica
(math.js)
in grado di valutare espressioni matematiche. Ad esempio:
curl https://api.mathjs.org/v4/?'expr=log(56)'
.
Nota che, poiché hai eseguito il deployment del flusso di lavoro, puoi anche modificarlo il Pagina Flussi di lavoro nella console Google Cloud.
Modifica il file di origine per il flusso di lavoro e sostituiscilo con quanto segue contenuti:
- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - log_function: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiply_result.body.multiplied) + ")"} result: log_result - return_result: return: ${log_result}
- Sostituisci
RANDOMGEN_FUNCTION_URL
con l'URL del tuo Funzionerandomgen
. - Sostituisci
MULTIPLY_FUNCTION_URL
con l'URL del tuo Funzionemultiply
.
Questo collega il servizio REST esterno ai servizi delle funzioni Cloud Run. e restituisce un risultato finale.
- Sostituisci
Esegui il deployment del flusso di lavoro modificato:
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml
Esegui il deployment di un servizio Cloud Run
Eseguire il deployment di un servizio Cloud Run che, dopo aver ricevuto un messaggio HTTP
richiesta, estrae input
dal corpo JSON, ne calcola math.floor
e
restituisce il risultato.
Crea una directory denominata
floor
e passa a quella directory:mkdir ~/floor cd ~/floor
Crea un file di testo con il nome
app.py
che contenga quanto segue. Codice Python:Nella stessa directory, crea un elemento
Dockerfile
con i seguenti contenuti:Crea un repository standard Artifact Registry in cui archiviare i tuoi Immagine container Docker:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=${REGION}
Sostituisci
REPOSITORY
con un nome univoco per repository Git.Crea l'immagine container:
export SERVICE_NAME=floor gcloud builds submit --tag ${REGION}-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
Eseguire il deployment dell'immagine container in Cloud Run, assicurandosi che venga accetta chiamate autenticate:
gcloud run deploy ${SERVICE_NAME} \ --image ${REGION}-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}:latest \ --no-allow-unauthenticated
Quando vedi l'URL del servizio, il deployment è completato. Dovrai specificare questo URL durante l'aggiornamento della definizione del flusso di lavoro.
connetti il servizio Cloud Run nel flusso di lavoro
Aggiorna il flusso di lavoro esistente e specifica l'URL per Cloud Run completamente gestito di Google Cloud.
Modifica il file di origine per il flusso di lavoro e sostituiscilo con quanto segue contenuti:
- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - log_function: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiply_result.body.multiplied) + ")"} result: log_result - floor_function: call: http.post args: url: CLOUD_RUN_SERVICE_URL auth: type: OIDC body: input: ${log_result.body} result: floor_result - create_output_map: assign: - outputMap: randomResult: ${randomgen_result} multiplyResult: ${multiply_result} logResult: ${log_result} floorResult: ${floor_result} - return_output: return: ${outputMap}
- Sostituisci
RANDOMGEN_FUNCTION_URL
con l'URL della funzionerandomgen
. - Sostituisci
MULTIPLY_FUNCTION_URL
con l'URL del tuo Funzionemultiply
. - Sostituisci
CLOUD_RUN_SERVICE_URL
con URL del servizio Cloud Run.
Questa operazione connette il servizio Cloud Run nel flusso di lavoro. Nota che la chiave
auth
garantisca il passaggio di un token di autenticazione la chiamata al servizio Cloud Run. Per ulteriori informazioni, consulta Effettuare richieste autenticate da un flusso di lavoro.- Sostituisci
Esegui il deployment del flusso di lavoro modificato:
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml
Esegui il flusso di lavoro finale:
gcloud workflows run WORKFLOW_NAME
L'output dovrebbe essere simile al seguente:
result: '{"Floor":{"body":"4","code":200 ... "Log":{"body":"4.02535169073515","code":200 ... "Multiply":{"body":{"multiplied":56},"code":200 ... "Random":{"body":{"random":28},"code":200 ... startTime: '2023-11-13T21:22:56.782669001Z' state: SUCCEEDED
Complimenti! Hai eseguito il deployment ed eseguito un flusso di lavoro che collega un insieme di servizi.
Per creare flussi di lavoro più complessi utilizzando espressioni, salti condizionali, codifica o decodifica Base64, sottoflussi e altro ancora, consulta la documentazione di riferimento sulla sintassi dei flussi di lavoro e la panoramica della libreria standard.
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.
Elimina le risorse del tutorial
Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial.
Elimina il flusso di lavoro che hai creato in questo tutorial.
Eliminare l'immagine container da Artifact Registry.
Rimuovi le configurazioni predefinite di Google Cloud CLI che hai aggiunto durante configurazione del tutorial:
gcloud config unset functions/region gcloud config unset run/region gcloud config unset workflows/location gcloud config unset project