Para integrar validação de CPF em AWS Lambda com Node.js, crie uma função que recebe o CPF via path parameter, consulta a API da CPFHub.io com o header x-api-key e retorna os dados do titular. Combinada ao API Gateway, essa arquitetura serverless escala automaticamente de zero a milhares de requisições sem custo fixo de infraestrutura. A chave de API deve ser armazenada no AWS Secrets Manager e cacheada em memória para evitar chamadas desnecessárias entre invocações. A documentação oficial da AWS Lambda detalha as opções de configuração de runtime e permissões IAM necessárias.
Arquitetura da solução
A arquitetura serverless para validação de CPF segue o padrão:
- O cliente envia uma requisição HTTP para o API Gateway.
- O API Gateway roteia a requisição para a função Lambda.
- A Lambda recupera a chave de API do Secrets Manager.
- A Lambda consulta a API da CPFHub.io.
- A resposta e retornada ao cliente via API Gateway.
Essa arquitetura escala automaticamente de zero a milhares de requisições simultaneas, sem necessidade de gerenciar infraestrutura.
Implementação da função Lambda
Veja a implementação completa da função Lambda em Node.js 20:
// handler.js
const { SecretsManagerClient, GetSecretValueCommand } = require("@aws-sdk/client-secrets-manager");
const secretsClient = new SecretsManagerClient({ region: "sa-east-1" });
let cachedApiKey = null;
async function getApiKey() {
if (cachedApiKey) return cachedApiKey;
const command = new GetSecretValueCommand({
SecretId: "cpfhub/api-key",
});
const response = await secretsClient.send(command);
cachedApiKey = response.SecretString;
return cachedApiKey;
}
async function consultarCPF(cpfNumero, apiKey) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000);
try {
const response = await fetch(
`https://api.cpfhub.io/cpf/${cpfNumero}`,
{
method: "GET",
headers: {
"x-api-key": apiKey,
"Accept": "application/json",
},
signal: controller.signal,
}
);
clearTimeout(timeoutId);
if (!response.ok) {
throw new Error(`API retornou status ${response.status}`);
}
return await response.json();
} catch (error) {
clearTimeout(timeoutId);
if (error.name === "AbortError") {
throw new Error("Timeout na consulta de CPF");
}
throw error;
}
}
function criarResposta(statusCode, body) {
return {
statusCode,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS",
},
body: JSON.stringify(body),
};
}
exports.handler = async (event) => {
// Tratar preflight CORS
if (event.httpMethod === "OPTIONS") {
return criarResposta(200, {});
}
const cpf = event.pathParameters?.cpf;
if (!cpf) {
return criarResposta(400, { erro: "CPF e obrigatorio" });
}
const cpfLimpo = cpf.replace(/\D/g, "");
if (cpfLimpo.length !== 11) {
return criarResposta(400, { erro: "CPF deve conter 11 digitos" });
}
// Rejeitar CPFs com todos os digitos iguais
if (/^(\d)\1+$/.test(cpfLimpo)) {
return criarResposta(400, { erro: "CPF invalido" });
}
try {
const apiKey = await getApiKey();
const resultado = await consultarCPF(cpfLimpo, apiKey);
if (!resultado.success || !resultado.data) {
return criarResposta(404, { erro: "CPF nao encontrado" });
}
return criarResposta(200, {
valido: true,
dados: {
nome: resultado.data.name,
cpf: resultado.data.cpf,
genero: resultado.data.gender,
dataNascimento: resultado.data.birthDate,
},
});
} catch (error) {
console.error("Erro na consulta:", error.message);
return criarResposta(500, {
erro: "Falha na consulta de CPF",
detalhe: error.message,
});
}
};
O segredo da chave de API e recuperado do AWS Secrets Manager e cacheado em memoria entre invocacoes da Lambda -- uma otimizacao que evita chamadas desnecessarias ao Secrets Manager em ambientes com alta concorrencia.
Template AWS SAM para deploy
O AWS SAM (Serverless Application Model) simplifica o deploy da infraestrutura. Crie o arquivo template.yaml:
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: API de validacao de CPF com CPFHub.io
Globals:
Function:
Timeout: 15
Runtime: nodejs20.x
MemorySize: 256
Environment:
Variables:
NODE_ENV: production
Resources:
ValidarCPFFunction:
Type: AWS::Serverless::Function
Properties:
Handler: handler.handler
CodeUri: ./src
Description: Consulta e valida CPF via API CPFHub.io
Policies:
- Statement:
- Effect: Allow
Action: secretsmanager:GetSecretValue
Resource: !Sub "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:cpfhub/api-key-*"
Events:
ValidarCPF:
Type: Api
Properties:
Path: /cpf/{cpf}
Method: GET
ValidarCPFOptions:
Type: Api
Properties:
Path: /cpf/{cpf}
Method: OPTIONS
Outputs:
ApiUrl:
Description: URL da API de validacao de CPF
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/cpf/"
Deploy com:
sam build && sam deploy --guided
Configuração do API Gateway
O API Gateway oferece recursos adicionais de seguranca e controle:
Rate limiting
Configure um Usage Plan no API Gateway para limitar requisições:
# Adicionar ao template.yaml
ApiUsagePlan:
Type: AWS::ApiGateway::UsagePlan
Properties:
UsagePlanName: cpf-validation-plan
Throttle:
BurstLimit: 10
RateLimit: 5
Quota:
Limit: 1000
Period: MONTH
Validação de request
O API Gateway pode validar o formato do CPF antes de invocar a Lambda, economizando execucoes desnecessarias:
# Model de validacao no API Gateway
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"cpf": {
"type": "string",
"pattern": "^\\d{11}$"
}
},
"required": ["cpf"]
}
Monitoramento com CloudWatch
A Lambda envia metricas automaticamente para o CloudWatch. Configure alarmes para monitorar a integração:
// Adicionar metricas customizadas no handler
const { CloudWatchClient, PutMetricDataCommand } = require("@aws-sdk/client-cloudwatch");
const cwClient = new CloudWatchClient({ region: "sa-east-1" });
async function registrarMetrica(nome, valor, unidade = "Count") {
await cwClient.send(new PutMetricDataCommand({
Namespace: "CPFValidation",
MetricData: [{
MetricName: nome,
Value: valor,
Unit: unidade,
Timestamp: new Date(),
}],
}));
}
// No handler, apos a consulta:
await registrarMetrica("ConsultasSucesso", 1);
// Ou em caso de falha:
await registrarMetrica("ConsultasFalha", 1);
Otimizacao de cold start
O cold start e o principal desafio de funções Lambda. Para minimiza-lo na integração com a API de CPF:
- Provisioned Concurrency -- Mantem instancias quentes para rotas críticas. Configure pelo menos 1 instancia para evitar cold starts em horarios de pico.
- Minimizar dependências -- Use o fetch nativo do Node.js 20 em vez de bibliotecas como Axios. Menos código significa menos tempo de inicializacao.
- Cache do Secrets Manager -- O cache da chave de API em variavel global (como implementado acima) evita chamadas extras ao Secrets Manager em invocacoes quentes.
- Tamanho de memoria -- Aumentar a memoria da Lambda também aumenta a CPU alocada, acelerando a inicializacao.
| Memoria (MB) | Cold start medio | Custo por 1M invocacoes |
|---|---|---|
| 128 | ~800ms | ~$0.21 |
| 256 | ~450ms | ~$0.42 |
| 512 | ~250ms | ~$0.84 |
Testes locais com SAM CLI
O SAM CLI permite testar a Lambda localmente antes do deploy:
# Criar evento de teste
echo '{"httpMethod":"GET","pathParameters":{"cpf":"12345678901"}}' > event.json
# Executar localmente
sam local invoke ValidarCPFFunction -e event.json
# Subir API local
sam local start-api --port 3000
Com a API local rodando, teste com curl:
curl http://localhost:3000/cpf/12345678901
Custos estimados
A combinação Lambda + API Gateway e extremamente econômica para volumes moderados:
| Componente | Custo | 1.000 consultas/mes |
|---|---|---|
| Lambda | $0.20 por 1M requisições | ~$0.00 |
| API Gateway | $3.50 por 1M requisições | ~$0.004 |
| Secrets Manager | $0.40/segredo/mes | $0.40 |
| CPFHub.io Pro | R$149/mes (1.000 consultas) | R$149.00 |
O custo de infraestrutura AWS para 1.000 consultas mensais e praticamente zero, tornando o plano Pro da CPFHub.io
Perguntas frequentes
O que é necessário para integrar validação de CPF em AWS Lambda?
A integração exige uma função Lambda em Node.js configurada para receber o CPF via path parameter, um API Gateway expondo a rota HTTP e a chave de API da CPFHub.io armazenada no Secrets Manager. A Lambda faz uma chamada GET para https://api.cpfhub.io/cpf/{CPF} com o header x-api-key e retorna nome, gênero e data de nascimento do titular.
Qual é a latência esperada da API CPFHub.io dentro de uma Lambda?
A API CPFHub.io tem latência média de ~900ms. Somado ao tempo de execução da Lambda (especialmente em cold starts com 128MB de memória, que podem chegar a ~800ms), o tempo total de resposta gira em torno de 1,5 a 2 segundos. Configure o timeout da Lambda em pelo menos 15 segundos para absorver variações.
A API CPFHub.io bloqueia quando o limite de consultas é atingido?
Não. Quando o limite mensal do plano é ultrapassado, a API não bloqueia nem retorna erro 429 — ela continua respondendo e cobra R$0,15 por consulta adicional. O plano gratuito inclui 50 consultas/mês e o plano Pro oferece 1.000 consultas por R$149/mês.
Como armazenar a chave de API da CPFHub.io de forma segura na Lambda?
Use o AWS Secrets Manager para armazenar a chave e recuperá-la na inicialização da função, cacheando-a em uma variável global. Essa abordagem evita chamadas repetidas ao Secrets Manager em invocações quentes e mantém a chave fora de variáveis de ambiente em texto plano, reduzindo o risco de exposição em logs.
Conclusão
AWS Lambda com API Gateway e a combinação classica para APIs serverless, e a integração com a API de CPF da CPFHub.io
Cadastre-se em cpfhub.io
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



