Saiba mais sobre atividades em Step Functions - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Saiba mais sobre atividades em Step Functions

As atividades são um AWS Step Functions recurso que permite que você tenha uma tarefa em sua máquina de estado em que o trabalho é executado por um trabalhador que pode ser hospedado no Amazon Elastic Compute Cloud (AmazonEC2), no Amazon Elastic Container Service (AmazonECS), em dispositivos móveis, basicamente em qualquer lugar.

Visão geral

Em AWS Step Functions, as atividades são uma forma de associar o código executado em algum lugar (conhecido como agente de atividades) a uma tarefa específica em uma máquina de estado. Você pode criar uma atividade usando o console do Step Functions ou chamando CreateActivity. Isso fornece um Amazon Resource Name (ARN) para o estado da sua tarefa. Use isso ARN para pesquisar o estado da tarefa do trabalho em seu trabalhador de atividades.

nota

As atividades não são versionadas e devem sempre ter compatibilidade com versões anteriores. Se for necessário fazer uma alteração incompatível com versões anteriores em uma atividade, crie uma nova atividade no Step Functions usando um nome exclusivo.

Um trabalhador de atividades pode ser um aplicativo executado em uma EC2 instância da Amazon, uma AWS Lambda função, um dispositivo móvel: qualquer aplicativo que possa fazer uma HTTP conexão, hospedado em qualquer lugar. Quando o Step Functions atinge um estado de tarefa de atividade, o fluxo de trabalho aguarda um operador de atividade para fazer a sondagem de uma tarefa. Um funcionário da atividade pesquisa Step Functions usando GetActivityTask e enviando o ARN para a atividade relacionada. GetActivityTaskretorna uma resposta incluindo input (uma sequência de JSON entrada para a tarefa) e um taskToken(um identificador exclusivo para a tarefa). Após o operador de atividade concluir seu trabalho, ele pode fornecer um relatório de êxito ou falha usando SendTaskSuccess ou SendTaskFailure. Essas duas chamadas usam o taskToken fornecido por GetActivityTask para associar o resultado a essa tarefa.

APIsRelacionado às tarefas de atividade

O Step Functions fornece APIs a criação e listagem de atividades, a solicitação de uma tarefa e o gerenciamento do fluxo de sua máquina de estado com base nos resultados de seu trabalhador.

A seguir estão as Step Functions APIs relacionadas às atividades:

nota

A sondagem de tarefas de atividade com GetActivityTask pode causar latência em algumas implementações. Consulte Evitando a latência ao pesquisar tarefas de atividade.

Aguardar a conclusão de uma tarefa de atividade

Configure por quanto tempo um estado deve aguardar definindo TimeoutSeconds na definição da tarefa. Para manter a tarefa ativa e em espera, envie uma pulsação periodicamente do operador de atividade usando SendTaskHeartbeat dentro do tempo configurado em TimeoutSeconds. Ao configurar uma longa duração do tempo limite e enviar uma pulsação de maneira ativa, uma atividade no Step Functions pode aguardar até um ano para uma execução ser concluída.

Por exemplo, se você precisa de um fluxo de trabalho que aguarda a saída de um longo processo, faça o seguinte:

  1. Crie uma atividade usando o console ou CreateActivity. Anote a atividadeARN.

  2. Faça referência a isso ARN em um estado de tarefa de atividade na definição e no conjunto da sua máquina de estadoTimeoutSeconds.

  3. Implemente um trabalhador de atividades que faça pesquisas de trabalho usandoGetActivityTask, referenciando essa atividade. ARN

  4. Use SendTaskHeartbeat periodicamente dentro do período que você definiu em HeartbeatSeconds na definição da tarefa da máquina de estado para evitar que a tarefa expire.

  5. Inicie uma execução da máquina de estado.

  6. Inicie um processo do operador de atividade.

A execução coloca o estado de tarefa da atividade em pausa e aguarda que o operador de atividade faça sondagem de uma tarefa. Assim que um taskToken é fornecido para o operador de atividade, seu fluxo de trabalho aguardará SendTaskSuccess ou SendTaskFailure para fornecer um status. Se a execução não receber nenhum deles ou receber uma chamada SendTaskHeartbeat antes do tempo configurado em TimeoutSeconds, ocorrerá uma falha na execução, e o histórico de execução conterá um evento ExecutionTimedOut.

Exemplo: Activity Worker em Ruby

A seguir está um exemplo de trabalhador de atividades que usa o AWS SDK for Ruby para mostrar como implementar seu próprio operador de atividades.

O código implementa um padrão de produtor-consumidor com um número configurável de threads para agentes de sondagem e operadores de atividade. Os threads dos agentes de sondagem detectam longamente, de forma constante, a tarefa de atividade. Assim que uma tarefa de atividade é recuperada, ela é transmitida por meio de uma fila de bloqueio delimitada para ser capturada pelo thread de atividade.

O código Ruby a seguir é o ponto de entrada principal para esse operador de atividade do Ruby de exemplo.

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # The start method takes as argument the block that is the actual logic of your custom activity. activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

O código inclui valores padrão que você pode alterar e usar como referência para a atividade e adaptar para sua implementação específica. Esse código usa a lógica de implementação real como entrada, permite que você faça referência a suas atividades e credenciais específicas e permite que você configure o número de threads e o atraso de pulsação. Para ver mais informações e fazer download do código, consulte Ruby Activity Worker do Step Functions.

Item Descrição

require_relative

Caminho relativo para o seguinte código do operador de atividade de exemplo.

region

AWS Região da sua atividade.

workers_count

O número de threads para o operador de atividade. Para a maioria das implementações, entre 10 e 20 threads deveria ser suficiente. Quanto mais tempo a atividade demorar para ser processada, maior será o número de threads que ela pode precisar. Como estimativa, multiplique o número de atividades de processos por segundo pela latência do 99º percentil do processamento da atividade em segundos.

pollers_count

O número de threads dos seus agentes de sondagem. Entre 10 e 20 threads deveriam ser suficientes para a maioria das implementações.

heartbeat_delay

O atraso em segundos entre as pulsações.

input Lógica de implementação da sua atividade.

Próximos Passos

Para obter uma análise mais detalhada da criação de máquinas de estado que usam operadores de atividade, consulte: