Os Workflow Clusters podem se integrar ao Simple Message Queue (formerly MNS) do Alibaba Cloud. Utilize o Simple Message Queue (formerly MNS) como broker para conectar diversas fontes de eventos e acionar execuções de workflows com base nesses eventos. Quando um novo evento ocorre, como um evento do Object Storage Service (OSS) ou do EventBridge, o Simple Message Queue (formerly MNS) recebe a mensagem correspondente. O Argo aciona automaticamente a execução do workflow com base nas condições do trigger, o que automatiza o processamento do workflow.
Pré-requisitos
-
Ative os seguintes serviços e recursos.
Simple Message Queue (formerly MNS): Ativação e permissões. Este recurso gera cobranças do Simple Message Queue (formerly MNS). Para detalhes de cobrança, consulte Cobrança.
-
Crie um cluster de workflow e baixe o Alibaba Cloud Argo CLI.
Etapa 1: Criar um event bus
Um event bus pode ser compartilhado por workflows orientados a eventos em um namespace. É possível criar um event bus usando NATS ou Simple Message Queue (formerly MNS). Se já existir um event bus, vá diretamente para a Etapa 2: Criar uma fonte de eventos.
Criar usando NATS
-
Crie um arquivo
event-bus.yaml. Configuração de exemplo:apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: nats: native: replicas: 3 auth: token -
Execute o comando a seguir para criar o EventBus:
kubectl apply -f event-bus.yamlNotaApós a execução bem-sucedida do comando, um pod do EventBus é criado no namespace
default. As operações subsequentes devem ser executadas no mesmo namespace. -
Execute o comando a seguir para verificar se o pod do EventBus foi iniciado:
kubectl get pod
Criar usando o Simple Message Queue (formerly MNS)
Faça logon no console do Simple Message Queue (formerly MNS).
Na página Topics, crie um tópico chamado argoeventbus. Em seguida, na página Topic Details, obtenha o endpoint na seção Access Point.
Faça logon no console do RAM como administrador do RAM.
-
Crie um usuário do Resource Access Management (RAM), conceda a permissão
AliyunMNSFullAccessao usuário do RAM e obtenha o AccessKey ID e o AccessKey secret do usuário.Para mais informações, consulte Criar um usuário do RAM, Gerenciar permissões de usuário do RAM, Criar uma AccessKey e Visualizar informações da AccessKey do usuário do RAM.
-
Execute o comando a seguir para criar um Secret para armazenar o AccessKey ID e o AccessKey secret.
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=*** -
Crie um arquivo
event-bus-mns.yamle substitua os parâmetros do exemplo pelos valores do seu ambiente.topic: substitua o valor pelo nome do tópico criado na etapa 2 do Simple Message Queue (formerly MNS).endpoint: substitua o valor pelo endpoint obtido na etapa 2.
apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: alimns: accessKey: key: accesskey name: mns-secret secretKey: key: secretkey name: mns-secret topic: argoeventbus # The name of the topic in Simple Message Queue (formerly MNS). endpoint: http://165***368.mns.<region>.aliyuncs.com # The endpoint of Simple Message Queue (formerly MNS). -
Execute o comando a seguir para aplicar o arquivo
event-bus-mns.yamle criar o recurso do event bus.kubectl apply -f event-bus-mns.yaml
Etapa 2: Criar uma fonte de eventos
Faça logon no console do Simple Message Queue (formerly MNS).
-
Na página Queues, crie uma fila chamada test-event-queue. Em seguida, na página Queue Details, obtenha o endpoint na seção Access Point.
NotaSe você criou o event bus usando o Simple Message Queue (formerly MNS), ignore as etapas 3 a 5 e vá diretamente para a etapa 6.
Faça logon no console do RAM como administrador do RAM.
-
Crie um usuário do Resource Access Management (RAM), conceda a permissão
AliyunMNSFullAccessao usuário do RAM e obtenha o AccessKey ID e o AccessKey secret do usuário.Para mais informações, consulte Criar um usuário do RAM, Gerenciar permissões de usuário do RAM, Criar uma AccessKey e Visualizar informações da AccessKey do usuário do RAM.
-
Execute o comando a seguir para criar um Secret para armazenar o AccessKey ID e o AccessKey secret.
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=*** -
Crie um arquivo
event-source.yamle substitua os parâmetros do exemplo pelos valores do seu ambiente.topic: substitua o valor pelo nome do tópico criado na etapa 2 do Simple Message Queue (formerly MNS).endpoint: substitua o valor pelo endpoint obtido na etapa 2.
apiVersion: argoproj.io/v1alpha1 kind: EventSource metadata: name: ali-mns spec: mns: example: jsonBody: true accessKey: key: accesskey name: mns-secret secretKey: key: secretkey name: mns-secret queue: test-event-queue # The name of the queue in Simple Message Queue (formerly MNS). waitTimeSeconds: 20 endpoint: http://165***368.mns.<region>.aliyuncs.com # The endpoint of Simple Message Queue (formerly MNS). -
Execute o comando a seguir para aplicar o arquivo
event-source.yamle criar a fonte de eventos.kubectl apply -f event-source.yaml -
Execute o comando a seguir para verificar se o Pod da fonte de eventos foi iniciado conforme o esperado.
kubectl get pod
Etapa 3: Criar um sensor de eventos
-
Crie um arquivo
event-sensor.yamle incorpore a definição do workflow a ser executado no sensor de eventos. O código de exemplo a seguir mostra a configuração do sensor de eventos: -
Aplique o arquivo
event-sensor.yamlpara criar o sensor de eventos.kubectl apply -f event-sensor.yaml -
Verifique se o Pod do sensor de eventos foi iniciado conforme o esperado.
kubectl get pod
Ao criar um event bus usando o Simple Message Queue (formerly MNS), uma fila correspondente do Simple Message Queue (formerly MNS) é criada automaticamente após a criação do sensor de eventos. O nome da fila segue o formato: ackone-argowf-<namespace>-<sensor-name>-<sensor-uid>.
Etapa 4: Verificar se o envio de uma mensagem para o Simple Message Queue (formerly MNS) aciona o workflow
Faça logon no console do Simple Message Queue (formerly MNS).
Na página Queues, localize a fila chamada test-event-queue. Na coluna Actions, clique em Send Messages.
Na página de início rápido para envio e recebimento de mensagens, insira
test trigger argo workflowcomo conteúdo da mensagem e clique em Send Message.-
Visualize a execução do workflow no cluster de workflow.
argo listA saída esperada é a seguinte:
NAME STATUS AGE DURATION PRIORITY ali-mns-workflow-5prz7 Running 6s 6s 0 -
Obtenha os logs do workflow para visualizar o conteúdo da mensagem.
argo logs ali-mns-workflow-5prz7ImportanteO nome do workflow neste comando deve corresponder ao nome retornado na etapa anterior.
ali-mns-workflow-5prz7é apenas um valor de exemplo. Substitua-o pelo valor retornado no seu ambiente.O conteúdo da mensagem está codificado em Base64.
A saída esperada é a seguinte:
ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:37.964Z" level=info msg="capturing logs" argo=true ali-mns-workflow-5prz7-whalesay-2429203954: ali-mns-workflow-5prz7-whalesay-2429203954: < dGVzdCB0cmlnZ2VyIGFyZ28gd29ya2Zsb3c= > ali-mns-workflow-5prz7-whalesay-2429203954: ----------------------------------------- ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: ## . ali-mns-workflow-5prz7-whalesay-2429203954: ## ## ## == ali-mns-workflow-5prz7-whalesay-2429203954: ## ## ## ## === ali-mns-workflow-5prz7-whalesay-2429203954: /""""""""""""""""___/ === ali-mns-workflow-5prz7-whalesay-2429203954: ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ ali-mns-workflow-5prz7-whalesay-2429203954: \______ o __/ ali-mns-workflow-5prz7-whalesay-2429203954: \ \ __/ ali-mns-workflow-5prz7-whalesay-2429203954: \____\______/ ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:38.979Z" level=info msg="sub-process exited" argo=true error="<nil>"
Etapa 5: Excluir recursos relacionados a eventos
-
Exclua os recursos relacionados.
-
Exclua o sensor de eventos.
kubectl delete sensor ali-mns -
Exclua a fonte de eventos.
kubectl delete eventsource ali-mns -
Exclua o event bus.
kubectl delete eventbus default
-
-
Verifique o status dos Pods para confirmar que todos os recursos foram excluídos.
kubectl get pod