AWS Lambda y Serverless: Guía para Principiantes
Descubre el concepto de serverless y cómo utilizar AWS Lambda.
I
InSkillCoach
· min
AWS Lambda y Serverless: Guía para Principiantes
Descubre el concepto de serverless y cómo utilizar AWS Lambda.
1. ¿Qué es el Serverless?
Definición Simple
- Serverless = Sin servidores que gestionar
- Ventajas:
- Sin gestión de infraestructura
- Pago por uso
- Escalado automático
Comparación con EC2
# Ejemplo de coste EC2 vs Lambda
def compare_costs():
# EC2 : Pago por hora
ec2_cost = {
't2.micro': 0.0116, # por hora
't2.small': 0.023, # por hora
't2.medium': 0.0464 # por hora
}
# Lambda : Pago por solicitud
lambda_cost = {
'requests': 0.0000002, # por solicitud
'duration': 0.00001667 # por 100 ms
}
return {
'ec2': ec2_cost,
'lambda': lambda_cost
}
2. AWS Lambda en la Práctica
Creación de una Función Simple
# Ejemplo de función Lambda
def lambda_handler(event, context):
# Función simple que devuelve un mensaje
return {
'statusCode': 200,
'body': 'Bonjour depuis Lambda !'
}
Configuración de la Función
# Ejemplo de configuración de Lambda
def setup_lambda():
lambda_client = boto3.client('lambda')
# Creación de una función
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. Integración con otros Servicios
S3 Trigger
# Ejemplo de trigger S3
def s3_trigger_handler(event, context):
# Procesamiento de un archivo subido a S3
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Leer el archivo
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
content = response['Body'].read().decode('utf-8')
# Procesar el contenido
return {
'statusCode': 200,
'body': f'Fichier traité : {key}'
}
API Gateway
# Ejemplo de integración con API Gateway
def api_handler(event, context):
# Procesamiento de una solicitud 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. Buenas Prácticas
Gestión de Dependencias
# Ejemplo de gestión de dependencias
def create_lambda_package():
# Crear un entorno virtual
os.system('python -m venv venv')
# Instalar las dependencias
os.system('pip install -r requirements.txt -t ./package')
# Crear el ZIP
shutil.make_archive('lambda-package', 'zip', './package')
return 'lambda-package.zip'
Configuración de la Memoria
# Ejemplo de optimización de la memoria
def optimize_memory():
lambda_client = boto3.client('lambda')
# Actualización de la configuración
lambda_client.update_function_configuration(
FunctionName='MaFonction',
MemorySize=256, # Aumentar la memoria
Timeout=60, # Aumentar el timeout
Environment={
'Variables': {
'ENV': 'production',
'DEBUG': 'false'
}
}
)
5. Monitorización y Logs
CloudWatch Logs
# Ejemplo de logging
def lambda_with_logging(event, context):
# Logging simple
print('Démarrage de la fonction')
try:
# Código de la función
result = process_data(event)
print('Traitement réussi')
return result
except Exception as e:
print(f'Erreur : {str(e)}')
raise
Métricas
# Ejemplo de métricas personalizadas
def custom_metrics():
cloudwatch = boto3.client('cloudwatch')
# Enviar una métrica
cloudwatch.put_metric_data(
Namespace='MonApplication',
MetricData=[
{
'MetricName': 'TempsExecution',
'Value': 1.5,
'Unit': 'Seconds',
'Dimensions': [
{
'Name': 'Fonction',
'Value': 'MaFonction'
}
]
}
]
)
6. Seguridad
Variables de Entorno
# Ejemplo de gestión de secretos
def secure_lambda():
lambda_client = boto3.client('lambda')
# Configuración de las variables de entorno
lambda_client.update_function_configuration(
FunctionName='MaFonction',
Environment={
'Variables': {
'API_KEY': 'mon-api-key',
'DB_PASSWORD': 'mon-mot-de-passe'
}
}
)
IAM Roles
# Ejemplo de configuración de IAM
def setup_iam_role():
iam = boto3.client('iam')
# Creación del rol
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']
Conclusión
Puntos clave que recordar:
- Serverless = sin gestión de infraestructura
- Lambda = funciones ejecutadas bajo demanda
- Se paga únicamente por el uso
- Integración sencilla con otros servicios
- Escalado automático
Recomendaciones:
- Empezar con funciones simples
- Vigilar los costes
- Utilizar los logs para la depuración
- Proteger las funciones
- Optimizar el rendimiento
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.7k
192
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión