Pular para conteúdo

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:

  1. Invocação assíncrona legacy: Método antigo de invocar Lambda sem aguardar
  2. Compatibilidade: Suporte a código legado que usava invokeAsync
  3. Fire-and-forget: Disparar Lambda e continuar flow imediatamente
  4. Status 202: Retornar confirmação de enfileiramento

Como funciona internamente?

Quando o LAMBDA_INVOKE_ASYNC é executado, o sistema:

  1. Autentica AWS: Configura credenciais (accessKeyId, secretAccessKey, region)
  2. Cria cliente Lambda: Instancia AWS.Lambda com credenciais
  3. Prepara invocação: Serializa payload como JSON string
  4. Chama invokeAsync: Usa método legado lambda.invokeAsync()
  5. Recebe status: AWS retorna apenas código 202 (Accepted)
  6. Se erro AWS: Lança exceção com detalhes do erro
  7. 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_invoke com Event
  • 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 invoke com Event
  • Teste após migração para garantir comportamento
  • Atualize documentação interna sobre a mudança

NÃO:

  • Nunca use invokeAsync em 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 invoke com InvocationType

Checklist de Migração

  • [ ] Identifique todos os flows usando invokeAsync
  • [ ] Substitua operation: "invokeAsync" por operation: "invoke"
  • [ ] Adicione invocationType: "Event" nos parâmetros
  • [ ] Teste cada flow migrado
  • [ ] Atualize documentação de APIs
  • [ ] Remova referências a invokeAsync do código

Próximo Node

LAMBDA_INVOKE - Invocar Lambda (método moderno) → LAMBDA_LIST - Listar funções Lambda