Estado de tarefa do fluxo de trabalho - 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á.

Estado de tarefa do fluxo de trabalho

Gerenciando o estado e transformando dados

Recentemente, o Step Functions adicionou variáveis JSONata para gerenciar dados de estado e transformação.

Saiba mais sobre como transmitir dados com variáveis e transformar dados com JSONata.

Um estado Task ("Type": "Task") representa uma unidade de trabalho específica executada por uma máquina de estado. Uma tarefa executa o trabalho usando uma atividade ou AWS Lambda função, integrando-se a outros suportados ou invocando uma Serviços da AWS HTTPSAPI, como o Stripe.

O Amazon States Language representa tarefas definindo o tipo de estado Task e fornecendo à tarefa o Amazon Resource Name (ARN) da atividade, da função Lambda ou do HTTPS API endpoint.

Invocar uma função com argumentos JSONata

A definição de estado da tarefa a seguir (JSONata) invoca uma função Lambda chamada. priceWatcher

Observe o uso de JSONata expressões para consultar dados de entrada para usar em Argumentos e o resultado da tarefa no campo de atribuição.

"Get Current Price": { "Type": "Task", "QueryLanguage" : "JSONata", "Resource": "arn:aws:states:::lambda:invoke", "Next": "Check Price", "Arguments": { "Payload": { "product": "{% $states.context.Execution.Input.product %}" }, "FunctionName": "arn:aws:lambda:<region>:123456789012:function:priceWatcher:$LATEST" }, "Assign": { "currentPrice": "{% $states.result.Payload.current_price %}" } }

Invocar uma função com parâmetros JSONPath

A definição de estado da tarefa a seguir (JSONPath) invoca uma função Lambda chamada. HelloFunction

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

Tipos de tarefa

O Step Functions é compatível com os seguintes tipos de tarefa que você pode especificar em uma definição de estado Tarefa.

Você especifica um tipo de tarefa fornecendo-o ARN no Resource campo de uma definição de estado da tarefa. O exemplo a seguir mostra a sintaxe do campo Resource. Todos os tipos de tarefas, exceto aquele que invoca um HTTPSAPI, usam a sintaxe a seguir. Para obter informações sobre a sintaxe da HTTP tarefa, consulteFluxos de trabalho HTTPS APIs do Call in Step Functions.

Na definição do estado da tarefa, substitua o texto em itálico na sintaxe a seguir pelas informações específicas do AWS recurso.

arn:partition:service:region:account:task_type:name

A lista a seguir explica os componentes individuais dessa sintaxe.

  • partitioné a AWS Step Functions partição a ser usada, mais comumenteaws.

  • serviceindica o AWS service (Serviço da AWS) usado para executar a tarefa e pode ser um dos seguintes valores:

    • states para uma atividade.

    • lambda para uma função do Lambda. Se você se integrar com outros Serviços da AWS, por exemplo, Amazon SNS ou Amazon DynamoDB, use ou. sns dynamodb

  • regioné o código da AWS região em que a atividade Step Functions ou o tipo de máquina de estado, a função Lambda ou qualquer outro AWS recurso foi criado.

  • accounté o Conta da AWS ID no qual você definiu o recurso.

  • task_type é o tipo de tarefa a ser executada. Pode ter um dos valores a seguir:

  • nameé o nome do recurso registrado (nome da atividade, nome da função Lambda ou API ação do serviço).

nota

O Step Functions não suporta referências ARNs entre partições ou regiões. Por exemplo, aws-cn não consegue invocar tarefas na partição da aws e vice-versa.

As seções a seguir oferecem mais detalhes sobre cada tipo de tarefa.

Atividade

As atividades representam operadores (processos ou threads), implementados e hospedados por você, que executam uma tarefa específica. Eles oferecem suporte apenas de fluxos de trabalho padrão, não de expressos.

A atividade Resource ARNs usa a seguinte sintaxe.

arn:partition:states:region:account:activity:name
nota

Você deve criar atividades com Step Functions (usando uma CreateActivityAPIação ou o console Step Functions) antes de usá-las pela primeira vez.

Para obter mais informações sobre a criação de uma atividade e a implementação de operadores, consulte Atividades.

Funções do Lambda

As tarefas Lambda executam uma função usando o. AWS Lambda Para especificar uma função Lambda, use a função ARN Lambda no campo. Resource

Dependendo do tipo de integração (integração otimizada ou AWS SDKintegração) que você usa para especificar uma função Lambda, a sintaxe do campo da função Lambda varia. Resource

