Pular para conteúdo

LAMBDA_LIST - Listar Funções Lambda

O que é este Node?

O LAMBDA_LIST é o node responsável por listar todas as funções AWS Lambda disponíveis na conta e região especificadas.

Por que este Node existe?

Listar Lambdas programaticamente permite automação e descoberta dinâmica. O LAMBDA_LIST existe para:

  1. Inventário automático: Descobrir funções Lambda existentes
  2. Seleção dinâmica: Permitir usuário escolher Lambda de uma lista
  3. Monitoramento: Verificar quais funções estão deployadas
  4. Auditoria: Listar Lambdas para compliance e governança
  5. Integração: Construir interfaces dinâmicas com Lambdas disponíveis

Como funciona internamente?

Quando o LAMBDA_LIST é executado, o sistema:

  1. Autentica AWS: Configura credenciais (accessKeyId, secretAccessKey, region)
  2. Cria cliente Lambda: Instancia AWS.Lambda com credenciais
  3. Define limite: MaxItems controla quantas funções retornar (padrão: 50)
  4. Lista funções: Chama lambda.listFunctions() com MaxItems
  5. Recebe metadados: AWS retorna array com nome, ARN, runtime, memória, etc.
  6. Se erro AWS: Lança exceção com detalhes do erro
  7. Se sucesso: Retorna success=true com array de funções

Código interno (aws-executors.service.ts:260-268):

case 'listFunctions':
  const listResult = await lambda.listFunctions({
    MaxItems: data.maxItems || 50,
  }).promise();
  return {
    success: true,
    functions: listResult.Functions,
  };

Quando você DEVE usar este Node?

Use LAMBDA_LIST sempre que precisar listar ou descobrir funções Lambda:

Casos de uso

  1. Menu dinâmico: "Escolha uma função para executar: 1-funcao-a, 2-funcao-b"
  2. Dashboard: Mostrar todas as Lambdas ativas
  3. Validação: Verificar se Lambda existe antes de invocar
  4. Relatório: "Você tem 15 funções Lambda deployadas"
  5. Filtro: Listar apenas Lambdas com runtime Node.js
  6. Inventário: Documentar todas as Lambdas da conta

Quando NÃO usar LAMBDA_LIST

  • Invoke direto: Se sabe o nome da Lambda, use lambda_invoke direto
  • Listagem grande: API retorna máximo 50 (use paginação se precisar mais)
  • Permissões restritas: Requer lambda:ListFunctions no IAM

Parâmetros Detalhados

accessKeyId (string, obrigatório)

O que é: Access Key ID da conta AWS com permissão lambda:ListFunctions.

Como obter: 1. AWS Console → IAM → Users → Security Credentials 2. Create Access Key 3. Salve Access Key ID e Secret Access Key

Flow completo para testar:

