Automatizar o fornecimento de eventos do Step Functions com o EventBridge
Com o EventBridge, é possível selecionar eventos dos fluxos de trabalho padrão do Step Functions para enviar a outros serviços para processamento adicional. Essa técnica oferece uma maneira flexível de conectar componentes com acoplamento fraco e monitorar os recursos.
O Amazon EventBridge é um serviço sem servidor que conecta os componentes da aplicação para criar aplicações escaláveis orientadas a eventos. A arquitetura orientada a eventos é um estilo de criação de sistemas de software com acoplamento fraco que funcionam juntos emitindo e respondendo a eventos. Os eventos representam uma mudança de estado ou uma atualização.
Ao usar o EventBridge para fornecer eventos do Step Functions a outros serviços, é possível monitorar os fluxos de trabalho padrão sem chamar continuamente a API DescribeExecution para receber o status. As alterações de status nas execuções da máquina de estado são enviadas automaticamente ao EventBridge. É possível usar esses eventos para direcionar serviços. Por exemplo, eventos podem invocar uma função do AWS Lambda, publicar mensagens em um tópico do Amazon Simple Notification Service (Amazon SNS) ou até mesmo executar outro fluxo de trabalho do SFN.
Como funciona o fornecimento de eventos
O Step Functions gera e envia eventos ao barramento de eventos do EventBridge padrão, que é provisionado automaticamente em cada conta da AWS. Um barramento de eventos é um roteador que recebe eventos e os entrega a zero ou mais destinos, ou alvos. Os destinos são outros serviços da AWS. É possível especificar regras para o barramento de eventos que comparam os eventos com o padrão de eventos da regra. Se o evento corresponder a um padrão, o barramento de eventos enviará o evento aos destinos especificados. O seguinte diagrama mostra este processo:
Fluxos de trabalho padrão em comparação aos expressos
Somente fluxos de trabalho padrão emitem eventos para o EventBridge. Para monitorar a execução de fluxos de trabalho expressos, é possível usar o CloudWatch Logs. Consulte Registrar em log no CloudWatch Logs.
Eventos do Step Functions
O Step Functions envia os eventos a seguir ao barramento de eventos do EventBridge padrão automaticamente. Os eventos que correspondem ao padrão de eventos de uma regra são entregues aos destinos especificados sempre que possível. Pode ser que os eventos sejam entregues fora da ordem.
Para ter mais informações, consulte Eventos do EventBridge no Guia do usuário do Amazon EventBridge.
| Tipo de detalhe de evento | Descrição |
|---|---|
|
Representa uma mudança no status da execução de uma máquina de estado. |
Fornecer eventos do Step Functions usando o EventBridge
Para que o barramento de eventos padrão do EventBridge envie eventos do Step Functions a um destino, é necessário criar uma regra. Cada regra contém um padrão de evento, que o EventBridge compara a cada evento recebido no barramento de eventos. Se os dados do evento corresponderem ao padrão de evento especificado, o EventBridge fornecerá o evento aos destinos da regra.
Para ter instruções abrangentes de como criar regras de barramento de eventos, consulte Creating rules that react to events no Guia do usuário do EventBridge.
Também é possível criar uma regra de barramento de eventos para uma máquina de estado específica do console do Step Functions:
Na página Detalhes de uma máquina de estado, selecione Ações e, depois, Criar regra do EventBridge.
O console do EventBridge abre a página Criar regra, com a máquina de estado selecionada como a origem do evento para a regra.
Siga o procedimento detalhado em Creating rules that react to events no Guia do usuário do EventBridge.
Criar padrões de eventos que correspondam aos eventos do Step Functions
Cada padrão de evento é um objeto JSON que contém:
-
Um atributo
sourceque identifica o serviço que envia o evento. Em relação a eventos do Step Functions, a origem éaws.states. -
(Opcional): um atributo
detail-typeque contém uma matriz dos tipos de eventos a serem correlacionados. -
(Opcional): um atributo
detailque contém quaisquer outros dados relacionados aos eventos a serem correlacionados.
Por exemplo, o seguinte padrão de evento corresponde a todos os eventos de alteração do status do recurso do Step Functions:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"] }
Embora o seguinte exemplo corresponda a uma execução específica associada a uma máquina de estado específica, quando essa execução falha ou atinge o tempo limite:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED", "TIMED_OUT"], "stateMachineArn": ["arn:aws:states:region:account-id:stateMachine:state-machine"], "executionArn": ["arn:aws:states:region:account-id:execution:state-machine-name:execution-name"] } }
Consulte mais informações sobre como escrever padrões de eventos, consulte Padrões de eventos no Guia do usuário do EventBridge.
Acionar máquinas de estado do Step Functions usando eventos
Também é possível especificar uma máquina de estado do Step Functions como destino para a regra de barramento de eventos do EventBridge. Isso permite que você acione uma execução de um fluxo de trabalho do Step Functions em resposta a um evento de outro serviço da AWS.
Para obter mais informações, consulte Amazon EventBridge targets (“Destinos do Amazon EventBridge”) no Manual do usuário do Amazon EventBridge.
Referência de detalhes de eventos do Step Functions
Todos os eventos dos serviços da AWS têm um conjunto comum de campos contendo metadados sobre o evento, como o serviço da AWS que é a origem do evento, a hora em que o evento foi gerado, a conta e a região em que o evento ocorreu, e outros. Para obter as definições desses campos gerais, consulte Event structure reference no Guia do usuário do Amazon EventBridge.
Além disso, cada evento tem um campo de detail que contém dados específicos desse determinado evento.
Ao usar o EventBridge para selecionar e gerenciar eventos do Step Functions, é útil ter em mente o seguinte:
-
O campo
sourcepara todos os eventos do Step Functions está definido comoaws.states. -
O campo do
detail-typeespecifica o tipo de evento.Por exemplo,
Step Functions Execution Status Change. -
O campo de
detailcontém os dados específicos desse determinado evento.
Para ter informações sobre a criação de padrões de eventos que habilitam regras para comparar com eventos do Step Functions, consulte Event patterns no Guia do usuário do Amazon EventBridge.
Para obter mais informações sobre eventos e como o EventBridge os processa, consulte Amazon EventBridge events no Guia do usuário do Amazon EventBridge.
Alteração do status da execução
Representa uma mudança no status da execução de uma máquina de estado.
Os campos source e detail-type estão incluídos abaixo porque contêm valores específicos para eventos do Step Functions. Para ter as definições dos outros campos de metadados que estão incluídos em todos os eventos, consulte Event structure reference no Guia do usuário do Amazon EventBridge.
Estrutura de eventos
{ . . ., "detail-type": "Step Functions Execution Status Change", "source"": "aws.states", . . ., "detail"": { "executionArn"" : "string", "input" : "string", "inputDetails" : { "included" : "boolean" }, "name" : "string", "output" : "string", "outputDetails" : { "included" : "boolean" }, "startDate" : "integer", "stateMachineArn" : "string", "stopDate" : "integer", "status" : "RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE" } }
Observações
Um evento de alteração de status da execução pode conter uma propriedade de entrada na definição. Em alguns eventos, um evento de alteração de status da execução também pode conter uma propriedade de saída na definição.
-
Se a entrada e saída de escape combinadas enviadas para o EventBridge excederem 248 KiB, a entrada será excluída. Da mesma forma, se a saída de escape exceder 248 KiB, a saída será excluída. Isso resulta das cotas de eventos.
-
Você pode determinar se uma carga foi truncada com as propriedades
inputDetailseoutputDetails. Para ver mais informações, consulte o Tipo de dados deCloudWatchEventsExecutionDataDetails. -
Em fluxos de trabalho padrão, use DescribeExecution para ver a entrada e a saída completas.
O
DescribeExecutionnão está disponível para fluxos de trabalho expressos. Se quiser ver a entrada e a saída completas, você poderá:Envolver o fluxo de trabalho expresso com um fluxo de trabalho padrão.
Usar ARNs do Amazon S3. Para ver mais informações sobre como utilizar ARNs, consulte Usar ARNs do Amazon S3 em vez de transmitir grandes cargas úteis no Step Functions.
Exemplos
exemplo Alteração de status da execução: execução iniciada.
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws::states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "RUNNING", "startDate": 1551225271984, "stopDate": null, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
exemplo Alteração de status da execução: execução bem-sucedida.
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "SUCCEEDED", "startDate": 1547148840101, "stopDate": 1547148840122, "input": "{}", "inputDetails": { "included": true }, "output": "\"Hello World!\"", "outputDetails": { "included": true } } }
exemplo Alteração de status da execução: falha na execução.
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "FAILED", "startDate": 1551225146847, "stopDate": 1551225151881, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
exemplo Alteração de status da execução: tempo limite.
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "TIMED_OUT", "startDate": 1551224926156, "stopDate": 1551224927157, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null
exemplo Alteração de status da execução: anulada.
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "ABORTED", "startDate": 1551225014968, "stopDate": 1551225017576, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }