

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á.

# Solução de problemas no Step Functions
<a name="troubleshooting"></a>

Se você encontrar dificuldades ao trabalhar com o Step Functions, use os seguintes recursos para solução de problemas.

Os tópicos a seguir fornecem orientações de solução de erros e de problemas que você pode encontrar relacionados a máquinas de estado, integrações de serviços, atividades e fluxos de trabalho do Step Functions. Se encontrar um problema que não esteja listado aqui, você poderá usar o botão **Feedback** desta página para relatá-lo.

Para obter mais orientações sobre solução de problemas e respostas a perguntas comuns de suporte, acesse a [Central de Conhecimento da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/#AWS_Lambda).

**Topics**
+ [Problemas gerais](#troubleshooting-general)
+ [Integrações de serviços](#troubleshooting-service-integrations)
+ [Atividades](#troubleshooting-activities)
+ [Fluxos de trabalho expressos](#troubleshooting-express-workflows)

## Solução de problemas gerais
<a name="troubleshooting-general"></a>

### Não consigo criar uma máquina de estado.
<a name="troubleshooting-general-unable-to-create"></a>

O perfil do IAM associado à máquina de estado pode não ter [permissões suficientes](auth-and-access-control-sfn.md#auth-and-access-control-sfn.title). Verifique as permissões da função do IAM, inclusive para tarefas AWS de integração de serviços, X-Ray e CloudWatch registro. São necessárias permissões adicionais para os estados da tarefa `.sync`. 

### Não consigo usar a para JsonPath referenciar a saída da tarefa anterior.
<a name="troubleshooting-general-unable-to-use-json"></a>

Para a JsonPath, uma chave JSON deve terminar com`.$`. Isso significa que a só JsonPath pode ser usado em um par de valores-chave. Se quiser usar JsonPath outros lugares, como uma matriz, você pode usar funções [intrínsecas](intrinsic-functions.md). Por exemplo, você pode usar algo semelhante a:

**Saída da tarefa A:**

```
{
    "sample": "test"
}
```

**Tarefa B:**

```
{
    "JsonPathSample.$": "$.sample"
}
```

### Houve um atraso nas transições de estado.
<a name="troubleshooting-general-state-transition-delay"></a>

Para fluxos de trabalho padrão, há um limite no número de transições de estado. Quando você excede o limite de transição de estado, o Step Functions atrasa as transições de estado até que o bucket da cota seja preenchido. A limitação do limite de transição de estado pode ser monitorada revisando a `ExecutionThrottled` métrica na [Execution Metrics (Métricas de execução)](procedure-cw-metrics.md#cloudwatch-step-functions-execution-metrics) seção da CloudWatch página Métricas.

### Quando eu inicio novas execuções do Fluxo de trabalho padrão, elas falham com o erro `ExecutionLimitExceeded`.
<a name="troubleshooting-general-unable-to-start-standard-workflows"></a>

Step Functions tem um limite de 1.000.000 de execuções abertas para cada uma em cada uma Conta da AWS . Região da AWS Se você exceder esse limite, o Step Functions gerará um erro `ExecutionLimitExceeded`. Esse limite não se aplica ao fluxos de trabalho expressos. É possível usar `OpenExecutionCount` para rastrear quando você está se aproximando do `OpenExecutionLimit` e criar alarmes para notificar você proativamente nesse evento. `OpenExecutionCount` é um número aproximado de fluxos de trabalho abertos. Para obter mais informações, consulte [Execution Metrics (Métricas de execução)](procedure-cw-metrics.md#cloudwatch-step-functions-execution-metrics). 

### Uma falha em uma ramificação em um estado paralelo faz com que toda a execução falhe.
<a name="troubleshooting-general-branch-failure-causes-execution-failure"></a>

Esse é um comportamento esperado. Para evitar falhas ao usar um estado paralelo, configure o Step Functions para [capturar erros](concepts-error-handling.md#error-handling-fallback-states.title) gerados por cada ramificação. 

## Solução de problemas de integrações de serviço
<a name="troubleshooting-service-integrations"></a>

### Meu trabalho foi concluído no serviço downstream, mas, no Step Functions, o estado da tarefa permanece “Em andamento” ou sua conclusão está atrasada.
<a name="troubleshooting-service-integrations-task-delay"></a>

Para padrões `.sync` de integração de serviços, o Step Functions usa EventBridge regras downstream APIs ou uma combinação de ambas para detectar o status do trabalho downstream. Para alguns serviços, o Step Functions não cria EventBridge regras para monitorar. Por exemplo, para a integração AWS Glue de serviços, em vez de usar EventBridge regras, o Step Functions faz uma `glue:GetJobRun` chamada. Dada a frequência das chamadas de API, há uma diferença entre a conclusão da tarefa downstream e o tempo de conclusão da tarefa do Step Functions. O Step Functions exige permissões do IAM para gerenciar as EventBridge regras e fazer chamadas para o serviço downstream. Para obter mais detalhes sobre como permissões insuficientes em sua função de execução podem afetar a conclusão de tarefas, consulte [Permissões adicionais para tarefas usando .sync](service-integration-iam-templates.md#connect-iam-sync-async). 

### Quero retornar uma saída JSON de uma execução de máquina de estado aninhada.
<a name="troubleshooting-service-integrations-json-from-nested"></a>

Há duas integrações de serviços síncronos do Step Functions para o Step Functions: `startExecution.sync` e `startExecution.sync:2`. Ambas aguardam a conclusão da máquina de estado aninhado, mas retornam formatos diferentes de `Output`. Você pode usar `startExecution.sync:2` para retornar uma saída JSON em `Output`. 

### Não consigo invocar uma função do Lambda de outra conta.
<a name="troubleshooting-service-integrations-invoke-lambda-from-account"></a>

**Como acessar a função do Lambda com suporte entre contas**  
Se o [acesso entre contas aos](concepts-access-cross-acct-resources.md) AWS recursos estiver disponível em sua região, use o método a seguir para invocar uma função Lambda de outra conta.

Para invocar um recurso entre contas em seus fluxos de trabalho, faça o seguinte:

1. Crie um perfil do IAM na conta de destino que contém o recurso. Esse perfil concede permissões à conta de origem que contém a máquina de estado para acessar os recursos da conta de destino.

1. Na definição do estado da `Task`, especifique o perfil do IAM de destino a ser assumido pela máquina de estado antes de invocar o recurso entre contas.

1. Modifique a política de confiança no perfil do IAM de destino para permitir que a conta de origem assuma esse perfil temporariamente. A política de confiança deve incluir o nome do recurso da Amazon (ARN) da máquina de estado definida na conta de origem. Além disso, defina as permissões apropriadas na função de destino do IAM para chamar o AWS recurso.

1. Atualize o perfil de execução da conta de origem para incluir a permissão necessária para assumir o perfil do IAM de destino.

Por exemplo, consulte [Acessando AWS recursos entre contas em Step Functions](tutorial-access-cross-acct-resources.md) nos tutoriais.

**nota**  
Você pode configurar sua máquina de estado para assumir um perfil do IAM para acessar recursos de várias Contas da AWS. No entanto, uma máquina de estado pode assumir somente um perfil do IAM por vez.

Para obter um exemplo de uma definição de estado `Task` que especifica um recurso entre contas, consulte [Exemplos do campo Credenciais do estado Tarefa](state-task.md#task-state-example-credentials).

**Como acessar a função do Lambda sem suporte entre contas**  
Se o acesso entre contas aos AWS recursos não estiver disponível em sua região, use o método a seguir para invocar uma função Lambda de outra conta.

No campo `Resource` do estado `Task`, use `arn:aws:states:::lambda:invoke` e passe `FunctionArn` nos parâmetros. O perfil do IAM associado à máquina de estado deve ter as permissões corretas para invocar funções do Lambda entre contas: `lambda:invokeFunction`. 

```
{  
   "StartAt":"CallLambda",
   "States":{  
      "CallLambda":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Parameters":{  
            "FunctionName":"arn:aws:lambda:{{region}}:{{account-id}}:function:my-function"
         },
         "End":true
      }
   }
}
```

### Não consigo ver os tokens de tarefas transmitidos dos estados `.waitForTaskToken`.
<a name="troubleshooting-service-integrations-unable-to-see-task-tokens"></a>

 No `Parameters` campo do `Task` estado, você deve passar um token de tarefa. Por exemplo, você pode usar algo semelhante ao código a seguir.

```
{  
   "StartAt":"taskToken",
   "States":{  
      "taskToken":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
         "Parameters":{  
            "FunctionName":"get-model-review-decision",
            "Payload":{  
               "token.$":"$$.Task.Token"
            },
         },
         "End":true
      }
   }
}
```

**nota**  
Você pode tentar usar `.waitForTaskToken` com qualquer ação de API. No entanto, alguns APIs não têm parâmetros adequados.

## Atividades de solução de problemas
<a name="troubleshooting-activities"></a>

### A execução da minha máquina de estado está emperrada em um estado de atividade.
<a name="troubleshooting-activities-stuck-state-machine"></a>

O estado de uma tarefa de atividade não começa até você pesquisar um token de tarefa usando a ação da [GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)API. Como prática recomendada, adicione um tempo limite no nível da tarefa para evitar uma execução emperrada. Para obter mais informações, consulte [Usar tempos limite para evitar o travamento de execuções do fluxo de trabalho do Step Functions](sfn-best-practices.md#sfn-stuck-execution). 

Se sua máquina de estado estiver paralisada no [ActivityScheduled](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ActivityScheduledEventDetails.html)evento, isso indica que sua frota de trabalhadores ativos tem problemas ou está subdimensionada. Você deve monitorar a [`ActivityScheduleTime`](procedure-cw-metrics.md#cloudwatch-step-functions-activity-metrics) CloudWatch métrica e definir um alarme quando esse tempo aumentar. No entanto, para expirar qualquer execução de máquina de estado emperrada em que o estado `Activity` não faça a transição para o estado `ActivityStarted`, defina um tempo limite no nível da máquina de estado. Para fazer isso, especifique um campo `TimeoutSeconds` no início da definição da máquina de estado, fora do campo `States`.

### Meu trabalhador da atividade atinge o tempo limite enquanto aguarda por um token de tarefa.
<a name="troubleshooting-activity-worker-times-out"></a>

Os trabalhadores usam a ação da [GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)API para recuperar uma tarefa com o ARN de atividade especificado que está programada para execução por uma máquina de estado em execução. `GetActivityTask`inicia uma longa pesquisa, para que o serviço mantenha a conexão HTTP aberta e responda assim que uma tarefa estiver disponível. O tempo máximo em que o serviço retém a solicitação antes de responder é de 60 segundos. Se nenhuma tarefa estiver disponível em 60 segundos, a pesquisa retornará um `taskToken` com uma string nula. Para evitar esse tempo limite, configure um soquete do lado do cliente [com um tempo limite de pelo menos 65](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html) segundos no AWS SDK ou no cliente que você está usando para fazer a chamada da API. 

## Solucionar problemas nos fluxos de trabalho expressos
<a name="troubleshooting-express-workflows"></a>

### Meu aplicativo expira antes de receber uma resposta de uma chamada de API `[StartSyncExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartSyncExecution.html)`.
<a name="troubleshooting-express-workflows-timeouts"></a>

Configure o tempo limite do soquete do lado do cliente no AWS SDK ou no cliente que você usa para fazer a chamada à API. Para receber uma resposta, o tempo limite deve ter um valor maior do que a duração das execuções do fluxos de trabalho expresso.

### Não consigo ver o histórico de execução para solucionar problemas do fluxos de trabalho expresso.
<a name="troubleshooting-express-workflows-no-execution-history"></a>

O fluxos de trabalho expressos não registra o histórico de execução no AWS Step Functions. Em vez disso, você deve ativar o CloudWatch registro. Depois que o registro for ativado, você poderá usar as consultas do CloudWatch Logs Insights para revisar suas execuções do Express Workflow. Você também pode visualizar o histórico de execução das execuções do fluxos de trabalho expresso no console Step Functions se escolher o botão **Ativar** na guia **Execuções**. Para obter mais informações, consulte [Visualizar os detalhes da execução no console do Step Functions](concepts-view-execution-details.md).

Para listar as execuções com base na duração:

```
fields ispresent(execution_arn) as exec_arn
| filter exec_arn 
| filter type in ["ExecutionStarted", "ExecutionSucceeded", "ExecutionFailed", "ExecutionAborted", "ExecutionTimedOut"]
| stats latest(type) as status, 
  tomillis(earliest(event_timestamp)) as UTC_starttime, 
  tomillis(latest(event_timestamp)) as UTC_endtime, 
  latest(event_timestamp) - earliest(event_timestamp) as duration_in_ms  by execution_arn
| sort duration_in_ms desc
```

Para listar as execuções que falharam e foram canceladas:

```
fields ispresent(execution_arn) as isRes | filter type in ["ExecutionFailed", "ExecutionAborted", "ExecutionTimedOut"]
```