{
  "name": "Teste Lambda List - AccessKeyId",
  "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": "Listar Lambdas",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Quantidade",
        "parameters": {
          "message": "Total de funções: {{lambda_functions.length}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Substitua credenciais reais. Sistema listará Lambdas.

secretAccessKey (string, obrigatório)

O que é: Secret Access Key correspondente ao Access Key ID.

Segurança: NUNCA commite este valor. Use variáveis de ambiente.

Flow completo para testar:

{
  "name": "Teste Lambda List - SecretAccessKey",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Configurar Credenciais",
        "parameters": {
          "variables": {
            "aws_key": "AKIAIOSFODNN7EXAMPLE",
            "aws_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
          }
        }
      }
    },
    {
      "id": "lambda_1",
      "type": "aws_lambda",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Listar Lambdas",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "{{aws_key}}",
          "secretAccessKey": "{{aws_secret}}",
          "region": "us-east-1"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Lambdas listadas com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Use variáveis para não expor credenciais.

region (string, obrigatório)

O que é: Região AWS onde as funções Lambda estão hospedadas.

Valores comuns: - us-east-1 (Virginia) - us-west-2 (Oregon) - sa-east-1 (São Paulo) - eu-west-1 (Irlanda)

Importante: Apenas Lambdas da região especificada serão listadas.

Flow completo para testar:

{
  "name": "Teste Lambda List - Region",
  "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": "Listar Lambdas BR",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "sa-east-1"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Região",
        "parameters": {
          "message": "Lambdas em São Paulo (sa-east-1): {{lambda_functions.length}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Lambdas de outras regiões não aparecem.

maxItems (number, opcional)

O que é: Número máximo de funções Lambda a retornar.

Padrão: 50

Limites: AWS permite até 50 por chamada. Use paginação para mais.

Flow completo para testar:

{
  "name": "Teste Lambda List - MaxItems",
  "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": "Listar Top 10",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1",
          "maxItems": 10
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Lista",
        "parameters": {
          "message": "Primeiras 10 Lambdas listadas."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Apenas 10 Lambdas serão retornadas, mesmo que existam mais.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "listFunctions"
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)
maxItems number Não Máximo de funções a retornar (padrão: 50)

Exemplo 1: Listar e Mostrar Lambdas

Objetivo: Listar todas as Lambdas e mostrar nomes

JSON para Importar

{
  "name": "Inventário de Lambdas",
  "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": "Listar Lambdas",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1",
          "maxItems": 20
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Total",
        "parameters": {
          "message": "Você tem {{lambda_functions.length}} funções Lambda deployadas na região us-east-1."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Você tem 8 funções Lambda deployadas na região us-east-1.

Exemplo 2: Escolher Lambda Dinamicamente

Objetivo: Listar Lambdas e permitir usuário escolher uma para executar

JSON para Importar

{
  "name": "Escolher e Executar Lambda",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "lambda_list_1",
      "type": "aws_lambda",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Listar Lambdas",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Opções",
        "parameters": {
          "message": "Funções disponíveis:\n1. {{lambda_functions[0].FunctionName}}\n2. {{lambda_functions[1].FunctionName}}\n3. {{lambda_functions[2].FunctionName}}"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Escolher",
        "parameters": {
          "message": "Digite o nome da função:",
          "variable": "funcao_escolhida"
        }
      }
    },
    {
      "id": "lambda_invoke_1",
      "type": "aws_lambda",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Executar Lambda",
        "parameters": {
          "operation": "invoke",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1",
          "functionName": "{{funcao_escolhida}}",
          "payload": {}
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Lambda {{funcao_escolhida}} executada com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_list_1" },
    { "source": "lambda_list_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "lambda_invoke_1" },
    { "source": "lambda_invoke_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Funções disponíveis:
1. processar-pedido
2. enviar-email
3. calcular-frete
Sistema: Digite o nome da função:
Usuário: enviar-email
Sistema: Lambda enviar-email executada com sucesso!

Exemplo 3: Filtrar Lambdas por Runtime

Objetivo: Listar Lambdas e mostrar apenas Node.js

JSON para Importar

{
  "name": "Filtrar Lambdas Node.js",
  "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": "Listar Lambdas",
        "parameters": {
          "operation": "listFunctions",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Relatório",
        "parameters": {
          "message": "Total de funções: {{lambda_functions.length}}\n\nNota: Use código customizado para filtrar por Runtime."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "lambda_1" },
    { "source": "lambda_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Total de funções: 12

Nota: Use código customizado para filtrar por Runtime.

Resposta do Node

{
  "success": true,
  "functions": [
    {
      "FunctionName": "processar-pedido",
      "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:processar-pedido",
      "Runtime": "nodejs20.x",
      "Role": "arn:aws:iam::123456789012:role/lambda-role",
      "Handler": "index.handler",
      "CodeSize": 1024,
      "Description": "Processa pedidos de clientes",
      "Timeout": 30,
      "MemorySize": 256,
      "LastModified": "2025-01-15T10:30:00.000+0000",
      "Version": "$LATEST"
    },
    {
      "FunctionName": "enviar-email",
      "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:enviar-email",
      "Runtime": "python3.11",
      "Role": "arn:aws:iam::123456789012:role/lambda-role",
      "Handler": "lambda_function.lambda_handler",
      "CodeSize": 2048,
      "Description": "Envia emails via SES",
      "Timeout": 60,
      "MemorySize": 512,
      "LastModified": "2025-01-14T08:15:00.000+0000",
      "Version": "$LATEST"
    }
  ]
}

Estrutura de Cada Função

Cada objeto no array functions contém:

Campo Descrição Exemplo
FunctionName Nome da função "processar-pedido"
FunctionArn ARN completo "arn:aws:lambda:..."
Runtime Ambiente de execução "nodejs20.x", "python3.11"
Handler Função handler "index.handler"
CodeSize Tamanho do código (bytes) 1024
Description Descrição da função "Processa pedidos"
Timeout Timeout em segundos 30
MemorySize Memória em MB 256
LastModified Data última modificação "2025-01-15T10:30:00"
Version Versão da função "$LATEST"

Permissões IAM Necessárias

A Access Key precisa ter a política:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "lambda:ListFunctions",
      "Resource": "*"
    }
  ]
}

Acessando Dados das Funções

Use variáveis para acessar informações:

{{lambda_functions.length}}              → Quantidade total
{{lambda_functions[0].FunctionName}}     → Nome da primeira Lambda
{{lambda_functions[0].Runtime}}          → Runtime da primeira Lambda
{{lambda_functions[0].MemorySize}}       → Memória da primeira Lambda
{{lambda_functions[1].FunctionArn}}      → ARN da segunda Lambda

Boas Práticas

SIM:

  • Use maxItems adequado (10-20 para menus, 50 para inventário)
  • Cache resultado se listar múltiplas vezes no mesmo flow
  • Filtre por região relevante para seu caso de uso
  • Use FunctionName para invocar (mais simples que ARN)
  • Valide se array está vazio antes de acessar índices

NÃO:

  • Não liste Lambdas repetidamente (cacheia ou salva em variável)
  • Não assuma ordem específica (AWS não garante ordenação)
  • Não acesse índices sem verificar tamanho do array
  • Não exponha lista completa a usuários finais (segurança)
  • Não use listFunctions para verificar se Lambda existe (use invoke direto)

Dicas

💡 Paginação: Se tem > 50 Lambdas, use NextMarker para continuar listagem

💡 Performance: Listagem é rápida (< 1s), mas evite repetir desnecessariamente

💡 Filtro local: API não filtra por runtime/tags - faça filtro no flow

💡 Regiões: Execute listFunctions para cada região se precisa inventário global

Limitações

  • Máximo 50 funções por chamada (use paginação para mais)
  • Sem filtro server-side (filtre localmente por Runtime, Tags, etc.)
  • Apenas LATEST version (versões antigas não aparecem)
  • Permissão global: Precisa de lambda:ListFunctions em todas as funções

Próximo Node

LAMBDA_INVOKE - Invocar função Lambda → SQS_LIST - Listar filas SQS → DYNAMODB_LIST - Listar tabelas DynamoDB