Todos os produtos
Search
Central de documentação

CloudFlow:Error handling

Última atualização: Jun 28, 2026

Workflows do CloudFlow podem apresentar erros esperados ou inesperados durante a execução. O tratamento de erros permite uma recuperação adequada ao tentar novamente o estado com falha ou ao fazer a transição para um estado diferente.

Dois mecanismos atuam em conjunto:

  • Retry -- Reexecuta automaticamente o estado com falha. Use esta opção para erros transitórios, como limitação de taxa (throttling) ou problemas temporários de rede.

  • Catch -- Transfere o workflow para um estado designado quando um erro persiste após o esgotamento de todas as tentativas de reexecução.

O CloudFlow sempre avalia primeiro o Retry. A avaliação do Catch ocorre somente após a falha de todas as tentativas de reexecução.

Estados compatíveis

Adicione os campos Retry e Catch aos seguintes tipos de estado:

Retry

O campo Retry aceita um array de regras de nova tentativa. Cada regra especifica quais erros corresponder e como tentar novamente.

Parâmetro

Tipo

Obrigatório

Descrição

Exemplo

Errors

[]string

Sim

Tipos de erro a serem correspondidos. Consulte Tipos de erro.

["MyCustomError", "FnF.ALL"]

Description

string

Sim

Rótulo desta regra de nova tentativa.

Retry policy #1

MaxAttempts

int

Sim

Número máximo de tentativas de reexecução.

3

IntervalSeconds

int

Sim

Intervalo inicial entre novas tentativas, em segundos. Máximo: 86.400 (24 horas).

10

BackoffRate

float

Não

Multiplicador aplicado ao IntervalSeconds após cada tentativa. Se omitido, o intervalo permanece constante.

2

MaxBackoffSeconds

int

Não

Limite superior para o intervalo calculado de nova tentativa, em segundos. Máximo: 86.400 (24 horas).

30

Nota

Se várias regras de nova tentativa corresponderem ao mesmo tipo de erro, o CloudFlow usará apenas a primeira regra correspondente. Posicione tipos de erro mais específicos antes de FnF.ALL para garantir que sejam avaliados primeiro.

Catch

O campo Catch aceita um array de regras de captura. Quando um erro persiste após todas as novas tentativas, o CloudFlow avalia as regras de captura em ordem e faz a transição para o estado Next da primeira regra correspondente.

Parâmetro

Tipo

Obrigatório

Descrição

Exemplo

Errors

[]string

Sim

Tipos de erro a serem correspondidos. Consulte Tipos de erro.

["MyCustomException1", "FnF.ALL"]

Description

string

Sim

Rótulo desta regra de captura.

Error catch rule #1

OutputConstructor

map[string]any

Não

Constrói uma saída personalizada para passar como entrada ao estado Next. Consulte State OutputConstructor.

Veja os exemplos abaixo.

Next

string

Sim

Estado de destino da transição quando o erro for capturado.

my-next-state

OutputConstructor

Quando ocorre um erro, o estado com falha não produz saída. Sem o OutputConstructor, o próximo estado não recebe entrada e o workflow não consegue prosseguir adequadamente. Use o OutputConstructor para criar uma saída estruturada que o estado Next possa consumir.

Nota

Se múltiplas regras de captura corresponderem ao mesmo tipo de erro, o CloudFlow usa apenas a primeira regra correspondente.

Tipos de erro

Erros do CloudFlow

Esses erros têm origem no próprio mecanismo do CloudFlow.

Tipo de erro

Descrição

FnF.TaskTimeout

Uma única etapa no workflow atingiu o tempo limite.

FnF.Timeout

A execução geral de um workflow atingiu o tempo limite.

FnF.ALL

Curinga que captura todos os erros do CloudFlow. Coloque esta opção como a última entrada no array Retry ou Catch para que regras mais específicas sejam avaliadas primeiro.

Erros do Function Compute

Esses erros ocorrem quando o CloudFlow invoca o Function Compute. Para tipos de erro relacionados a outras integrações de serviço, consulte a documentação do serviço correspondente.

Tipo de erro

Descrição

FC.ResourceThrottled

Funções limitadas devido à alta concorrência. Todas as funções são limitadas por um valor total de concorrência. O CloudFlow invoca sincronamente o Function Compute ao executar estados Task. O valor total de concorrência é a soma da concorrência nas invocações de função e dos valores de concorrência de outros métodos de invocação. Você pode solicitar a modificação do valor de concorrência das invocações síncronas do Function Compute.

FC.ResourceExhausted

Funções limitadas devido a recursos insuficientes. Entre em contato conosco para resolver este problema.

FC.InternalServerError

Erro de sistema no Function Compute. Execute novamente o workflow.

FC.Unknown

O Function Compute invocou a função, mas ocorreu um erro não capturado durante a execução. Código de erro de exemplo: UnhandledInvocationError.

FC.{ErrorCode}

Qualquer outro erro do Function Compute em que {ErrorCode} é o código de erro específico. Consulte Códigos de erro do Function Compute.

Erros personalizados

Tipo de erro

Descrição

{CustomError}

Exceções personalizadas lançadas pelo chamado, como erros de lógica de negócios em suas funções.

Exemplos

Todos os exemplos usam um estado Task que invoca uma função do Function Compute via FC:InvokeFunction. Substitua o espaço reservado resourceArn pelo ARN real da sua função:

acs:fc:<region-id>:<account-id>:functions/<function-name>/<version-or-alias>

Espaço reservado

Descrição

Exemplo

<region-id>

Região onde a função reside

cn-hangzhou

<account-id>

ID da conta Alibaba Cloud

Seu ID numérico de conta

<function-name>

Nome da função

