Attivare Workflows utilizzando i messaggi Pub/Sub (gcloud CLI)
Questa guida rapida mostra come eseguire un workflow utilizzando un trigger Eventarc che riceve eventi utilizzando Pub/Sub. Il trigger esegue il workflow passando gli eventi distribuiti tramite Pub/Sub come argomenti runtime a un workflow di destinazione.
In questa guida rapida:
- Utilizzerai Workflows per creare ed eseguire il deployment di un flusso di lavoro che decodifica e restituisce i messaggi Pub/Sub.
- Creerai un trigger Eventarc che collega un argomento Pub/Sub a un ricevitore di eventi Workflows.
- Pubblicherai un messaggio nell'argomento Pub/Sub per generare un evento. Questo evento viene passato come argomento runtime nel flusso di lavoro di destinazione.
- Visualizzerai il messaggio Pub/Sub come risultato dell'esecuzione del workflow.
Prima di iniziare
Assicurati di avere accesso a questa funzionalità richiedendo l'aggiunta del tuo progetto alle anteprime private per Google Cloud Workflows.
- Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per eseguire, testare ed eseguire il deployment dei carichi di lavoro.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
- Aggiorna i componenti gcloud:
gcloud components update
- Attiva le API Compute Engine, Eventarc, Pub/Sub e Workflows.
gcloud services enable \ compute.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ workflows.googleapis.com \ workflowexecutions.googleapis.com
- Imposta le variabili di configurazione utilizzate in questo tutorial:
export WORKFLOW_LOCATION=us-central1 export TRIGGER_LOCATION=us-central1 export PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID} gcloud config set workflows/location ${WORKFLOW_LOCATION} gcloud config set eventarc/location ${TRIGGER_LOCATION}
-
Se sei il creatore del progetto, ti viene concesso il ruolo di base Proprietario (
roles/owner). Per impostazione predefinita, questo ruolo Identity and Access Management (IAM) include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle Google Cloud risorse e puoi saltare questo passaggio.Se non sei il creatore del progetto, le autorizzazioni richieste devono essere concesse al principal appropriato nel progetto. Ad esempio, un principal può essere un Account Google (per gli utenti finali) o un account di servizio (per applicazioni e carichi di lavoro di calcolo). Per saperne di più, consulta la pagina Ruoli e autorizzazioni per la destinazione dell'evento.
Autorizzazioni obbligatorie
Per ottenere le autorizzazioni necessarie per completare questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Eventarc Admin (
roles/eventarc.admin) -
Logs View Accessor (
roles/logging.viewAccessor) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Pub/Sub Publisher (
roles/pubsub.publisher) -
Service Account Admin (
roles/iam.serviceAccountAdmin) -
Utente Service Account (
roles/iam.serviceAccountUser) -
Amministratore Service Usage (
roles/serviceusage.serviceUsageAdmin) -
Workflows Admin (
roles/workflows.admin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Eventarc Admin (
Prendi nota del service account predefinito di Compute Engine, in quanto lo collegherai a un trigger Eventarc per rappresentare l'identità del trigger a scopo di test. Questo account di servizio viene creato automaticamente dopo l'attivazione o l'utilizzo di un Google Cloud servizio che utilizza Compute Engine e con il seguente formato email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sostituisci
PROJECT_NUMBERcon il tuo Google Cloud numero del progetto. Puoi trovare il numero di progetto nella pagina di benvenuto dellaconsolle o eseguendo questo comando: Google Cloudgcloud projects describe PROJECT_ID --format='value(projectNumber)'
Per gli ambienti di produzione, ti consigliamo vivamente di creare un nuovo service account e di concedergli uno o più ruoli IAM che contengano le autorizzazioni minime richieste e di seguire il principio del privilegio minimo.
- Concedi il ruolo
Workflows
Invoker (
roles/workflows.invoker) nel progetto al account di servizio predefinito di Compute Engine in modo che l'account abbia l'autorizzazione per attivare l'esecuzione del flusso di lavoro.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
- Se hai attivato l'agente di servizio Cloud Pub/Sub il giorno 8 aprile 2021 o in una data precedente, per supportare le richieste push Pub/Sub autenticate, concedi il ruolo Creatore token service account (
roles/iam.serviceAccountTokenCreator) all'agente di servizio. In caso contrario, questo ruolo viene concesso per impostazione predefinita:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Crea ed esegui il deployment di un flusso di lavoro
Crea ed esegui il deployment di un workflow che viene eseguito quando un messaggio pubblicato in un argomento Pub/Sub attiva un workflow con una richiesta HTTP.
- Apri un terminale o Cloud Shell.
- Nella tua directory home, crea un nuovo file denominato
myFirstWorkflow.yamlomyFirstWorkflow.json. - Copia e incolla quanto segue nel nuovo file e salvalo:
YAML
main: params: [event] steps: - decode_pubsub_message: assign: - base64: ${base64.decode(event.data.message.data)} - message: ${text.decode(base64)} - return_pubsub_message: return: ${message}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "decode_pubsub_message": { "assign": [ { "base64": "${base64.decode(event.data.message.data)}" }, { "message": "${text.decode(base64)}" } ] } }, { "return_pubsub_message": { "return": "${message}" } } ] } }
- Esegui il deployment del workflow:
Sostituisciexport MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
.yamlcon.jsonse hai copiato la versione JSON del flusso di lavoro di esempio.
Crea un trigger Eventarc
Quando un messaggio viene pubblicato nell'argomento Pub/Sub, l'evento attiva il flusso di lavoro.
- Crea un trigger per ascoltare i messaggi Pub/Sub:
Nuovo argomento Pub/Sub
gcloud eventarc triggers create events-pubsub-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Viene creato un nuovo argomento Pub/Sub e un trigger denominato
events-pubsub-triggerper esso.Argomento Pub/Sub esistente
gcloud eventarc triggers create events-pubsub-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --transport-topic=TOPIC_ID
Sostituisci
TOPIC_IDcon l'ID dell'argomento Pub/Sub esistente.Viene creato un trigger denominato
events-pubsub-triggerper un argomento Pub/Sub esistente.Tieni presente che quando crei un trigger Eventarc per la prima volta in un Google Cloud progetto, potrebbe verificarsi un ritardo nel provisioning dell'agente di servizio Eventarc. Questo problema può essere in genere risolto tentando di creare di nuovo il trigger. Per saperne di più, consulta Errori di autorizzazione negata.
- Verifica che il trigger sia stato creato correttamente:
gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}
L'output dovrebbe essere simile al seguente, con l'elenco dell'ora di creazione e della località del trigger:
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/events-pubsub-trigger
Genera e visualizza un evento
Pubblica un messaggio nell'argomento Pub/Sub per generare un evento e attivare il flusso di lavoro. L'evento generato viene passato come argomento runtime al workflow, che restituisce il messaggio Pub/Sub come risultato dell' esecuzione del workflow. Assicurati che le dimensioni degli eventi che passi al workflow non superino i 512 kB.
Se hai creato un trigger per un nuovo argomento Pub/Sub, trova e imposta l'argomento Pub/Sub creato come variabile di ambiente:
export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
Per attivare il workflow, invia un messaggio all'argomento Pub/Sub:
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
L'evento generato viene passato come argomento runtime al workflow, che restituisce il messaggio "Hello there".
Per verificare che sia stata attivata un'esecuzione di Workflows, elenca le ultime cinque esecuzioni:
gcloud workflows executions list ${MY_WORKFLOW} --limit=5
L'output dovrebbe essere simile al seguente ed elencare valori NAME e STATE pari a
SUCCEEDEDper ogni esecuzione del workflow:NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f STATE: SUCCEEDED START_TIME: 2021-09-13T19:15:10.275677049Z END_TIME: 2021-09-13T19:15:10.963136883Z NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a STATE: SUCCEEDED START_TIME: 2021-09-13T17:28:51.492864252Z END_TIME: 2021-09-13T17:28:52.227212414Z
Tieni presente che nel campo
NAMEdell'esempio precedente,a6319d9d-36a6-4117-904e-3d1118bdc90aè l'ID dell'esecuzione del workflow. Copia l'ID di esecuzione da utilizzare nel passaggio successivo.Per visualizzare lo stato dell'esecuzione, esegui questo comando:
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
Sostituisci
WORKFLOW_EXECUTION_IDcon l'ID dell'esecuzione del workflow che corrisponde all'ora di pubblicazione dell'argomento Pub/Sub. L'output è simile al seguente:argument: [...] endTime: '2021-09-13T17:28:47.301012152Z' name: projects/1234567/locations/us-central1/workflows/myFirstWorkflow/executions/f72bc6d4-5ea0-4dfb-bb14-2dae82303120 result: 'Hello there' startTime: '2021-09-13T17:28:51.492864252Z' state: SUCCEEDED
Verifica che l'ora di
publish_timein cui è stato pubblicato il messaggio Pub/Sub e l'ora distartTimedell'esecuzione del workflow corrispondano.
Congratulazioni, hai generato correttamente un evento utilizzando un argomento Pub/Sub che ha attivato un ricevitore di eventi Workflows utilizzando Eventarc.
Libera spazio
- Elimina il workflow creato:
Quando ti viene chiesto se vuoi continuare, inseriscigcloud workflows delete ${MY_WORKFLOW}
y. - Elimina il trigger che hai creato:
gcloud eventarc triggers delete events-pubsub-trigger
- In alternativa, puoi eliminare il Google Cloud progetto per evitare addebiti. L'eliminazione del tuo Google Cloud progetto interrompe la fatturazione per tutte le
risorse utilizzate al suo interno.
Elimina un Google Cloud progetto:
gcloud projects delete PROJECT_ID