AWS Lambda - Integração com AWS Lambda Functions
Este diretório contém a documentação completa das tools de integração com AWS Lambda, o serviço serverless de computação da Amazon Web Services.
O que é AWS Lambda?
AWS Lambda é um serviço de computação serverless que permite executar código sem provisionar ou gerenciar servidores. Você paga apenas pelo tempo de computação consumido.
Tools Disponíveis
✅ Documentadas (3/3)
- lambda_invoke - Invocar função Lambda (síncrona ou assíncrona)
- lambda_invoke_async - Invocar Lambda assíncrona (⚠️ DESCONTINUADA - use invoke com Event)
- lambda_list - Listar todas as funções Lambda da conta/região
Casos de Uso Comuns
1. Executar Lógica Serverless
{
"type": "aws_lambda",
"parameters": {
"operation": "invoke",
"functionName": "processar-dados",
"invocationType": "RequestResponse",
"payload": { "dados": "valor" }
}
}
2. Disparar Processamento Background
{
"type": "aws_lambda",
"parameters": {
"operation": "invoke",
"functionName": "enviar-relatorio",
"invocationType": "Event",
"payload": { "usuario_id": 123 }
}
}
3. Listar Lambdas Disponíveis
{
"type": "aws_lambda",
"parameters": {
"operation": "listFunctions",
"maxItems": 20
}
}
Configuração Inicial
1. Credenciais AWS
Obtenha Access Key e Secret Key no AWS IAM:
- AWS Console → IAM → Users
- Security Credentials → Create Access Key
- Salve
Access Key IDeSecret Access Key
2. Permissões IAM Necessárias
Política mínima para usar as tools Lambda:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:ListFunctions"
],
"Resource": "*"
}
]
}
3. Regiões AWS
Especifique a região onde suas Lambdas estão:
us-east-1- Virginia (padrão AWS)us-west-2- Oregonsa-east-1- São Pauloeu-west-1- Irlanda
Tipos de Invocação
RequestResponse (Síncrono)
- ✅ Aguarda execução completa
- ✅ Retorna resultado imediato
- ⏱️ Timeout máximo: 15 minutos
- 📦 Payload máximo: 6 MB
Event (Assíncrono)
- ✅ Executa em background
- ✅ Não aguarda resposta
- 🔄 Retry automático (2x)
- 📦 Payload máximo: 256 KB
DryRun (Validação)
- ✅ Valida permissões
- ❌ Não executa função
- 🔐 Testa acesso
Estrutura de Resposta
Invoke (Síncrono)
{
"success": true,
"statusCode": 200,
"payload": {
"resultado": "dados retornados pela Lambda"
}
}
Invoke (Assíncrono)
{
"success": true,
"statusCode": 202,
"payload": null
}
List Functions
{
"success": true,
"functions": [
{
"FunctionName": "minha-funcao",
"Runtime": "nodejs20.x",
"MemorySize": 256,
"Timeout": 30
}
]
}
Exemplo Completo: Flow com Lambda
{
"name": "Processar Pedido com Lambda",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "ID do Pedido",
"parameters": {
"message": "Digite o ID do pedido:",
"variable": "pedido_id"
}
}
},
{
"id": "lambda_1",
"type": "aws_lambda",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Processar Pedido",
"parameters": {
"operation": "invoke",
"accessKeyId": "{{aws_access_key}}",
"secretAccessKey": "{{aws_secret_key}}",
"region": "us-east-1",
"functionName": "processar-pedido",
"invocationType": "RequestResponse",
"payload": {
"pedido_id": "{{pedido_id}}"
}
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Pedido Aprovado?",
"parameters": {
"variable": "lambda_payload.aprovado",
"operator": "equals",
"value": true
}
}
},
{
"id": "message_sim",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Pedido {{pedido_id}} aprovado! Total: R$ {{lambda_payload.total}}"
}
}
},
{
"id": "message_nao",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Erro",
"parameters": {
"message": "Pedido rejeitado: {{lambda_payload.motivo}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "lambda_1" },
{ "source": "lambda_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_sim", "label": "true" },
{ "source": "condition_1", "target": "message_nao", "label": "false" },
{ "source": "message_sim", "target": "end_1" },
{ "source": "message_nao", "target": "end_1" }
]
}
Boas Práticas
✅ Fazer
- Use variáveis para credenciais AWS (nunca hardcode)
- Configure timeout adequado na Lambda (não no flow)
- Use RequestResponse quando precisa do resultado
- Use Event para tarefas longas ou background
- Trate erros verificando
lambda_payload.error - Valide credenciais com DryRun antes de produção
- Cache resultado de listFunctions se usar múltiplas vezes
❌ Não Fazer
- Nunca commite accessKeyId/secretAccessKey no código
- Não use RequestResponse para processos > 15 minutos
- Não envie payloads maiores que os limites
- Não use
invokeAsync(descontinuado - use invoke com Event) - Não liste Lambdas repetidamente sem necessidade
- Não exponha lista de Lambdas a usuários finais
Segurança
Credenciais
{
"type": "variable",
"parameters": {
"variables": {
"aws_access_key": "AKIAIOSFODNN7EXAMPLE",
"aws_secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}
}
}
Least Privilege
Configure IAM com apenas as permissões necessárias:
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:minha-funcao"
}
Custos AWS Lambda
- Invocações: $0.20 por 1 milhão de invocações
- Duração: $0.0000166667 por GB-segundo
- Free Tier: 1 milhão de invocações + 400.000 GB-segundos/mês
Exemplo: 100.000 invocações de 500ms com 256MB = ~$0.40/mês
Monitoramento
CloudWatch Logs
Todas as invocações geram logs automaticamente:
- AWS Console → CloudWatch → Log Groups
/aws/lambda/nome-da-funcao- Visualize execuções, erros e logs customizados
Métricas
- Invocations: Total de execuções
- Duration: Tempo médio de execução
- Errors: Quantidade de erros
- Throttles: Invocações limitadas por concorrência
Troubleshooting
Erro: "User is not authorized to perform lambda:InvokeFunction"
Causa: Credenciais sem permissão
Solução: Adicione política IAM com lambda:InvokeFunction
Erro: "Function not found"
Causa: Lambda não existe ou está em outra região
Solução: Verifique FunctionName e region corretos
Erro: "Task timed out after X seconds"
Causa: Lambda excedeu timeout configurado
Solução: Aumente timeout na configuração da Lambda (AWS Console)
Erro: "Payload too large"
Causa: Payload excede 6MB (RequestResponse) ou 256KB (Event)
Solução: Reduza tamanho do payload ou use S3 para dados grandes
Limites AWS Lambda
| Característica | RequestResponse | Event |
|---|---|---|
| Timeout máximo | 15 minutos | 15 minutos |
| Payload request | 6 MB | 256 KB |
| Payload response | 6 MB | N/A |
| Concorrência | 1000 (padrão) | 1000 (padrão) |
| Ambiente | 512 MB - 10 GB | 512 MB - 10 GB |
Próximos Passos
- Criar Lambda: AWS Console → Lambda → Create Function
- Testar invoke: Use
lambda_invokecom RequestResponse - Testar async: Use
lambda_invokecom Event - Listar funções: Use
lambda_listpara inventário - Monitorar: Configure CloudWatch Alarms
Links Úteis
Outras Integrações AWS
- SQS - Filas de mensagens
- SNS - Notificações pub/sub
- DynamoDB - Banco NoSQL
- S3 - Armazenamento de objetos
- SES - Envio de emails
Documentado em: 2025-01-15
Total de tools: 3/3 (100% completo)
Arquivo fonte: /home/zielinski/develop/gptapi/src/whatsapp-flows/executors/aws-executors.service.ts