0%
Otimização de Custos na AWS: Guia Completo

Otimização de Custos na AWS: Guia Completo

Descubra as melhores práticas para otimizar seus custos na AWS e reduzir sua fatura.

I

InSkillCoach

· min

Otimização de Custos na AWS: Guia Completo

Descubra as estratégias e ferramentas para otimizar seus custos na AWS de forma eficaz.

1. Análise de Custos

Uso do AWS Cost Explorer

# Exemplo de análise de custos com boto3
import boto3
from datetime import datetime, timedelta

def analyze_costs():
    ce = boto3.client('ce')
    
    # Período de análise (últimos 30 dias)
    end_date = datetime.now()
    start_date = end_date - timedelta(days=30)
    
    response = ce.get_cost_and_usage(
        TimePeriod={
            'Start': start_date.strftime('%Y-%m-%d'),
            'End': end_date.strftime('%Y-%m-%d')
        },
        Granularity='DAILY',
        Metrics=['UnblendedCost'],
        GroupBy=[
            {'Type': 'DIMENSION', 'Key': 'SERVICE'},
            {'Type': 'DIMENSION', 'Key': 'USAGE_TYPE'}
        ]
    )
    
    return response['ResultsByTime']

Detecção de Recursos Não Utilizados

# Exemplo de detecção de recursos não utilizados
def find_unused_resources():
    unused_resources = {
        'ec2_instances': [],
        'ebs_volumes': [],
        's3_buckets': []
    }
    
    # Verificação das instâncias EC2
    ec2 = boto3.client('ec2')
    instances = ec2.describe_instances()
    
    for reservation in instances['Reservations']:
        for instance in reservation['Instances']:
            if instance['State']['Name'] == 'stopped':
                unused_resources['ec2_instances'].append({
                    'id': instance['InstanceId'],
                    'type': instance['InstanceType'],
                    'state': instance['State']['Name']
                })
    
    return unused_resources

2. Otimização de Recursos

Redimensionamento de Instâncias EC2

# Exemplo de redimensionamento de instância EC2
def resize_ec2_instance(instance_id, new_instance_type):
    ec2 = boto3.client('ec2')
    
    try:
        # Parada da instância
        ec2.stop_instances(InstanceIds=[instance_id])
        
        # Espera pela parada
        waiter = ec2.get_waiter('instance_stopped')
        waiter.wait(InstanceIds=[instance_id])
        
        # Modificação do tipo de instância
        ec2.modify_instance_attribute(
            InstanceId=instance_id,
            InstanceType={'Value': new_instance_type}
        )
        
        # Reinicialização da instância
        ec2.start_instances(InstanceIds=[instance_id])
        
        return True
    except Exception as e:
        print(f"Erreur lors du redimensionnement: {e}")
        return False

Otimização do Armazenamento S3

# Exemplo de otimização do armazenamento S3
def optimize_s3_storage():
    s3 = boto3.client('s3')
    
    # Lista de buckets
    buckets = s3.list_buckets()
    
    for bucket in buckets['Buckets']:
        # Análise dos objetos
        objects = s3.list_objects_v2(Bucket=bucket['Name'])
        
        for obj in objects.get('Contents', []):
            # Verificação da última modificação
            last_modified = obj['LastModified']
            age = (datetime.now() - last_modified).days
            
            # Migração para uma classe de armazenamento mais barata
            if age > 90:  # Objetos com mais de 90 dias
                s3.copy_object(
                    Bucket=bucket['Name'],
                    CopySource={'Bucket': bucket['Name'], 'Key': obj['Key']},
                    Key=obj['Key'],
                    StorageClass='STANDARD_IA'
                )

3. Gerenciamento de Reservas

Compra de Reservas EC2

