0%
Costes de AWS: guía de optimización para principiantes

Costes de AWS: guía de optimización para principiantes

Descubre cómo entender y optimizar los costes de AWS.

I

InSkillCoach

· min

Costes de AWS: guía de optimización para principiantes

Descubre cómo entender y optimizar los costes de AWS.

1. Comprender la facturación de AWS

Servicios gratuitos

  • AWS Free Tier: servicios gratuitos durante 12 meses
  • Servicios siempre gratuitos:
    • Lambda: 1 millón de invocaciones al mes
    • CloudWatch: 10 métricas, 1 millón de solicitudes
    • S3: 5 GB de almacenamiento
    • DynamoDB: 25 GB de almacenamiento

Facturación por servicio

# Exemple de calcul des coûts
def calculate_costs():
    # EC2 : Facturation par heure
    ec2_cost = {
        't2.micro': 0.0116,  # par heure
        't2.small': 0.023,   # par heure
        't2.medium': 0.0464  # par heure
    }
    
    # S3 : Facturation par GB/mois
    s3_cost = {
        'standard': 0.023,    # par GB/mois
        'infrequent': 0.0125, # par GB/mois
        'glacier': 0.004      # par GB/mois
    }
    
    # Lambda : Facturation par requête
    lambda_cost = {
        'requests': 0.0000002,  # par requête
        'duration': 0.00001667  # par 100ms
    }
    
    return {
        'ec2': ec2_cost,
        's3': s3_cost,
        'lambda': lambda_cost
    }

2. Servicios que hay que vigilar

Amazon Athena

  • Facturación: por byte escaneado
  • Optimización:
# Exemple d'optimisation Athena
def optimize_athena_query():
    # 1. Partitionner les données
    partition_query = """
    CREATE TABLE ma_table_partitionnee
    PARTITIONED BY (annee INT, mois INT)
    AS SELECT * FROM ma_table;
    """
    
    # 2. Compresser les données
    compression_query = """
    CREATE TABLE ma_table_compressee
    WITH (format = 'PARQUET', compression = 'SNAPPY')
    AS SELECT * FROM ma_table;
    """
    
    return {
        'partition_query': partition_query,
        'compression_query': compression_query
    }

Amazon Redshift

  • Facturación: por hora de clúster
  • Optimización:
# Exemple d'optimisation Redshift
def optimize_redshift():
    # 1. Choisir le bon type de nœud
    node_types = {
        'dc2.large': 0.25,    # par heure
        'dc2.8xlarge': 2.36,  # par heure
        'ra3.xlplus': 0.24    # par heure
    }
    
    # 2. Configurer le WLM (Workload Management)
    wlm_config = {
        'concurrency_scaling': True,
        'max_concurrency': 50,
        'query_timeout': 300
    }
    
    return {
        'node_types': node_types,
        'wlm_config': wlm_config
    }

3. Buenas prácticas de optimización

Apagar los recursos que no se usan

# Exemple d'arrêt automatique
def stop_unused_resources():
    ec2 = boto3.client('ec2')
    
    # Arrêter les instances EC2 inactives
    instances = ec2.describe_instances(
        Filters=[
            {
                'Name': 'instance-state-name',
                'Values': ['running']
            }
        ]
    )
    
    for instance in instances['Reservations']:
        # Vérifier l'utilisation CPU
        cloudwatch = boto3.client('cloudwatch')
        cpu_usage = cloudwatch.get_metric_statistics(
            Namespace='AWS/EC2',
            MetricName='CPUUtilization',
            Dimensions=[{'Name': 'InstanceId', 'Value': instance['InstanceId']}],
            StartTime=datetime.now() - timedelta(hours=24),
            EndTime=datetime.now(),
            Period=3600,
            Statistics=['Average']
        )
        
        # Arrêter si utilisation < 5%
        if cpu_usage['Datapoints'][-1]['Average'] < 5:
            ec2.stop_instances(InstanceIds=[instance['InstanceId']])

Utilizar las reservas

# Exemple d'achat de réservation
def purchase_reservation():
    ec2 = boto3.client('ec2')
    
    # Acheter une réservation EC2
    reservation = ec2.purchase_reserved_instances_offering(
        ReservedInstancesOfferingId='offering-id',
        InstanceCount=1,
        LimitPrice={
            'Amount': '100',
            'CurrencyCode': 'USD'
        }
    )
    
    return reservation['ReservedInstancesId']

4. Puesta en marcha de las alertas

Configuración de los presupuestos

# Exemple de configuration de budget
def setup_budget():
    budgets = boto3.client('budgets')
    
    # Créer un budget mensuel
    budget = budgets.create_budget(
        AccountId='account-id',
        Budget={
            'BudgetName': 'MonBudget',
            'BudgetLimit': {
                'Amount': '100',
                'Unit': 'USD'
            },
            'TimeUnit': 'MONTHLY',
            'BudgetType': 'COST',
            'CostFilters': {
                'Service': ['Amazon EC2', 'Amazon S3']
            }
        },
        NotificationsWithSubscribers=[
            {
                'Notification': {
                    'NotificationType': 'ACTUAL',
                    'ComparisonOperator': 'GREATER_THAN',
                    'Threshold': 80,
                    'ThresholdType': 'PERCENTAGE'
                },
                'Subscribers': [
                    {
                        'SubscriptionType': 'EMAIL',
                        'Address': 'mon-email@example.com'
                    }
                ]
            }
        ]
    )
    
    return budget['BudgetId']

Supervisión de los costes

# Exemple de surveillance des coûts
def monitor_costs():
    ce = boto3.client('ce')
    
    # Obtenir les coûts par service
    costs = ce.get_cost_and_usage(
        TimePeriod={
            'Start': '2024-01-01',
            'End': '2024-03-22'
        },
        Granularity='MONTHLY',
        Metrics=['UnblendedCost'],
        GroupBy=[
            {'Type': 'DIMENSION', 'Key': 'SERVICE'}
        ]
    )
    
    return costs['ResultsByTime']

5. Herramientas de optimización

AWS Cost Explorer

  • Funcionalidades:
    • Visualización de los costes
    • Previsiones
    • Recomendaciones de optimización

AWS Trusted Advisor

  • Comprobaciones:
    • Costes no optimizados
    • Rendimiento
    • Seguridad
    • Tolerancia a fallos

Conclusión

Puntos clave que hay que recordar:

  • Utilizar el Free Tier
  • Vigilar los costes por servicio
  • Optimizar las consultas
  • Apagar los recursos que no se usan
  • Configurar alertas

Recomendaciones:

  • Empezar poco a poco
  • Utilizar las reservas
  • Configurar presupuestos
  • Supervisar los costes con regularidad
  • Optimizar de forma continua
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+
2.0k
236

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!