

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.
<a name="concepts-activities"></a>

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 do
<a name="activities-overview"></a>

EmAWS 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)` e enviando o ARN da atividade relacionada. `GetActivityTask` retorna uma resposta incluindo a `input` (uma string de entrada JSON para a tarefa) e um [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` ou `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`. Essas duas chamadas usam o `taskToken` fornecido por `GetActivityTask` para associar o resultado a essa tarefa.

### APIs Relacionado às tarefas de atividade
<a name="activities-api"></a>

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: 
+ `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`
+ `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`
+ `[ListActivities](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListActivities.html)`
+ `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`
+ `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`
+ `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)`

**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](sfn-best-practices.md#bp-activity-pollers).

## Aguardar a conclusão de uma tarefa de atividade
<a name="activities-wait"></a>

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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Anote o ARN da atividade.

1. 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`

1. Implemente um operador de atividade que faça uma sondagem de trabalhos usando `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`, fazendo referência a esse ARN de atividade. 

1. Use `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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.

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

1. 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` ou `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)` para fornecer um status. Se a execução não receber nenhum deles ou receber uma chamada `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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
<a name="example-ruby-activity-worker"></a>

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 para Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/).
+ Para baixar esse código e os recursos relacionados, consulte o repositório [step-functions-ruby-activity-worker](https://github.com/aws-samples/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 | Description | 
| --- | --- | 
|  `require_relative`  |  Caminho relativo para o seguinte código do operador de atividade de exemplo.  | 
|  `region`  |  AWSRegiã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
<a name="activities-nextsteps"></a>

Para obter uma análise mais detalhada da criação de máquinas de estado que usam operadores de atividade, consulte:
+ [Como criar uma máquina de estado de Atividade usando o Step Functions](tutorial-creating-activity-state-machine.md)