Script interativo em Python para criar, atualizar e fazer deploy de funções AWS Lambda utilizando o AWS SAM (Serverless Application Model).
- Recursos
- Pré-requisitos
- Instalação
- Como Usar
- Funcionalidades Detalhadas
- Estrutura de Arquivos
- Exemplos
- Troubleshooting
- Contribuição
- Licença
- 🎯 Deploy interativo - Interface amigável via terminal
- 🔍 Detecção automática - Encontra funções Lambda existentes na AWS
- 📦 Gerenciamento de roles IAM - Cria ou reutiliza roles de execução
- 🌐 Function URLs - Configura URLs públicas com CORS
- 🔗 URLs Personalizadas (Custom Domains) - Criação e vinculação automática com CloudFront, ACM (SSL/TLS) e Route 53
- 💾 Configuração persistente - Salva configurações para deploys futuros
- 🔧 Variáveis de ambiente - Suporte completo a environment variables
- 📚 Layers - Adicione layers às suas funções
- 🏗️ Múltiplas arquiteturas - Suporte a x86_64 e ARM64 (Graviton2)
python --versionmacOS (Homebrew):
brew install aws-sam-cliLinux:
pip install aws-sam-cliWindows:
choco install aws-sam-cliVerifique a instalação:
sam --versionaws configureVocê precisará de:
- AWS Access Key ID
- AWS Secret Access Key
- Região padrão (ex:
sa-east-1)
git clone https://github.com/camedics/lambda_deployer.git
cd lambda_deployerpython -m venv venv
source venv/bin/activate # Linux/macOS
# ou
.\venv\Scripts\activate # Windowspip install -r requirements.txtpython lambda_deployer.pyO script irá guiá-lo através de um processo interativo:
- Perfil AWS - Selecione um perfil existente por número ou nome
- Nome da função - Digite o nome da sua Lambda
- Arquivo do código - Selecione o arquivo .py com seu handler
- Função handler - Escolha qual função será o entry point
- Runtime - Selecione a versão do Python (ou outra linguagem)
- Configurações - Memória, timeout, arquitetura
- Role IAM - Crie ou selecione uma role de execução
- Deploy - Execute
sam buildesam deploy
Ao iniciar, o deployer lista os perfis encontrados pelo AWS CLI ou nos arquivos
~/.aws/credentials e ~/.aws/config. Você pode selecionar pelo número exibido
ou digitar o nome do perfil. O perfil escolhido é salvo em
.lambda_deployer_config.json e também é usado pelos comandos sam build,
sam deploy e sam delete.
Se você já executou o deployer antes, ele irá:
- Detectar a configuração salva
- Perguntar se deseja reutilizá-la
- Executar o build e deploy automaticamente
O deployer oferece várias opções para roles de execução:
- Usar role existente - Lista roles compatíveis com Lambda
- Criar role básica - Cria role com permissões mínimas (CloudWatch Logs)
- Criar role customizada - A partir de arquivo JSON ou inline
- Informar ARN manualmente - Para roles já existentes
Configure URLs públicas para suas Lambdas:
🌐 Deseja expor a função com URL pública? [s/N]: s
Permitir acesso sem autenticação? [S/n]: s
Configurar CORS? [s/N]: s
Origens permitidas (separadas por vírgula) [*]: https://meusite.com
Métodos permitidos (separados por vírgula) [*]: GET,POST
O deployer permite expor a Function URL sob um domínio/subdomínio customizado de forma totalmente automatizada:
- SSL/TLS com ACM (Amazon Certificate Manager): Solicita ou reutiliza um certificado na região
us-east-1(exigido pelo CloudFront). - Validação DNS: Cria automaticamente o registro CNAME de validação do certificado no Route 53 e aguarda a emissão.
- Distribuição CDN com CloudFront: Configura a distribuição apontando para a Function URL como origem, passando cabeçalhos e métodos HTTP corretos.
- Registros DNS no Route 53: Cria ou atualiza os registros de Alias A e AAAA para apontar o domínio customizado para o endereço do CloudFront.
Ao iniciar o deployer, se a função possuir uma URL pública ativada, ele perguntará se você deseja configurar ou atualizar o link HTTPS personalizado.
🔧 Deseja adicionar variáveis de ambiente? [s/N]: s
Digite as variáveis no formato CHAVE=VALOR (linha vazia para finalizar)
Variável: DATABASE_URL=postgres://...
Variável: API_KEY=secret123
Variável:
📦 Deseja adicionar Layers? [s/N]: s
Digite os ARNs dos layers (linha vazia para finalizar)
Layer ARN: arn:aws:lambda:sa-east-1:123456789:layer:minha-layer:1
Layer ARN:
Após executar o deployer, seu projeto terá a seguinte estrutura:
meu-projeto/
├── lambda_deployer.py # Script do deployer
├── requirements.txt # Dependências do deployer
├── minha_funcao.py # Seu código Lambda
├── template.yaml # Template SAM (gerado)
├── samconfig.toml # Configuração do SAM (gerado)
├── .lambda_deployer_config.json # Config salva (gerado)
├── .gitignore # Git ignore (gerado)
├── .samignore # SAM ignore (gerado)
└── .aws-sam/ # Build artifacts (gerado)
# minha_funcao.py
def lambda_handler(event, context):
"""
Handler principal da Lambda
Processa requisições HTTP e retorna uma resposta
"""
name = event.get('queryStringParameters', {}).get('name', 'Mundo')
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps({
'message': f'Olá, {name}!',
'timestamp': datetime.now().isoformat()
})
}Crie um arquivo iam_policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::meu-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:*:*:table/MinhaTabela"
}
]
}Após o deploy, você pode usar estes comandos:
# Construir a aplicação
sam build
# Deploy (usa samconfig.toml)
sam deploy
# Deploy guiado (interativo)
sam deploy --guided
# Ver logs da função
sam logs -n MinhaFuncao --tail
# Invocar localmente
sam local invoke MinhaFuncao -e event.json
# API local para testes
sam local start-api
# Deletar stack
sam deleteA stack já está atualizada. Faça alterações no código antes de fazer deploy novamente.
⚠ A stack está em um estado de erro/rollback
🗑️ Deseja deletar a stack e tentar novamente? [S/n]: s
O deployer oferece a opção de deletar a stack automaticamente.
Verifique se:
- A role existe no IAM
- A role tem a trust policy para
lambda.amazonaws.com - Você tem permissões para assumir a role
# macOS
brew install aws-sam-cli
# Linux/Windows
pip install aws-sam-cliContribuições são bem-vindas! Por favor:
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
⭐ Se este projeto te ajudou, deixe uma estrela!