A seguinte sintaxe do campo Resource é um exemplo de uma integração otimizada com uma função do Lambda.

"arn:aws:states:::lambda:invoke"

A sintaxe de Resource campo a seguir é um exemplo de AWS SDK integração com uma função Lambda.

"arn:aws:states:::aws-sdk:lambda:invoke"

A definição de estado Task a seguir mostra um exemplo de uma integração otimizada com uma função do Lambda chamada HelloWorld.

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

Depois que a função Lambda especificada no Resource campo for concluída, sua saída será enviada para o estado identificado no Next campo (” “). NextState

Um suportado AWS service (Serviço da AWS)

Quando você faz referência a um recurso conectado, o Step Functions chama diretamente as API ações de um serviço suportado. Especifique o serviço e a ação no campo Resource.

O serviço conectado Resource ARNs usa a seguinte sintaxe.

arn:partition:states:region:account:servicename:APIname
nota

Para criar uma conexão síncrona com um recurso conectado, anexe .sync à APIname entrada no. ARN Para obter mais informações, consulte Integração de produtos da .

Por exemplo:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }

Campos do estado Tarefa

Além dos campos de estado comuns, os estados Task têm os campos a seguir.

Resource (obrigatório)

AURI, especialmente uma ARN que identifica de forma exclusiva a tarefa específica a ser executada.

Arguments(Opcional, JSONata somente)

Usado para passar informações para as API ações dos recursos conectados. Os valores podem incluir JSONata expressões. Para obter mais informações, consulte Transformando dados com Step JSONata Functions.

Output(Opcional, JSONata somente)

Usado para especificar e transformar a saída do estado. Quando especificado, o valor substitui o padrão de saída de estado.

O campo de saída aceita qualquer JSON valor (objeto, matriz, string, número, booleano, nulo). Qualquer valor de string, incluindo aqueles dentro de objetos ou matrizes, será avaliado como JSONata se estivesse cercado por {%%} caracteres.

A saída também aceita uma JSONata expressão diretamente, por exemplo: “Output”: “{% jsonata expression%}”

Para obter mais informações, consulte Processamento de entrada e saída.

Parameters(Opcional, JSONPath somente)

Usado para passar informações para as API ações dos recursos conectados. Os parâmetros podem usar uma mistura de estática JSON JsonPathe. Para obter mais informações, consulte Passando parâmetros para um serviço API em Step Functions.

Credentials (opcional)

Especifica um perfil de destino que o perfil de execução da máquina de estado deve assumir antes de invocar o Resource especificado. Como alternativa, você também pode especificar um JSONPath valor ou uma função intrínseca que se transforma em uma IAM função ARN em tempo de execução com base na entrada de execução. Se você especificar um JSONPath valor, deverá prefixá-lo com a $. notação.

Para obter exemplos de uso desse campo no estado Task, consulteExemplos do campo Credenciais do estado Tarefa. Para ver um exemplo de como usar esse campo para acessar um AWS recurso entre contas a partir de sua máquina de estado, consulteAcessar recursos da AWS entre contas no Step Functions.

nota

Esse campo é suportado por aqueles Tipos de tarefa que usam funções Lambda e um serviço compatível AWS.

ResultPath(Opcional, JSONPath somente)

Especifica onde (na entrada) inserir os resultados da execução da tarefa que é especificada em Resource. A entrada é então filtrada conforme especificado pelo campo OutputPath (se houver) antes de ser usada como a saída do estado. Para obter mais informações, consulte Processamento de entrada e saída.

ResultSelector(Opcional, JSONPath somente)

Transmitir um conjunto de pares de valores-chave, em que os valores são estáticos ou selecionados a partir do resultado. Para obter mais informações, consulte ResultSelector.

Retry (opcional)

Uma matriz de objetos, chamados Retriers, que definem uma política de novas tentativas caso o estado encontre erros de tempo de execução. Para obter mais informações, consulte Exemplos de máquina de estado usando repetição e captura.

Catch (opcional)

Uma matriz de objetos, chamados Catchers, que definem um estado de fallback. Esse estado é executado caso o estado encontre erros de tempo de execução e sua política de novas tentativas esteja esgotada ou não tenha sido definida. Para obter mais informações, consulte Estados de fallback.

TimeoutSeconds (opcional)

Especifica o tempo máximo que uma atividade ou tarefa pode ser executada antes que ela atinja o tempo limite com o erro States.Timeout e falhe. O valor do tempo limite deve ser um número inteiro positivo e diferente de zero. O valor padrão é 99999999.

