Saiba mais sobre atividades no 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 no Step Functions.

Com as atividades do Step Functions, é possível configurar uma tarefa na máquina de estado na qual o trabalho real é realizado por um operador em execução fora do Step Functions. Por exemplo, você pode ter um programa de trabalho em execução no Amazon Elastic Compute Cloud (Amazon EC2), no Amazon Elastic Container Service (Amazon ECS) ou até mesmo em dispositivos móveis.

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 nome do recurso da Amazon (ARN) para o estado Tarefa. Use esse ARN para fazer uma sondagem do estado da tarefa para trabalhos no operador de atividade.

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 conexão HTTP, 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 operador de atividade faz uma sondagem do Step Functions usando GetActivityTask e enviando o ARN da atividade relacionada. GetActivityTask retorna uma resposta incluindo a input (uma string de entrada JSON 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.

APIs Relacionado à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 Evitar latência ao fazer uma sondagem de 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 o ARN da atividade.

  2. Faça referência a esse ARN em um estado de tarefa de atividade na definição da máquina de estado e defina TimeoutSeconds

  3. Implemente um operador de atividade que faça uma sondagem de trabalhos usando GetActivityTask, fazendo referência a esse ARN de atividade.

  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: operador de atividade em Ruby

O exemplo de código de atividade do operador a seguir 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 de agentes de sondagem detectam longamente, de modo constante, a tarefa de atividade no Step Functions. Assim que uma tarefa de atividade é recuperada, ela é transmitida por uma fila de bloqueio delimitada para ser coletada pelo thread de atividade.

O código 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 ) # Start method block contains your custom implementation to process the input activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

É necessário especificar o ARN e a região da atividade. O código inclui padrões que você pode definir, como número de threads e atraso de pulsação.

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óximas etapas

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