LAMBDA_INVOKE_ASYNC - Invocar Lambda Assíncrona (Descontinuada)
O que é este Node?
O LAMBDA_INVOKE_ASYNC era responsável por executar funções AWS Lambda de forma assíncrona usando a API invokeAsync, que foi descontinuada pela AWS em favor do invoke com InvocationType: 'Event'.
Por que este Node existe?
⚠️ IMPORTANTE: Este método foi descontinuado pela AWS. Use lambda_invoke com invocationType: "Event" ao invés.
O LAMBDA_INVOKE_ASYNC existia para:
- Invocação assíncrona legacy: Método antigo de invocar Lambda sem aguardar
- Compatibilidade: Suporte a código legado que usava invokeAsync
- Fire-and-forget: Disparar Lambda e continuar flow imediatamente
- Status 202: Retornar confirmação de enfileiramento
Como funciona internamente?
Quando o LAMBDA_INVOKE_ASYNC é executado, o sistema:
- Autentica AWS: Configura credenciais (accessKeyId, secretAccessKey, region)
- Cria cliente Lambda: Instancia AWS.Lambda com credenciais
- Prepara invocação: Serializa payload como JSON string
- Chama invokeAsync: Usa método legado
lambda.invokeAsync() - Recebe status: AWS retorna apenas código 202 (Accepted)
- Se erro AWS: Lança exceção com detalhes do erro
- Se sucesso: Retorna success=true com status code
Código interno (aws-executors.service.ts:250-258):
case 'invokeAsync':
const asyncResult = await lambda.invokeAsync({
FunctionName: data.functionName,
InvokeArgs: JSON.stringify(data.payload),
}).promise();
return {
success: true,
statusCode: asyncResult.Status,
};
Quando você DEVE usar este Node?
⚠️ NÃO USE ESTE NODE - Ele está descontinuado pela AWS.
Alternativa Recomendada
Use LAMBDA_INVOKE com invocationType: "Event":
{
"type": "aws_lambda",
"parameters": {
"operation": "invoke",
"functionName": "minha-funcao",
"invocationType": "Event",
"payload": { "dados": "valor" }
}
}
Quando NÃO usar LAMBDA_INVOKE_ASYNC
- ❌ NUNCA: Este método foi removido da AWS SDK
- ❌ Código novo: Sempre use
lambda_invokecomEvent - ❌ APIs recentes: Não funciona com Lambdas criadas após 2019
- ❌ Suporte AWS: Sem suporte oficial da AWS
Parâmetros Detalhados
accessKeyId (string, obrigatório)
O que é: Access Key ID da conta AWS.
Migração: Use o mesmo valor em lambda_invoke.
secretAccessKey (string, obrigatório)
O que é: Secret Access Key da AWS.
Migração: Use o mesmo valor em lambda_invoke.
region (string, obrigatório)
O que é: Região AWS onde a Lambda está hospedada.
Migração: Use o mesmo valor em lambda_invoke.
functionName (string, obrigatório)
O que é: Nome ou ARN da função Lambda.
Migração: Use o mesmo valor em lambda_invoke.
payload (object, obrigatório)
O que é: Dados JSON enviados para a Lambda.
Migração: Use o mesmo valor em lambda_invoke.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "invokeAsync" |
| accessKeyId | string | Sim | Access Key ID da AWS |
| secretAccessKey | string | Sim | Secret Access Key da AWS |
| region | string | Sim | Região AWS (ex: us-east-1) |
| functionName | string | Sim | Nome ou ARN da função Lambda |
| payload | object | Sim | Objeto JSON enviado para a Lambda |
Migração para lambda_invoke
ANTES (invokeAsync - Descontinuado)
{
"type": "aws_lambda",
"parameters": {
"operation": "invokeAsync",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"functionName": "processar-pedido",
"payload": {
"pedido_id": 123
}
}
}
DEPOIS (invoke com Event - Recomendado)
{
"type": "aws_lambda",
"parameters": {
"operation": "invoke",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"functionName": "processar-pedido",
"invocationType": "Event",
"payload": {
"pedido_id": 123
}
}
}
Diferença: Adicione "invocationType": "Event" e mude operation para "invoke".
Exemplo 1: Migração de Flow Legado
Objetivo: Converter flow antigo para novo método
ANTES (Legado - NÃO USE)
{
"name": "Flow Legado com invokeAsync",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "lambda_1",
"type": "aws_lambda",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lambda Assíncrona (Legado)",
"parameters": {
"operation": "invokeAsync",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"functionName": "enviar-email",
"payload": { "destinatario": "user@example.com" }
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "lambda_1" },
{ "source": "lambda_1", "target": "end_1" }
]
}
DEPOIS (Atualizado - USE ESTE)
{
"name": "Flow Atualizado com invoke Event",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "lambda_1",
"type": "aws_lambda",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lambda Assíncrona (Moderno)",
"parameters": {
"operation": "invoke",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"functionName": "enviar-email",
"invocationType": "Event",
"payload": { "destinatario": "user@example.com" }
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "lambda_1" },
{ "source": "lambda_1", "target": "end_1" }
]
}
Resposta do Node
invokeAsync (Legado)
{
"success": true,
"statusCode": 202
}
invoke com Event (Recomendado)
{
"success": true,
"statusCode": 202,
"payload": null
}
Diferenças entre invokeAsync e invoke Event
| Característica | invokeAsync (Legado) | invoke Event (Moderno) |
|---|---|---|
| Status AWS | ❌ Descontinuado | ✅ Suportado |
| Método API | lambda.invokeAsync() |
lambda.invoke() |
| InvocationType | N/A (sempre async) | "Event" |
| Retry automático | Não | Sim (2x) |
| DLQ Support | Limitado | Completo |
| Payload máximo | 128 KB | 256 KB |
| Logs CloudWatch | Básico | Completo |
Boas Práticas
✅ SIM:
- Migre todos os flows para
invokecomEvent - Teste após migração para garantir comportamento
- Atualize documentação interna sobre a mudança
❌ NÃO:
- Nunca use
invokeAsyncem código novo - Não dependa deste método para produção
- Não ignore avisos de depreciação da AWS
Dicas
💡 Migração rápida: Substitua invokeAsync por invoke + adicione invocationType: "Event"
💡 Compatibilidade: Código migrado funciona exatamente igual
💡 Performance: invoke com Event é mais rápido e confiável
💡 Suporte: AWS não oferece mais suporte para invokeAsync
Erros Comuns
Erro: "The operation cannot be performed at this time"
{
"error": "InvalidParameterValueException",
"message": "The operation cannot be performed at this time. An update is in progress for resource: arn:aws:lambda:us-east-1:123456789012:function:my-function"
}
Solução: Aguarde deploy da Lambda terminar ou use invoke com Event.
Erro: "invokeAsync is not a function"
{
"error": "TypeError",
"message": "lambda.invokeAsync is not a function"
}
Solução: AWS SDK v3 removeu invokeAsync. Migre para invoke.
Status de Depreciação
- 2019: AWS anunciou depreciação do
invokeAsync - 2020: AWS removeu da documentação oficial
- 2021+: AWS SDK v3 não inclui
invokeAsync - 2025: Use apenas
invokecomInvocationType
Checklist de Migração
- [ ] Identifique todos os flows usando
invokeAsync - [ ] Substitua
operation: "invokeAsync"poroperation: "invoke" - [ ] Adicione
invocationType: "Event"nos parâmetros - [ ] Teste cada flow migrado
- [ ] Atualize documentação de APIs
- [ ] Remova referências a
invokeAsyncdo código
Próximo Node
→ LAMBDA_INVOKE - Invocar Lambda (método moderno) → LAMBDA_LIST - Listar funções Lambda