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:

  1. Utilizzerai Workflows per creare ed eseguire il deployment di un flusso di lavoro che decodifica e restituisce i messaggi Pub/Sub.
  2. Creerai un trigger Eventarc che collega un argomento Pub/Sub a un ricevitore di eventi Workflows.
  3. Pubblicherai un messaggio nell'argomento Pub/Sub per generare un evento. Questo evento viene passato come argomento runtime nel flusso di lavoro di destinazione.
  4. 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.

  1. 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.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. 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.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con 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_ID con il nome del Google Cloud progetto.

  6. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  7. Installa Google Cloud CLI.

  8. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  9. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  10. 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.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con 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_ID con il nome del Google Cloud progetto.

  11. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  12. Aggiorna i componenti gcloud:
    gcloud components update
  13. 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
  14. 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}
  15. 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:

    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.

  16. 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_NUMBER con il tuo Google Cloud numero del progetto. Puoi trovare il numero di progetto nella pagina di benvenuto dellaconsolle o eseguendo questo comando: Google Cloud

    gcloud 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.

  17. 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
  18. 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.

  1. Apri un terminale o Cloud Shell.
  2. Nella tua directory home, crea un nuovo file denominato myFirstWorkflow.yaml o myFirstWorkflow.json.
  3. 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}"
            }
          }
        ]
      }
    }
  4. Esegui il deployment del workflow:
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    Sostituisci .yaml con .json se 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.

  1. 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-trigger per 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_ID con l'ID dell'argomento Pub/Sub esistente.

    Viene creato un trigger denominato events-pubsub-trigger per 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.

  2. 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.

  1. 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)'))
  2. 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".

  3. 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 SUCCEEDED per 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 NAME dell'esempio precedente, a6319d9d-36a6-4117-904e-3d1118bdc90a è l'ID dell'esecuzione del workflow. Copia l'ID di esecuzione da utilizzare nel passaggio successivo.

  4. Per visualizzare lo stato dell'esecuzione, esegui questo comando:

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}

    Sostituisci WORKFLOW_EXECUTION_ID con 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
  5. Verifica che l'ora di publish_time in cui è stato pubblicato il messaggio Pub/Sub e l'ora di startTime dell'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

  1. Elimina il workflow creato:
    gcloud workflows delete ${MY_WORKFLOW}
    Quando ti viene chiesto se vuoi continuare, inserisci y.
  2. Elimina il trigger che hai creato:
    gcloud eventarc triggers delete events-pubsub-trigger
  3. 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

Passaggi successivi