AWS Lambda e Serverless: Guia para Iniciantes
Descubra o conceito de serverless e como usar o AWS Lambda.
I
InSkillCoach
· min
AWS Lambda e Serverless: Guia para Iniciantes
Descubra o conceito de serverless e como usar o AWS Lambda.
1. O que é Serverless?
Definição Simples
- Serverless = Sem servidores para gerenciar
- Vantagens:
- Sem gerenciamento de infraestrutura
- Pagamento por uso
- Escalabilidade automática
Comparação com o EC2
# Exemplo de custo EC2 vs Lambda
def compare_costs():
# EC2 : Pagamento por hora
ec2_cost = {
't2.micro': 0.0116, # por hora
't2.small': 0.023, # por hora
't2.medium': 0.0464 # por hora
}
# Lambda : Pagamento por requisição
lambda_cost = {
'requests': 0.0000002, # por requisição
'duration': 0.00001667 # por 100ms
}
return {
'ec2': ec2_cost,
'lambda': lambda_cost
}
2. AWS Lambda na Prática
Criação de uma Função Simples
# Exemplo de função Lambda
def lambda_handler(event, context):
# Função simples que retorna uma mensagem
return {
'statusCode': 200,
'body': 'Bonjour depuis Lambda !'
}
Configuração da Função
# Exemplo de configuração do Lambda
def setup_lambda():
lambda_client = boto3.client('lambda')
# Criação de uma função
function = lambda_client.create_function(
FunctionName='MaFonction',
Runtime='python3.9',
Handler='index.lambda_handler',
Code={
'ZipFile': open('mon-code.zip', 'rb').read()
},
Role='arn:aws:iam::account:role/lambda-role',
Timeout=30,
MemorySize=128
)
return function['FunctionArn']
3. Integração com Outros Serviços
Trigger do S3
# Exemplo de trigger S3
def s3_trigger_handler(event, context):
# Processamento de um arquivo enviado ao S3
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Ler o arquivo
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
content = response['Body'].read().decode('utf-8')
# Processar o conteúdo
return {
'statusCode': 200,
'body': f'Fichier traité : {key}'
}
API Gateway
# Exemplo de integração com o API Gateway
def api_handler(event, context):
# Processamento de uma requisição HTTP
http_method = event['httpMethod']
if http_method == 'GET':
return {
'statusCode': 200,
'body': 'GET request réussie'
}
elif http_method == 'POST':
body = json.loads(event['body'])
return {
'statusCode': 200,
'body': f'Données reçues : {body}'
}
4. Boas Práticas
Gerenciamento de Dependências
# Exemplo de gerenciamento de dependências
def create_lambda_package():
# Criar um ambiente virtual
os.system('python -m venv venv')
# Instalar as dependências
os.system('pip install -r requirements.txt -t ./package')
# Criar o ZIP
shutil.make_archive('lambda-package', 'zip', './package')
return 'lambda-package.zip'
Configuração de Memória
# Exemplo de otimização de memória
def optimize_memory():
lambda_client = boto3.client('lambda')
# Atualização da configuração
lambda_client.update_function_configuration(
FunctionName='MaFonction',
MemorySize=256, # Aumentar a memória
Timeout=60, # Aumentar o timeout
Environment={
'Variables': {
'ENV': 'production',
'DEBUG': 'false'
}
}
)
5. Monitoramento e Logs
CloudWatch Logs
# Exemplo de logging
def lambda_with_logging(event, context):
# Logging simples
print('Démarrage de la fonction')
try:
# Código da função
result = process_data(event)
print('Traitement réussi')
return result
except Exception as e:
print(f'Erreur : {str(e)}')
raise
Métricas
# Exemplo de métricas personalizadas
def custom_metrics():
cloudwatch = boto3.client('cloudwatch')
# Enviar uma métrica
cloudwatch.put_metric_data(
Namespace='MonApplication',
MetricData=[
{
'MetricName': 'TempsExecution',
'Value': 1.5,
'Unit': 'Seconds',
'Dimensions': [
{
'Name': 'Fonction',
'Value': 'MaFonction'
}
]
}
]
)
6. Segurança
Variáveis de Ambiente
# Exemplo de gerenciamento de segredos
def secure_lambda():
lambda_client = boto3.client('lambda')
# Configuração das variáveis de ambiente
lambda_client.update_function_configuration(
FunctionName='MaFonction',
Environment={
'Variables': {
'API_KEY': 'mon-api-key',
'DB_PASSWORD': 'mon-mot-de-passe'
}
}
)
IAM Roles
# Exemplo de configuração do IAM
def setup_iam_role():
iam = boto3.client('iam')
# Criação da role
role = iam.create_role(
RoleName='lambda-role',
AssumeRolePolicyDocument=json.dumps({
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Principal': {
'Service': 'lambda.amazonaws.com'
},
'Action': 'sts:AssumeRole'
}
]
})
)
return role['Role']['Arn']
Conclusão
Pontos-chave a reter:
- Serverless = sem gerenciamento de infraestrutura
- Lambda = funções executadas sob demanda
- Pagamento apenas pelo uso
- Integração fácil com outros serviços
- Escalabilidade automática
Recomendações:
- Comece com funções simples
- Monitore os custos
- Use os logs para debugging
- Proteja as funções
- Otimize o desempenho
Sobre InSkillCoach
Especialista em treinamento e tecnologias
Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.
Certificações:
- AWS Certified Solutions Architect – Professional
- Certificações Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.1k
140
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão