O CloudFlow orquestra workflows serverless como máquinas de estado definidas em Flow Definition Languages (FDLs). Para chamar uma função do Function Compute em um workflow, adicione um estado Task com a ação FC:InvokeFunction. O mecanismo de fluxo invoca a função, processa a resposta com base no modo de integração escolhido e avança para o próximo estado.
Como funciona
Um fluxo do CloudFlow encadeia estados. Cada estado Task pode invocar um serviço da Alibaba Cloud. Para a integração com o Function Compute, o fluxo segue esta sequência:
Um estado Task aciona a ação
FC:InvokeFunction.O mecanismo de fluxo chama a função-alvo com os parâmetros especificados (ARN, tipo de invocação e payload).
Com base na configuração
TaskMode, o fluxo aguarda a resposta da API, aguarda um callback do sistema ou aguarda um callback personalizado do seu código.O fluxo encapsula ou repassa o valor retornado pela função e avança para o próximo estado.
Conceitos principais
| Conceito | Descrição |
|---|---|
| Estado Task | Um estado que executa trabalho ao chamar um serviço externo. |
FC:InvokeFunction | O identificador de ação que instrui o CloudFlow a invocar uma função do Function Compute. |
TaskMode | Controla como o fluxo processa a resposta: aguardar a resposta da API, aguardar um callback do sistema ou aguardar um callback personalizado. |
resourceArn | O nome de recurso da Alibaba Cloud (ARN) que identifica exclusivamente a função-alvo. |
| Expressões FDL | Expressões integradas ($Input, $Output, $Context) para acessar dados em um fluxo. |
Definir um estado Task
Adicione um estado Task à definição do fluxo. Defina Action como FC:InvokeFunction e forneça os parâmetros necessários em Parameters:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
- Name: an example of function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: xxx
invocationType: xxx
body: xxx
End: trueConfigurar os parâmetros de invocação
Três parâmetros controlam como a função é chamada:
| Parâmetro | Obrigatório | Tipo | Descrição |
|---|---|---|---|
resourceArn | Sim | String | ARN que identifica a função-alvo. Exemplo: acs:fc:::services/myService1.LATEST/functions/myFunction1 |
invocationType | Sim | Sync ou Async | Invocação síncrona ou assíncrona. |
body | Não | Objeto JSON ou string (serializado em um array de bytes antes de ser passado para a função) | Payload do evento passado como parâmetro de entrada da função. |
De acordo com a especificação Spec, os nomes de parâmetros usam camelCase e começam com letra minúscula.
O exemplo a seguir define dois estados: uma invocação síncrona seguida de uma invocação assíncrona:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of synchronous function invocation
States:
- Name: an example of synchronous function invocation
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
testKey: the content of the testKey parameter in the event of the function
Next: an example of asynchronous function invocation
- Name: an example of asynchronous function invocation
Type: Task
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Async
body:
key1: value1
key2: value2
End: trueEscolher um modo de integração
O atributo TaskMode controla como o fluxo processa a chamada de API após invocar a função. Três modos estão disponíveis:
| Modo | Tipos de invocação suportados | Quando usar |
|---|---|---|
RequestComplete | Sync, Async, Async task | O fluxo aguarda a resposta da API e prossegue. |
WaitForSystemCallback | Somente Async, Async task | Use quando o Function Compute envia um callback em nível de sistema após o término da função. |
WaitForCustomCallback | Somente Async, Async task | Use quando seu próprio código determina quando o fluxo deve prosseguir. |
RequestComplete
O fluxo invoca a função e aguarda a resposta da API. Após o sistema responder e retornar o resultado, o fluxo avança para o próximo estado. Este modo funciona com invocações síncronas, invocações assíncronas e invocações de tarefas assíncronas.
Para mais informações, consulte RequestComplete.
WaitForSystemCallback
O fluxo envia a solicitação de invocação e aguarda que o Function Compute envie uma notificação de callback do sistema. O fluxo avança somente após receber esse callback. Este modo funciona apenas com invocações assíncronas e invocações de tarefas assíncronas.
Para mais informações, consulte WaitForSystemCallback.
WaitForCustomCallback
O fluxo invoca a função e entra em pausa. Ele avança somente quando seu programa chama a API de callback do CloudFlow para reportar o resultado da tarefa. Este modo funciona apenas com invocações assíncronas e invocações de tarefas assíncronas.
Para usar este modo, adicione um campo callbackToken ao parâmetro body e referencie a expressão $Context.Current.TaskToken. Este token é a credencial que seu programa deve incluir ao reportar o resultado da tarefa ao fluxo.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: invoke-with-callback
States:
- Name: invoke-with-callback
Type: Task
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Async
body:
callbackToken.$: $Context.Current.TaskToken
key1: value1
End: trueNeste exemplo, o fluxo passa o token da tarefa para a função via callbackToken. A função (ou um processo downstream) chama a API ReportTaskSucceeded ou ReportTaskFailed com este token para notificar o CloudFlow do resultado.
Para mais informações, consulte WaitForCustomCallback.
Para detalhes sobre os tipos de invocação de funções, consulte Invocações síncronas, Invocações assíncronas e Gerenciamento de tarefas assíncronas.
Construir parâmetros dinâmicos
Na maioria dos workflows, as entradas de função dependem do contexto do workflow ou da saída de um estado anterior, em vez de valores estáticos. Use as expressões reservadas $Context e $Input para referenciar dados dinâmicos.
Acrescente .$ ao nome de um parâmetro para indicar que seu valor é uma expressão FDL, não um literal:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
- Name: an example of function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
argument1.$: $Input.input.BucketName
argument2.$: $Input.input.TaskId
End: trueNeste exemplo, argument1 recebe o valor de $Input.input.BucketName e argument2 recebe $Input.input.TaskId no momento da execução.
Processar os resultados da invocação
A forma como o fluxo encapsula o valor retornado pela função depende do modo de integração.
De acordo com a definição da API InvokeFunction, se o valor do parâmetro de resposta Type da função for Byte, o tipo de dado real é Byte. O valor retornado pela função pode ser uma string, um objeto JSON, um array JSON ou um tipo de dado básico.
Modo RequestComplete
O fluxo encapsula o valor retornado pela função em um objeto JSON com um campo Body:
{
"Body": "function invocation result"
}Acesse o valor retornado com $Output.Body nas definições de estados subsequentes. Se o valor retornado for um objeto JSON, desserialize-o com a função integrada do workflow e acesse seus membros como um objeto JSON padrão.
O exemplo a seguir invoca uma função e usa um estado Choice para ramificar com base em um valor da saída da função:
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
Description: ' '
StartAt: Example 1 of function invocation
States:
- Name: Example 1 of function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType: Sync
body:
argument1.$: $Input.Records
argument2.$: $Input.BucketName
Next: conditional statement
- Type: Choice
Name: conditional statement
Branches:
- Condition: $Input.ObjectSize >= $Input.Threshold
Next: Example 2 of function invocation
Default: No action is performed.
- Type: Pass
Name: No action is performed.
End: true
- Name: Example 2 of function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
invocationType: Sync
body:
argument1.$: $Input.BucketName
argument2.$: $Input.TaskId
End: trueModos WaitForSystemCallback e WaitForCustomCallback
Nestes modos, o sistema externo chama a API ReportTaskSucceeded ou ReportTaskFailed para reportar o resultado. O fluxo repassa o resultado sem encapsulá-lo. Por exemplo, se a função retornar {"message": "hello"}, o resultado no fluxo será:
{
"message": "hello"
}Acesse o valor retornado diretamente com a expressão $Output.
Erros comuns
| Código de erro | Causa | Ação |
|---|---|---|
FC.ResourceThrottled | As funções são limitadas porque o total de invocações simultâneas (em CloudFlow e todas as demais fontes de invocação) excede o limite de simultaneidade. O CloudFlow invoca o Function Compute de forma síncrona ao executar estados Task. | Solicite um aumento do limite de simultaneidade. |
FC.ResourceExhausted | As funções são limitadas por recursos insuficientes. | Fale conosco. |
FC.InternalServerError | Ocorreu um erro de sistema no Function Compute. | Execute o fluxo novamente. |
FC.AccessDenied | A conta da Alibaba Cloud não tem as permissões necessárias. | Conceda as permissões necessárias e tente novamente. |
FC.InvalidArgument | Um valor de parâmetro é inválido. | Verifique os valores dos parâmetros com base na especificação. |
FC.EntityTooLarge | Um valor de parâmetro de entrada excede o tamanho permitido. | Reduza o tamanho do payload de entrada. |
Para outros códigos de erro do Function Compute, consulte Códigos de erro.