A contagem do tempo limite começa após uma tarefa ser iniciada, por exemplo, quando eventos ActivityStarted ou LambdaFunctionStarted são registrados no histórico de eventos de execução. Para as atividades, a contagem começa quando GetActivityTask recebe um token e ActivityStarted é registrado no histórico de eventos de execução.

Quando uma tarefa é iniciada, o Step Functions espera por uma resposta de conclusão ou falha do operário da tarefa ou atividade dentro da duração de TimeoutSeconds especificada. Se o operário da tarefa ou da atividade não responder dentro desse período, o Step Functions marcará a execução do fluxo de trabalho como com falha.

nota

HTTPo tempo limite da tarefa tem no máximo 60 segundos, mesmo que TimeoutSeconds exceda esse limite. Consulte Cotas relacionadas à tarefa HTTP

TimeoutSecondsPath(Opcional, JSONPath somente)

Para fornecer dinamicamente um valor de tempo limite a partir da entrada de estado usando um caminho de referência, use TimeoutSecondsPath. Quando resolvido, o caminho de referência deve selecionar campos cujos valores sejam números inteiros positivos.

nota

Um Task estado não pode incluir ambos TimeoutSeconds TimeoutSecondsPath e. HTTPo tempo limite da tarefa tem no máximo 60 segundos, mesmo que o TimeoutSecondsPath valor exceda esse limite.

HeartbeatSeconds (opcional)

Determina a frequência dos sinais de pulsação que um operário da atividade envia durante a execução de uma tarefa. As pulsações indicam que uma tarefa ainda está em execução e precisa de mais tempo para ser concluída. As pulsações evitam que uma atividade ou tarefa atinja o tempo limite durante o tempo de TimeoutSeconds.

HeartbeatSeconds deve ser um valor inteiro positivo, diferente de zero, menor que o valor do campo TimeoutSeconds. O valor padrão é 99999999. Se decorrer um tempo maior do que os segundos especificados entre as pulsações da tarefa, o estado Tarefa apresentará uma falha com o erro States.Timeout.

Para as atividades, a contagem começa quando GetActivityTask recebe um token e ActivityStarted é registrado no histórico de eventos de execução.

HeartbeatSecondsPath(Opcional, JSONPath somente)

Para fornecer dinamicamente um valor de pulsação a partir da entrada de estado usando um caminho de referência, use HeartbeatSecondsPath. Quando resolvido, o caminho de referência deve selecionar campos cujos valores sejam números inteiros positivos.

nota

Um estado Task não pode incluir HeartbeatSeconds e HeartbeatSecondsPath.

Um estado Task deverá definir o campo End como true se o estado encerrar a execução, ou deverá fornecer um estado no campo Next que será executado quando o estado Task for concluído.

Exemplos de definição de estado Tarefa

Os exemplos a seguir mostram como especificar a definição do estado Tarefa com base na sua necessidade.

Tempos limite e intervalos de pulsação do estado Tarefa

É recomendável definir um valor de tempo limite e um intervalo de pulsação para atividades de longa duração. Isso pode ser feito especificando os valores de tempo limite e pulsação ou definindo-os dinamicamente.

Exemplo de tempo limite estático e notificação de pulsação

Quando HelloWorld for concluída, o próximo estado (chamado aqui de NextState) será executado.

Se essa tarefa não for concluída em 300 segundos ou não enviar notificações de pulsação em intervalos de 60 segundos, ela será marcada como failed.

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

Exemplo de tempo limite de tarefa dinâmica e notificação de pulsação

Neste exemplo, quando o AWS Glue trabalho for concluído, o próximo estado será executado.

Se essa tarefa não for concluída dentro do intervalo definido dinamicamente pelo trabalho AWS Glue , a tarefa será marcada como failed.

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }

Exemplos do campo Credenciais do estado Tarefa

Especificando uma função IAM codificada ARN

O exemplo a seguir especifica uma função de destino que a IAM função de execução de uma máquina de estado deve assumir para acessar uma função Lambda entre contas chamada. Echo Neste exemplo, a função de destino ARN é especificada como um valor codificado.

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo" }, "End": true } } }

Especificando JSONPath como função IAM ARN

O exemplo a seguir especifica um JSONPath valor, que será resolvido em uma IAM função ARN em tempo de execução.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "$.roleArn" }, ... } } }

Especificando uma função intrínseca como função IAM ARN

O exemplo a seguir usa a função States.Formatintrínseca, que se transforma em uma IAM função ARN em tempo de execução.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)" }, ... } } }