Acione fluxos de trabalho com mensagens do Pub/Sub (CLI gcloud)
Este início rápido mostra como executar um fluxo de trabalho usando um acionador do Eventarc que recebe eventos através do Pub/Sub. O acionador executa o fluxo de trabalho transmitindo eventos enviados através do Pub/Sub como argumentos de tempo de execução a um fluxo de trabalho de destino.
Neste início rápido, vai:
- Use fluxos de trabalho para criar e implementar um fluxo de trabalho que descodifica e devolve mensagens do Pub/Sub.
- Crie um acionador do Eventarc que ligue um tópico do Pub/Sub a um recetor de eventos do Workflows.
- Publique uma mensagem no tópico Pub/Sub para gerar um evento. Este evento é transmitido como um argumento de tempo de execução para o fluxo de trabalho de destino.
- Veja a mensagem Pub/Sub como resultado da execução do fluxo de trabalho.
Antes de começar
Certifique-se de que tem acesso a esta funcionalidade pedindo que o seu projeto seja adicionado às pré-visualizações privadas para Google Cloud fluxos de trabalho.
- 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.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
- Atualize os componentes do gcloud:
gcloud components update
- Ative as APIs 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
- Defina as variáveis de configuração usadas neste 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 for o criador do projeto, é-lhe atribuída a função básica de proprietário (
roles/owner
). Por predefinição, esta função do Identity and Access Management (IAM) inclui as autorizações necessárias para acesso total à maioria dos Google Cloud recursos e pode ignorar este passo.Se não for o criador do projeto, as autorizações necessárias têm de ser concedidas no projeto ao principal adequado. Por exemplo, um principal pode ser uma Conta Google (para utilizadores finais) ou uma conta de serviço (para aplicações e cargas de trabalho de computação). Para mais informações, consulte a página Funções e autorizações do destino de eventos.
Autorizações necessárias
Para receber as autorizações de que precisa para concluir este início rápido, peça ao seu administrador que lhe conceda as seguintes funções da IAM no seu projeto:
-
Eventarc Admin (
roles/eventarc.admin
) -
Aceder à vista de registos (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Publicador do Pub/Sub (
roles/pubsub.publisher
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) -
Administrador de utilização de serviços (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de fluxos de trabalho (
roles/workflows.admin
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Eventarc Admin (
Tome nota da conta de serviço predefinida do Compute Engine, uma vez que a vai anexar a um acionador do Eventarc para representar a identidade do acionador para fins de teste. Esta conta de serviço é criada automaticamente depois de ativar ou usar um Google Cloud serviço que usa o Compute Engine e com o seguinte formato de email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.
- Conceda a
função de invocador dos workflows (
roles/workflows.invoker
) no projeto à conta de serviço predefinida do Compute Engine para que a conta tenha autorização para acionar a execução do seu fluxo de trabalho.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
- Se ativou o agente do serviço Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos de envio autenticados do Pub/Sub, conceda a função de criador de tokens de conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente do serviço. Caso contrário, esta função é concedida por predefinição:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
- Abra um terminal ou o Cloud Shell.
- No seu diretório inicial, crie um novo ficheiro denominado
myFirstWorkflow.yaml
oumyFirstWorkflow.json
. - Copie e cole o seguinte no novo ficheiro e guarde-o:
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}" } } ] } }
- Implemente o fluxo de trabalho:
Substituaexport MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
.yaml
por.json
se tiver copiado a versão JSON do fluxo de trabalho de exemplo. - Crie um acionador para ouvir mensagens do Pub/Sub:
Novo tópico do 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"
Esta ação cria um novo tópico Pub/Sub e um acionador para o mesmo denominado
events-pubsub-trigger
.Tópico do Pub/Sub existente
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
Substitua
TOPIC_ID
pelo ID do tópico do Pub/Sub existente.Isto cria um acionador denominado
events-pubsub-trigger
para um tópico do Pub/Sub existente.Tenha em atenção que, quando cria um acionador do Eventarc pela primeira vez num projeto, pode haver um atraso no aprovisionamento do agente do serviço Eventarc. Google Cloud Normalmente, pode resolver este problema tentando criar o acionador novamente. Para mais informações, consulte o artigo Erros de acesso negado.
- Confirme que o acionador foi criado com êxito:
gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}
O resultado deve ser semelhante ao seguinte, indicando a hora de criação e a localização do acionador:
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/events-pubsub-trigger
Se criou um acionador para um novo tópico Pub/Sub, encontre e defina o tópico Pub/Sub criado como uma variável de ambiente:
export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
Para acionar o fluxo de trabalho, envie uma mensagem para o tópico Pub/Sub:
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
O evento gerado é transmitido como um argumento de tempo de execução para o fluxo de trabalho, que devolve a mensagem "Olá".
Para verificar se uma execução de fluxos de trabalho foi acionada, liste as últimas cinco execuções:
gcloud workflows executions list ${MY_WORKFLOW} --limit=5
O resultado deve ser semelhante ao seguinte, apresentando um NAME e um STATE iguais a
SUCCEEDED
para cada execução do fluxo de trabalho: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
Tenha em atenção que, no campo
NAME
do exemplo anterior,a6319d9d-36a6-4117-904e-3d1118bdc90a
é o ID da execução do fluxo de trabalho. Copie o ID de execução para usar no passo seguinte.Para ver o estado de execução, execute o seguinte comando:
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
Substitua
WORKFLOW_EXECUTION_ID
pelo ID da execução do fluxo de trabalho que corresponde à hora de publicação do tópico do Pub/Sub. O resultado é semelhante ao seguinte: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
Verifique se a
publish_time
em que a mensagem do Pub/Sub foi publicada e astartTime
da execução do fluxo de trabalho correspondem entre si.- Elimine o fluxo de trabalho que criou:
Quando lhe for perguntado se quer continuar, introduzagcloud workflows delete ${MY_WORKFLOW}
y
. - Elimine o acionador que criou:
gcloud eventarc triggers delete events-pubsub-trigger
- Em alternativa, pode eliminar o seu Google Cloud projeto para evitar incorrer em
cobranças. A eliminação do seu projeto Google Cloud interrompe a faturação de todos os
recursos usados nesse projeto.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Crie e implemente um fluxo de trabalho
Crie e implemente um fluxo de trabalho que é executado quando uma mensagem publicada num tópico do Pub/Sub aciona um fluxo de trabalho com um pedido HTTP.
Crie um acionador do Eventarc
Quando uma mensagem é publicada no tópico Pub/Sub, o evento aciona o fluxo de trabalho.
Gere e veja um evento
Publicar uma mensagem no tópico Pub/Sub para gerar um evento e acionar o fluxo de trabalho. O evento gerado é transmitido como um argumento de tempo de execução ao fluxo de trabalho, que devolve a mensagem Pub/Sub como resultado da execução do fluxo de trabalho. Certifique-se de que o tamanho dos eventos que transmite ao fluxo de trabalho não excede 512 KB.
Parabéns, gerou com êxito um evento através de um tópico do Pub/Sub que acionou um recetor de eventos do Workflows através do Eventarc.