Introdução: O que é Serverless e AWS Lambda?
\n\nServerless (computação sem servidor) é um modelo de computação em nuvem onde o desenvolvedor abstrai completamente o gerenciamento da infraestrutura de servidores. Você simplesmente escreve o código, o envia para a nuvem, e o provedor (AWS, Google Cloud, Azure) o executa automaticamente em resposta a eventos, escalando recursos sob demanda. Você paga apenas pelo tempo real de execução do código (e pelo número de requisições).
\n\nAWS Lambda é o serviço serverless flagship da Amazon Web Services. Ele permite executar código em várias linguagens, incluindo JavaScript (Node.js), sem a necessidade de provisionar e gerenciar servidores. Lambda é ideal para processar requisições HTTP (via API Gateway), tarefas em segundo plano, processamento de arquivos do S3, reações a alterações no banco de dados DynamoDB e muitos outros cenários.
\n\nNeste artigo, abordaremos AWS Lambda em JavaScript do A ao Z: desde a criação da primeira função até seu deploy, monitoramento e otimização.
\n\nParte principal: Criação e gerenciamento de funções Lambda em Node.js
\n\n1. Criando sua primeira função Lambda
\n\nAcesse o console AWS Lambda e clique em "Criar função". Selecione a opção "Do zero". Dê um nome (por exemplo, my-first-lambda) e escolha o ambiente de execução Node.js 20.x (ou a versão estável mais recente).
A estrutura básica de uma função em Node.js é assim:
\n\nexports.handler = async (event, context) => {\n // event - dados passados para a função (ex: requisição HTTP)\n // context - informações sobre o ambiente de execução (ex: ID da requisição)\n\n console.log('Evento recebido:', JSON.stringify(event, null, 2));\n\n // Sua lógica de negócio\n const response = {\n statusCode: 200,\n body: JSON.stringify({\n message: 'Olá do Lambda!',\n input: event\n }),\n };\n\n return response; // AWS Lambda espera o retorno de um valor\n};\n\n\nNeste exemplo simples, a função recebe um evento e retorna uma resposta JSON. Se a função for chamada via API Gateway, o event conterá o método HTTP, cabeçalhos, corpo da requisição, etc.
Importante: Sempre use async/await para operações assíncronas (consultas a banco de dados, APIs). Se a função não for assíncrona, ela deve retornar uma Promise ou usar callback.
2. Triggers e integrações
\n\nO poder do Lambda se revela através dos triggers — eventos de outros serviços AWS que acionam sua função. Vamos ver três opções mais populares em JavaScript.
\n\n2.1. Requisições HTTP via API Gateway
\nEste é o cenário mais comum para criar APIs REST. Você anexa à Lambda o trigger API Gateway. Neste caso, o event conterá a estrutura da requisição HTTP. Exemplo de processamento:
exports.handler = async (event) => {\n const httpMethod = event.httpMethod;\n const path = event.path;\n const queryParams = event.queryStringParameters || {};\n const body = event.body ? JSON.parse(event.body) : {};\n\n console.log(`Método: ${httpMethod}, Caminho: ${path}`);\n\n if (httpMethod === 'GET' && path === '/hello') {\n return {\n statusCode: 200,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: `Olá, ${queryParams.name || 'mundo'}!` })\n };\n }\n\n return {\n statusCode: 404,\n body: JSON.stringify({ error: 'Not Found' })\n };\n};\n\n\n2.2. Processamento de arquivos do S3
\nLambda pode ser acionada automaticamente ao fazer upload ou excluir arquivos em um bucket S3. Isso é ideal para criar miniaturas de imagens, converter vídeos ou indexar dados.
\n\nconst AWS = require('aws-sdk');\nconst s3 = new AWS.S3();\n\nexports.handler = async (e