myfunction

<version-or-alias>

Versão ou alias da função

LATEST

Para obter detalhes sobre como obter o ARN da função, consulte Obter o ARN da função.

Retry e catch básicos

Este exemplo tenta novamente MyCustomException1 até 3 vezes com intervalos de 2 segundos. Se todas as tentativas falharem, a regra de captura constrói uma saída de erro personalizada e faz a transição para ErrorCatchExit.

Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of basic error handling
StartAt: my-error-handle-example
States:
  - Type: Task
    Name: my-error-handle-example
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
      invocationType: Sync
      body: |
        xxx
    Retry:
      - Errors:
          - MyCustomException1
        Description: retry policy 1
        MaxAttempts: 3
        IntervalSeconds: 2
    Catch:
      - Errors:
          - MyCustomException1
        Description: catch policy 1
        OutputConstructor:
          ErrorCode: MyCustomException1
          ErrorMessage: MyCustomException1
        Next: ErrorCatchExit
    Next: SucceededExit
  - Type: Pass
    Name: ErrorCatchExit
    End: true
  - Type: Pass
    Name: SucceededExit
    End: true

Comportamento em tempo de execução:

  1. O estado Task executa FC:InvokeFunction.

  2. Se ocorrer MyCustomException1, o CloudFlow tentará novamente até 3 vezes, aguardando 2 segundos entre as tentativas.

  3. Se todas as tentativas falharem, a regra de captura corresponderá a MyCustomException1, construirá uma saída com ErrorCode e ErrorMessage e fará a transição para ErrorCatchExit.

  4. Na ausência de erros, o workflow fará a transição para SucceededExit.

Nota

MyCustomException1 é usado como exemplo. Modifique o nome do erro conforme seus requisitos de negócios.

Retry com backoff

Neste exemplo, há novas tentativas para MyCustomException2 ou MyCustomException3 até 3 vezes com backoff exponencial. O intervalo inicial é de 5 segundos e dobra após cada tentativa (taxa de backoff de 2,0).

Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of backoff error handling
StartAt: my-error-handle-example
States:
  - Type: Task
    Name: my-error-handle-example
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
      body: xxx
    Retry:
      - Errors:
          - MyCustomException2
          - MyCustomException3
        Description: retry policy 2
        MaxAttempts: 3
        IntervalSeconds: 5
        BackoffRate: 2.0
    Catch:
      - Errors:
          - MyCustomException2
          - MyCustomException3
        Description: catch policy 2
        Next: ErrorCatchExit
    Next: SucceededExit
  - Type: Pass
    Name: ErrorCatchExit
    End: true
  - Type: Pass
    Name: SucceededExit
    End: true

Temporização das novas tentativas:

O sistema realiza tentativas em intervalos de 5, 10, 20 e 40 segundos com base na taxa de backoff de 2,0.

Se todas as tentativas falharem, a regra de captura transferirá o workflow para ErrorCatchExit. Nenhum OutputConstructor está definido aqui; portanto, o próximo estado não recebe saída de erro personalizada.

Múltiplas políticas de retry e catch

Este exemplo combina três níveis de tratamento de erros com diferentes estratégias de nova tentativa:

  1. **MyCustomException1** -- Nova tentativa até 3 vezes com intervalos fixos de 2 segundos.

  2. **MyCustomException2 e MyCustomException3** -- Nova tentativa até 3 vezes com backoff exponencial (inicial: 5s, taxa de backoff: 2,0).

  3. **FnF.ALL (captura geral)** -- Nova tentativa até 3 vezes com backoff exponencial (inicial: 5s, taxa de backoff: 2,0), limitado a 30 segundos por MaxBackoffSeconds.

Type: StateMachine
Name: ErrorHandleExample
SpecVersion: v1
Description: an example of error handling
StartAt: my-error-handle-example
States:
  - Type: Task
    Name: my-error-handle-example
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:{regionId}:{accountId}:functions/myfunction/LATEST
      body: xxx
    Retry:
      - Errors:
          - MyCustomException1
        Description: retry policy 1
        MaxAttempts: 3
        IntervalSeconds: 2
      - Errors:
          - MyCustomException2
          - MyCustomException3
        Description: retry policy 2
        MaxAttempts: 3
        IntervalSeconds: 5
        BackoffRate: 2.0
      - Errors:
          - FnF.ALL
        Description: retry policy 3
        MaxAttempts: 3
        IntervalSeconds: 5
        BackoffRate: 2.0
        MaxBackoffSeconds: 30
    Catch:
      - Errors:
          - MyCustomException1
        Description: catch policy 1
        OutputConstructor:
          ErrorCode: MyCustomException1
          ErrorMessage: MyCustomException1
        Next: ErrorCatchExit
      - Errors:
          - MyCustomException2
          - MyCustomException3
        Description: catch policy 2
        Next: ErrorCatchExit
      - Errors:
          - FnF.ALL
        Description: catch policy 3
        Next: ErrorCatchExit
    Next: SucceededExit
  - Type: Pass
    Name: ErrorCatchExit
    End: true
  - Type: Pass
    Name: SucceededExit
    End: true

Funcionamento da correspondência de regras:

O CloudFlow avalia as regras de nova tentativa e de captura na ordem em que aparecem. Para um erro que não corresponda a MyCustomException1, MyCustomException2 ou MyCustomException3, a regra de captura geral FnF.ALL cuidará dele. A nova tentativa do FnF.ALL usa MaxBackoffSeconds: 30 para limitar o intervalo, então o sistema realiza tentativas em intervalos de 5, 10, 20 e 30 segundos.

Após o esgotamento de todas as tentativas, a regra de captura correspondente transfere o workflow para ErrorCatchExit.