0%
AWS Lambda y Serverless: Guía para Principiantes

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
InSkillCoach

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

¡Enlace copiado!