Uma etapa de tarefa invoca uma função do Function Compute e oferece suporte a novas tentativas, captura de erros e mapeamentos de entrada e saída.
Atributos
Uma etapa de tarefa invoca uma função do Function Compute.
Uma etapa de tarefa contém os seguintes atributos:
type: tipo da etapa. O valor task indica que a etapa é do tipo tarefa.name: nome da etapa.resourceArn: identificador do recurso. Tipos compatíveis: funções, filas MNS e fluxos do Serverless workflow. Exemplo:acs:fc:cn-shanghai:18807708****3420:services/fnf_test/functions/hello.Integração de serviços.-
Opcional: pattern: modo de execução do serviço de integração. Valor padrão:
requestResponse. Valores válidos:requestResponse: aguarda a conclusão da tarefa antes de continuar.sync: envia a tarefa de forma assíncrona e aguarda o resultado da execução antes de prosseguir.waitForCallback: envia a tarefa de forma assíncrona e suspende a etapa até receber um callback ou atingir o tempo limite.
Opcional:
timeoutSeconds: tempo limite da tarefa em segundos. A etapa expira se a execução ultrapassar essa duração.Opcional:
end: define se o fluxo continua para as etapas subsequentes após a conclusão desta etapa.Opcional:
inputMappings: mapeamentos de entrada. A entrada da etapa é transmitida como evento de invocação da função. Para mais informações, consulte InvokeFunction.-
Opcional:
outputMappings: mapeamentos de saída.$localrepresenta o resultado da invocação da função e deve estar no formato JSON.NotaSe nenhum mapeamento de saída for especificado,
$local
será a saída padrão da etapa.
-
Opcional:
errorMappings: mapeamentos de erro. Válido apenas quando ocorre um erro durante a execução da etapa e o parâmetrocatchestá definido. Use os valores$local.causee$local.errorpara mapear informações de erro na saída da próxima etapa.NotaOs valores
$local.error
e
$local.code
são reservados pelo sistema. O campo
source
em errorMappings deve ser defina com esses dois valores.
. O parâmetro
errorMappings
é opcional. Se omitido, as informações de erro não estarão disponíveis na etapa seguinte.
-
retry: políticas de nova tentativa. Cada política tem os seguintes atributos:errors: um ou mais erros da tabela de Definições de erro.intervalSeconds: intervalo inicial de nova tentativa em segundos. Máximo: 86.400. Padrão: 1.maxIntervalSeconds: intervalo máximo entre novas tentativas. Valor máximo e padrão: 86.400 segundos.maxAttempts: número máximo de novas tentativas. Padrão: 3.multiplier: multiplicador aplicado a cada intervalo sucessivo de nova tentativa. Padrão: 2.
-
catch: políticas de captura de erros. Cada política tem os seguintes atributos:errors: um ou mais erros da tabela de definições de erro.-
goto: nome da etapa de destino.NotaA etapa de destino deve ser paralela à etapa de tarefa atual.
|
Status de execução da função |
Código de status HTTP da resposta do Function Compute |
Resposta do Function Compute |
**Falha na etapa do Serverless workflow (for retry and catch)** |
Retry |
|
Não executada |
429 |
|
|
Sim |
|
Não executada |
4xx, exceto 429 |
|
|
Não |
|
Incerto |
500 |
|
|
Sim |
|
Não executada |
503 |
|
|
Sim |
|
Execução bem-sucedida com código de erro retornado |
200 |
Erro personalizado, incluindo |
|
Determinado pela lógica de negócio |
|
Falha na execução com código de erro retornado |
200 |
Sem |
|
Sim |
|
Execução bem-sucedida com objeto não JSON retornado |
200 |
Sem |
|
Não |
Outros erros
:
FnF.ALL: corresponde a todos os erros para casos de uso de retry ou catch.
Exemplos
-
Etapas de tarefa simples
O fluxo de exemplo a seguir contém uma etapa de tarefa.
Se a entrada for
{"name": "function flow"}, a saída será{"hello": "function flow"}.Se nenhuma entrada for fornecida ou se a chave
nameestiver ausente, a etapa de tarefa falhará e o fluxo também falhará.
-
Defina o fluxo.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/helloParâmetros de
resourceArn
:
{region}: substitua pela região real, comocn-shanghai.-
{accountID}: substitua pelo seu ID da conta. Encontre seu ID da conta clicando na foto de perfil na página Flows do console do Serverless Workflow.
-
Defina a função.
import json class MyError(Exception): pass def handle(event, context): evt = json.loads(event) if "name" in evt: return { "hello": evt["name"] } else: raise MyError("My unhandled exception")
-
Nova tentativa
Este exemplo tenta executar novamente a tarefa em caso de
MyError. Se nenhuma entrada for fornecida ou se a chavenameestiver ausente, o Serverless workflow tentará executar a tarefa novamente conforme a política de retry.Aguarda 3 segundos após o primeiro erro e tenta novamente.
Aguarda 6 segundos (
intervalSeconds x multiplier) após o segundo erro e tenta novamente.Aguarda 12 segundos (
intervalSeconds x multiplier x multiplier) após o terceiro erro e tenta novamente.Se o erro persistir após três tentativas, o limite de
maxAttemptsserá excedido, causando a falha da etapa de tarefa e do fluxo.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello retry: - errors: - MyError intervalSeconds: 3 maxAttempts: 3 multiplier: 2 -
Captura de erros
Este exemplo captura o
MyErrore salta para a etapafinal. Como o erro foi capturado, o fluxo é concluído com sucesso.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: final -
Captura de erros com mapeamentos de erro especificados
Este exemplo captura o
MyErrore salta para a etapafinal. Com os mapeamentos de erro definidos, a etapafinalpode acessar os detalhes do erro. Também é possível usarerrorMappingspara mapear entradas da etapa e constantes para as saídas.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello errorMappings: - target: errMsg source: $local.cause # This value is reserved for the system and can be used directly when an error occurs in this step. - target: errCode source: $local.error # This value is reserved for the system and can be used directly when an error occurs in this step. catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: finalO
eventda etapa final contém o seguinteEventDetail:"EventDetail": "{\"input\":{},\"local\":{\"errorCode\":\"MyError\",\"errorMsg\":\"some message\"}}",