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:
-
Crie uma atividade usando o console ou
CreateActivity
. Anote o ARN da atividade. -
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
-
Implemente um operador de atividade que faça uma sondagem de trabalhos usando
GetActivityTask
, fazendo referência a esse ARN de atividade. -
Use
SendTaskHeartbeat
periodicamente dentro do período que você definiu emHeartbeatSeconds
na definição da tarefa da máquina de estado para evitar que a tarefa expire. -
Inicie uma execução da máquina de estado.
-
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.
-
Para obter mais informações, consulte a Referência da API do AWS SDK for Ruby.
-
Para baixar esse código e os recursos relacionados, consulte o repositório step-functions-ruby-activity-worker
em. GitHub
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 |
---|---|
|
Caminho relativo para o seguinte código do operador de atividade de exemplo. |
|
AWS Região da sua atividade. |
|
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. |
|
O número de threads dos seus agentes de sondagem. Entre 10 e 20 threads deveriam ser suficientes para a maioria das implementações. |
|
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: