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á.
Tratamento de erros nos fluxos de trabalho do Step Functions
Todos os estados, exceto Pass
e Wait
estados, podem encontrar erros de tempo de execução. Os erros podem ocorrer por vários motivos, como os seguintes:
-
Problemas de definição da máquina de estado (por exemplo, nenhuma regra de correspondência em um estado
Choice
) -
Falhas na tarefa (por exemplo, uma exceção em um AWS Lambda função)
-
Problemas transitórios (por exemplo, eventos de partição de rede)
Por padrão, quando um estado relata um erro, AWS Step Functions faz com que a execução falhe completamente.
dica
Para implantar um exemplo de fluxo de trabalho que inclua tratamento de erros em seu Conta da AWS, consulte Tratamento de erros
Nomes de erro
O Step Functions identifica erros na Amazon States Language usando sequências de caracteres que diferenciam maiúsculas de minúsculas, conhecidas como nomes de erro. A Amazon States Language define um conjunto de sequências de caracteres incorporadas que nomeiam erros conhecidos, todos começando com o States.
prefixo.
-
States.ALL
-
Um curinga que corresponde a qualquer nome de erro conhecido.
nota
Esse tipo de erro não pode capturar o tipo de erro do
States.DataLimitExceeded
terminal e os tipos de erro de tempo de execução. Para obter mais informações sobre esses tipos de erro, consulte States.DataLimitExceededStates.Runtimee. -
States.DataLimitExceeded
-
Relatado devido às seguintes condições:
-
Quando a saída de um conector é maior que a cota de tamanho da carga útil.
-
Quando a saída de um estado é maior que a cota de tamanho da carga útil.
-
Quando, após o
Parameters
processamento, a entrada de um estado for maior que a cota de tamanho da carga útil.
Para obter mais informações sobre cotas, consulteCotas de serviço do Step Functions.
nota
Esse é um erro de terminal que não pode ser detectado pelo tipo de
States.ALL
erro. -
States.ExceedToleratedFailureThreshold
Um
Map
estado falhou porque o número de itens com falha excedeu o limite especificado na definição da máquina de estado. Para obter mais informações, consulte Definindo limites de falha para estados do Distributed Map em Step Functions.-
States.HeartbeatTimeout
-
Um
Task
estado falhou ao enviar uma pulsação por um período maior que oHeartbeatSeconds
valor.nota
Esse erro só está disponível nos
Retry
camposCatch
e. -
States.Http.Socket
-
Esse erro ocorre quando uma HTTP tarefa dura cerca de 60 segundos. Consulte Cotas relacionadas à tarefa HTTP.
-
States.IntrinsicFailure
-
Uma tentativa de invocar uma função intrínseca em um modelo de carga falhou.
States.ItemReaderFailed
Um
Map
estado falhou porque não foi possível ler a partir da fonte do item especificada noItemReader
campo. Para obter mais informações, consulteItemReader (Mapa)
.-
States.NoChoiceMatched
-
Um
Choice
estado falhou em combinar a entrada com as condições definidas na regra de escolha e uma transição padrão não foi especificada. -
States.ParameterPathFailure
-
Uma tentativa de substituir um campo, dentro do
Parameters
campo de um estado, cujo nome termina em.$
usar um caminho falha. -
States.Permissions
-
Um
Task
estado falhou porque não tinha privilégios suficientes para executar o código especificado. -
States.ResultPathMatchFailure
-
Step Functions falhou ao aplicar o
ResultPath
campo de um estado à entrada que o estado recebeu. States.ResultWriterFailed
Um
Map
estado falhou porque não conseguiu gravar os resultados no destino especificado noResultWriter
campo. Para obter mais informações, consulteResultWriter (Mapa)
.States.Runtime
-
Uma execução falhou devido a alguma exceção que não pôde ser processada. Geralmente, eles são causados por erros em tempo de execução, como tentativa de inscrição
InputPath
ouOutputPath
em uma carga nulaJSON. UmStates.Runtime
erro não é recuperável e sempre fará com que a execução falhe. Uma nova tentativa ou catch onStates.ALL
não detectaráStates.Runtime
erros. -
States.TaskFailed
-
Um estado
Task
falhou durante a execução. Quando usado em uma nova tentativa ou captura,States.TaskFailed
atua como um curinga que corresponde a qualquer nome de erro conhecido, exceto o.States.Timeout
-
States.Timeout
-
Um estado
Task
que executou por um tempo mais longo que o valorTimeoutSeconds
ou não conseguiu enviar uma pulsação por um período maior que o valorHeartbeatSeconds
.Além disso, se uma máquina de estado for executada por mais tempo do que o
TimeoutSeconds
valor especificado, a execução falhará com umStates.Timeout
erro.
Os estados podem relatar erros com outros nomes. No entanto, esses nomes de erro não podem começar com o States.
prefixo.
Como prática recomendada, garanta que o código de produção possa lidar com AWS Lambda exceções de serviço (Lambda.ServiceException
eLambda.SdkClientException
). Para obter mais informações, consulte Lidar com exceções transitórias do serviço Lambda.
nota
Os erros não tratados no Lambda são relatados como Lambda.Unknown
na saída do erro. Isso inclui out-of-memory erros e tempos limite de função. Você pode combinar com Lambda.Unknown
, States.ALL
ou States.TaskFailed
para lidar com esses erros. Quando o Lambda atinge o número máximo de invocações, o erro é Lambda.TooManyRequestsException
. Para obter mais informações sobre Lambda Handled
e Unhandled
erros, consulte FunctionError
no AWS Lambda Guia do desenvolvedor.
Tentando novamente após um erro
Task
,Parallel
, e Map
os estados podem ter um campo chamadoRetry
, cujo valor deve ser uma matriz de objetos conhecidos como retriers. Um retrier individual representa determinado número de novas tentativas, geralmente em intervalos de tempo crescentes.
Quando um desses estados relata um erro e há um Retry
campo, o Step Functions examina os recuperadores na ordem listada na matriz. Quando o nome do erro aparece no valor do ErrorEquals
campo de um recuperador, a máquina de estado faz novas tentativas conforme definido no Retry
campo.
Se suas receitas redriven a execução executa novamente um estado Estado do fluxo de trabalho da tarefaEstado do fluxo de trabalho paralelo,, ou Inline Map, para o qual você definiu novas tentativas. A contagem de tentativas para esses estados é redefinida para 0 para permitir o número máximo de tentativas em redrive. Para um redriven execução, você pode rastrear tentativas individuais desses estados usando o console. Para obter mais informações, consulte Repetir o comportamento do redriven execuções em Reiniciando as execuções da máquina de estado com redrive em Step Functions.
Um retrier contém os seguintes campos:
nota
As novas tentativas são tratadas como transições de estado. Para ver informações sobre como as transições de estado afetam o faturamento, consulte Preços do Step Functions
-
ErrorEquals
(obrigatório) -
Uma matriz não vazia de strings que correspondem a Nomes de erro. Quando um estado relata um erro, o Step Functions examina os retriers. Quando o nome do erro é exibido na matriz, ele implementa a política de novas tentativas descrita nesse retrier.
-
IntervalSeconds
(opcional) -
Um inteiro positivo que representa o número de segundos antes da primeira tentativa nova (por padrão,
1
).IntervalSeconds
tem um valor máximo de 99999999. -
MaxAttempts
(opcional) -
Um inteiro positivo que representa o número máximo de tentativas novas (por padrão,
3
). Se o erro voltar a ocorrer mais vezes do que o especificado, as novas tentativas são interrompidas e o tratamento de erro normal é retomado. Um valor de0
especifica que o erro nunca será repetido.MaxAttempts
tem um valor máximo de 99999999. -
BackoffRate
(opcional) -
O multiplicador pelo qual o intervalo de repetição indicado por
IntervalSeconds
aumenta após cada tentativa de nova tentativa. Por padrão, oBackoffRate
valor aumenta em2.0
.Por exemplo, digamos que você
IntervalSeconds
é 3,MaxAttempts
é 3 eBackoffRate
é 2. A primeira tentativa de repetição ocorre três segundos após a ocorrência do erro. A segunda tentativa ocorre seis segundos após a primeira tentativa. Enquanto a terceira tentativa ocorre 12 segundos após a segunda tentativa. -
MaxDelaySeconds
(opcional) -
Um número inteiro positivo que define o valor máximo, em segundos, até o qual um intervalo de repetição pode aumentar. É útil usar esse campo com o
BackoffRate
campo. O valor especificado nesse campo limita os tempos de espera exponenciais resultantes do multiplicador da taxa de recuo aplicado a cada tentativa consecutiva de repetição. Você deve especificar um valor maior que 0 e menor que 31622401 para.MaxDelaySeconds
Se você não especificar esse valor, o Step Functions não limitará os tempos de espera entre as tentativas de repetição.
-
JitterStrategy
(opcional) -
Uma sequência de caracteres que determina se deve ou não incluir instabilidade nos tempos de espera entre tentativas consecutivas de repetição. O Jitter reduz as tentativas simultâneas de repetição distribuindo-as em um intervalo de atraso aleatório. Essa string aceita
FULL
ouNONE
como seus valores. O valor padrão éNONE
.Por exemplo, digamos que você tenha definido
MaxAttempts
como 3,IntervalSeconds
como 2 eBackoffRate
como 2. A primeira tentativa de repetição ocorre dois segundos após a ocorrência do erro. A segunda tentativa ocorre quatro segundos após a primeira tentativa e a terceira ocorre oito segundos após a segunda tentativa. Se você definirJitterStrategy
comoFULL
, o primeiro intervalo de repetição será aleatório entre 0 e 2 segundos, o segundo intervalo de repetição será aleatório entre 0 e 4 segundos e o terceiro intervalo de repetição será aleatório entre 0 e 8 segundos.
Tente novamente exemplos de campo
Esta seção inclui os seguintes exemplos de Retry
campo.
dica
Para implantar um exemplo de fluxo de trabalho de tratamento de erros em seu Conta da AWS, consulte o módulo de tratamento de erros
Exemplo 1 — Tente novamente com BackoffRate
O exemplo a seguir de a Retry
faz duas tentativas de repetição, com a primeira tentativa ocorrendo depois de esperar por três segundos. Com base no BackoffRate
que você especifica, o Step Functions aumenta o intervalo entre cada nova tentativa até que o número máximo de tentativas seja atingido. No exemplo a seguir, a segunda tentativa começa depois de esperar por três segundos após a primeira tentativa.
"Retry": [ {
"ErrorEquals": [ "States.Timeout" ],
"IntervalSeconds": 3,
"MaxAttempts": 2,
"BackoffRate": 1
} ]
Exemplo 2 — Tente novamente com MaxDelaySeconds
O exemplo a seguir faz três tentativas de repetição e limita o tempo de espera resultante BackoffRate
em 5 segundos. A primeira tentativa ocorre depois de esperar por três segundos. A segunda e a terceira tentativas de repetição ocorrem após a espera de cinco segundos após a tentativa anterior, devido ao limite máximo de tempo de espera definido por. MaxDelaySeconds
"Retry": [ {
"ErrorEquals": [ "States.Timeout" ],
"IntervalSeconds": 3,
"MaxAttempts": 3,
"BackoffRate":2,
"MaxDelaySeconds": 5,
"JitterStrategy": "FULL"
} ]
Sem issoMaxDelaySeconds
, a segunda tentativa ocorreria seis segundos após a primeira tentativa, e a terceira tentativa ocorreria 12 segundos após a segunda tentativa.
Exemplo 3 — Tente novamente todos os erros, exceto States.Timeout
O nome reservado States.ALL
que aparece no campo ErrorEquals
de um retrier é um curinga que corresponde a qualquer nome de erro. Ele deve aparecer sozinho na matriz ErrorEquals
e também no último retrier na matriz Retry
. O nome States.TaskFailed
também atua como um curinga e corresponde a qualquer erro, exceto o. States.Timeout
O exemplo a seguir de um Retry
campo repete qualquer erro, excetoStates.Timeout
.
"Retry": [ {
"ErrorEquals": [ "States.Timeout" ],
"MaxAttempts": 0
}, {
"ErrorEquals": [ "States.ALL" ]
} ]
Exemplo 4 — Cenário complexo de nova tentativa
Parâmetros de um retrier em todas as visitas ao retrier no contexto de uma única execução de estado.
Considere o seguinte estado Task
.
"X": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:123456789012:task:X",
"Next": "Y",
"Retry": [ {
"ErrorEquals": [ "ErrorA", "ErrorB" ],
"IntervalSeconds": 1,
"BackoffRate": 2.0,
"MaxAttempts": 2
}, {
"ErrorEquals": [ "ErrorC" ],
"IntervalSeconds": 5
} ],
"Catch": [ {
"ErrorEquals": [ "States.ALL" ],
"Next": "Z"
} ]
}
Essa tarefa falha quatro vezes consecutivas, gerando os seguintes nomes de erro:ErrorA
,, ErrorB
ErrorC
, e. ErrorB
O seguinte ocorre em consequência disso:
-
Os dois primeiros erros coincidem com o primeiro recuperador e causam esperas de um e dois segundos.
-
O terceiro erro corresponde ao segundo recuperador e causa uma espera de cinco segundos.
-
O quarto erro também corresponde ao primeiro recuperador. No entanto, ele já atingiu o máximo de duas tentativas (
MaxAttempts
) para esse erro específico. Portanto, esse recuperador falha e a execução redireciona o fluxo de trabalho para oZ
estado por meio do campo.Catch
Estados alternativos
Task
, Map
e cada Parallel
estado pode ter um campo chamadoCatch
. O valor desse campo deve ser uma matriz de objetos, conhecidos como catchers.
Um catcher contém os campos a seguir.
-
ErrorEquals
(obrigatório) -
Uma matriz não vazia de strings que correspondem a nomes de erros, especificados exatamente como aparecem no campo do retrier de mesmo nome.
-
Next
(obrigatório) -
Uma string que deve corresponder exatamente a um dos nomes de estado da máquina de estado.
-
ResultPath
(opcional) -
Um caminho que determina qual entrada o coletor envia para o estado especificado no
Next
campo.
Quando um estado relata um erro e não há Retry
campo ou se as novas tentativas falham em resolver o erro, o Step Functions examina os coletores na ordem listada na matriz. Quando o nome do erro é exibido no valor do campo ErrorEquals
de um catcher, a máquina de estado muda para o estado denominado no campo Next
.
O nome reservado States.ALL
que aparece em um campo ErrorEquals
do catcher é um curinga que corresponde a qualquer nome de erro. Ele deve aparecer sozinho na matriz ErrorEquals
e também no último catcher na matriz Catch
. O nome States.TaskFailed
também atua como um curinga e corresponde a qualquer erro, exceto o. States.Timeout
O exemplo a seguir de um Catch
campo faz a transição para o estado nomeado RecoveryState
quando uma função Lambda gera uma exceção Java não tratada. Do contrário, o campo muda para o estado EndState
.
"Catch": [ {
"ErrorEquals": [ "java.lang.Exception" ],
"ResultPath": "$.error-info",
"Next": "RecoveryState"
}, {
"ErrorEquals": [ "States.ALL" ],
"Next": "EndState"
} ]
nota
Todo catcher pode especificar vários erros para tratamento.
Error output (Saída de erro)
Quando Step Functions faz a transição para o estado especificado em um nome catch, o objeto geralmente contém o campoCause
. O valor desse campo é uma descrição de erro humanamente. Esse objeto é conhecido como saída de erro.
Neste exemplo, o primeiro catcher contém um campo ResultPath
. Ele funciona de modo semelhante a um campo ResultPath
em um nível superior do estado, o que resulta em duas possibilidades:
-
Ele pega os resultados da execução desse estado e substitui toda ou parte da entrada do estado.
-
Ele leva os resultados e os adiciona à entrada. No caso de um erro tratado por um coletor, o resultado da execução do estado é a saída do erro.
Assim, para o primeiro coletor no exemplo, o coletor adiciona a saída de erro à entrada como um campo nomeado error-info
se ainda não houver um campo com esse nome na entrada. Em seguida, o coletor envia toda a entrada paraRecoveryState
. Para o segundo coletor, a saída de erro sobrescreve a entrada e o coletor envia apenas a saída de erro para. EndState
nota
Se você não especificar o campo ResultPath
, ele usará como padrão $
, que seleciona e substitui a entrada completa.
Quando um estado tem Catch
campos Retry
e, o Step Functions usa primeiro qualquer recuperador apropriado. Se a política de repetição não solucionar o erro, o Step Functions aplicará a transição correspondente do coletor.
Cause cargas úteis e integrações de serviços
Um coletor retorna uma carga de string como saída. Ao trabalhar com integrações de serviços, como Amazon Athena ou AWS CodeBuild, talvez você queira converter a Cause
string emJSON. O exemplo a seguir de um Pass
estado com funções intrínsecas mostra como converter uma Cause
string em. JSON
"Handle escaped JSON with JSONtoString": {
"Type": "Pass",
"Parameters": {
"Cause.$": "States.StringToJson($.Cause)"
},
"Next": "Pass State with Pass Processing"
},
Exemplos de máquinas de estado usando Retry e usando Catch
As máquinas de estado definidas nos exemplos a seguir pressupõem a existência de duas funções Lambda: uma que sempre falha e outra que espera o tempo limite definido na máquina de estado.
Essa é uma definição de função do Lambda Node.js que sempre falha, retornando a mensagem error
. Nos exemplos de máquina de estado a seguir, essa função Lambda é nomeada. FailFunction
Para obter informações sobre a criação de uma função Lambda, consulte Etapa 1: criar uma função do Lambda a seção.
exports.handler = (event, context, callback) => {
callback("error");
};
Essa é uma definição de uma função Lambda do Node.js que dorme por 10 segundos. Nos exemplos de máquina de estado a seguir, essa função Lambda é nomeada. sleep10
nota
Ao criar essa função Lambda no console Lambda, lembre-se de alterar o valor do tempo limite na seção Configurações avançadas de 3 segundos (padrão) para 11 segundos.
exports.handler = (event, context, callback) => {
setTimeout(function(){
}, 11000);
};
Lidando com uma falha usando Retry
Essa máquina de estado usa um campo Retry
para tentar novamente uma função que falha e gera o nome de erro HandledError
. Ele repete essa função duas vezes com um recuo exponencial entre as novas tentativas.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction",
"Retry": [ {
"ErrorEquals": ["HandledError"],
"IntervalSeconds": 1,
"MaxAttempts": 2,
"BackoffRate": 2.0
} ],
"End": true
}
}
}
Essa variante usa o código de erro predefinidoStates.TaskFailed
, que corresponde a qualquer erro gerado por uma função Lambda.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction",
"Retry": [ {
"ErrorEquals": ["States.TaskFailed"],
"IntervalSeconds": 1,
"MaxAttempts": 2,
"BackoffRate": 2.0
} ],
"End": true
}
}
}
nota
Como prática recomendada, as tarefas que fazem referência a uma função do Lambda devem lidar com as exceções do serviço do Lambda. Para obter mais informações, consulte Lidar com exceções transitórias do serviço Lambda.
Lidando com uma falha usando Catch
Este exemplo usa um campo Catch
. Quando uma função Lambda gera um erro, ela detecta o erro e a máquina de estado faz a transição para o estado. fallback
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction",
"Catch": [ {
"ErrorEquals": ["HandledError"],
"Next": "fallback"
} ],
"End": true
},
"fallback": {
"Type": "Pass",
"Result": "Hello, AWS Step Functions!",
"End": true
}
}
}
Essa variante usa o código de erro predefinidoStates.TaskFailed
, que corresponde a qualquer erro gerado por uma função Lambda.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction",
"Catch": [ {
"ErrorEquals": ["States.TaskFailed"],
"Next": "fallback"
} ],
"End": true
},
"fallback": {
"Type": "Pass",
"Result": "Hello, AWS Step Functions!",
"End": true
}
}
}
Lidando com um tempo limite usando Retry
Essa máquina de estado usa um Retry
campo para repetir um Task
estado que atinge o tempo limite, com base no valor de tempo limite especificado em. TimeoutSeconds
Step Functions tenta novamente a invocação da função Lambda Task
nesse estado duas vezes, com um recuo exponencial entre as novas tentativas.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:sleep10",
"TimeoutSeconds": 2,
"Retry": [ {
"ErrorEquals": ["States.Timeout"],
"IntervalSeconds": 1,
"MaxAttempts": 2,
"BackoffRate": 2.0
} ],
"End": true
}
}
}
Lidando com um tempo limite usando Catch
Este exemplo usa um campo Catch
. Quando ocorre um tempo limite, a máquina de estado muda para o estado fallback
.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:sleep10",
"TimeoutSeconds": 2,
"Catch": [ {
"ErrorEquals": ["States.Timeout"],
"Next": "fallback"
} ],
"End": true
},
"fallback": {
"Type": "Pass",
"Result": "Hello, AWS Step Functions!",
"End": true
}
}
}
nota
Você pode preservar a entrada de estado e o erro usando ResultPath
. Consulte Use ResultPath para incluir erro e entrada em um Catch.