# Exemplo de compra de reservas EC2
def purchase_ec2_reservation():
    ec2 = boto3.client('ec2')
    
    try:
        response = ec2.purchase_reserved_instances_offering(
            ReservedInstancesOfferingId='offering-id',
            InstanceCount=1,
            LimitPrice={
                'Amount': '1000',
                'CurrencyCode': 'USD'
            }
        )
        
        return response['ReservedInstancesId']
    except Exception as e:
        print(f"Erreur lors de l'achat: {e}")
        return None

Otimização das Reservas

# Exemplo de otimização das reservas
def optimize_reservations():
    ec2 = boto3.client('ec2')
    
    # Análise da utilização
    utilization = ec2.describe_reserved_instances()
    
    recommendations = []
    for ri in utilization['ReservedInstances']:
        if ri['State'] == 'active':
            # Cálculo da utilização
            utilization_rate = calculate_utilization_rate(ri)
            
            if utilization_rate < 0.7:  # Utilização inferior a 70%
                recommendations.append({
                    'reservation_id': ri['ReservedInstancesId'],
                    'current_utilization': utilization_rate,
                    'recommendation': 'Considérer la modification ou l'annulation'
                })
    
    return recommendations

4. Configuração de Alertas

Configuração de Alertas de Orçamento

# Exemplo de configuração de alertas de orçamento
def setup_budget_alerts():
    budgets = boto3.client('budgets')
    
    try:
        response = budgets.create_budget(
            AccountId='123456789012',
            Budget={
                'BudgetName': 'Budget Mensuel',
                'BudgetLimit': {
                    'Amount': '1000',
                    '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': 'alerts@example.com'
                        }
                    ]
                }
            ]
        )
        
        return response['BudgetId']
    except Exception as e:
        print(f"Erreur lors de la configuration: {e}")
        return None

Monitoramento de Custos

# Exemplo de monitoramento de custos
def monitor_costs():
    ce = boto3.client('ce')
    
    # Configuração do monitoramento
    monitoring_config = {
        'daily_threshold': 100,  # USD
        'weekly_threshold': 500,  # USD
        'monthly_threshold': 2000  # USD
    }
    
    # Monitoramento diário
    daily_costs = get_daily_costs()
    if daily_costs > monitoring_config['daily_threshold']:
        send_alert('Dépassement du seuil quotidien')
    
    # Monitoramento semanal
    weekly_costs = get_weekly_costs()
    if weekly_costs > monitoring_config['weekly_threshold']:
        send_alert('Dépassement du seuil hebdomadaire')

5. Boas Práticas

Otimização Automática

# Exemplo de otimização automática
def auto_optimize_resources():
    # Análise dos custos
    costs = analyze_costs()
    
    # Detecção de recursos não utilizados
    unused = find_unused_resources()
    
    # Otimização das instâncias EC2
    for instance in unused['ec2_instances']:
        if is_safe_to_stop(instance):
            stop_instance(instance['id'])
    
    # Otimização do armazenamento
    optimize_s3_storage()
    
    # Atualização das reservas
    update_reservations()
    
    return {
        'optimizations_performed': True,
        'resources_optimized': len(unused['ec2_instances']),
        'cost_savings': calculate_savings()
    }

Relatórios de Otimização

# Exemplo de geração de relatório de otimização
def generate_optimization_report():
    report = {
        'date': datetime.now().strftime('%Y-%m-%d'),
        'cost_analysis': analyze_costs(),
        'unused_resources': find_unused_resources(),
        'reservation_optimization': optimize_reservations(),
        'recommendations': generate_recommendations()
    }
    
    # Salvamento do relatório
    save_report(report)
    
    # Envio do relatório
    send_report(report)
    
    return report

Conclusão

Pontos-chave a lembrar:

  • Analisar os custos regularmente
  • Identificar os recursos não utilizados
  • Otimizar as reservas
  • Configurar alertas
  • Automatizar a otimização

Recomendações:

  • Usar o AWS Cost Explorer
  • Configurar orçamentos
  • Implementar políticas de ciclo de vida
  • Otimizar as reservas
  • Monitorar os custos em tempo real
InSkillCoach

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.5k
125

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!