0%
Custos da AWS: Guia de Otimização para Iniciantes

Custos da AWS: Guia de Otimização para Iniciantes

Descubra como entender e otimizar os custos da AWS.

I

InSkillCoach

· min

Custos da AWS: Guia de Otimização para Iniciantes

Descubra como entender e otimizar os custos da AWS.

1. Entendendo a Cobrança da AWS

Serviços Gratuitos

  • AWS Free Tier: Serviços gratuitos por 12 meses
  • Serviços sempre gratuitos:
    • Lambda: 1 milhão de invocações/mês
    • CloudWatch: 10 métricas, 1 milhão de requisições
    • S3: 5 GB de armazenamento
    • DynamoDB: 25 GB de armazenamento

Cobrança por Serviço

# Exemplo de cálculo dos custos
def calculate_costs():
    # EC2 : Facturation par heure
    ec2_cost = {
        't2.micro': 0.0116,  # por hora
        't2.small': 0.023,   # por hora
        't2.medium': 0.0464  # por hora
    }
    
    # S3 : Facturation par GB/mois
    s3_cost = {
        'standard': 0.023,    # por GB/mês
        'infrequent': 0.0125, # por GB/mês
        'glacier': 0.004      # por GB/mês
    }
    
    # Lambda : Facturation par requête
    lambda_cost = {
        'requests': 0.0000002,  # por requisição
        'duration': 0.00001667  # por 100ms
    }
    
    return {
        'ec2': ec2_cost,
        's3': s3_cost,
        'lambda': lambda_cost
    }

2. Serviços a Monitorar

Amazon Athena

  • Cobrança: Por byte escaneado
  • Otimização:
# Exemplo de otimização do Athena
def optimize_athena_query():
    # 1. Particionar os dados
    partition_query = """
    CREATE TABLE ma_table_partitionnee
    PARTITIONED BY (annee INT, mois INT)
    AS SELECT * FROM ma_table;
    """
    
    # 2. Compactar os dados
    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

  • Cobrança: Por hora de cluster
  • Otimização:
# Exemplo de otimização do Redshift
def optimize_redshift():
    # 1. Escolher o tipo de nó adequado
    node_types = {
        'dc2.large': 0.25,    # por hora
        'dc2.8xlarge': 2.36,  # por hora
        'ra3.xlplus': 0.24    # por hora
    }
    
    # 2. Configurar o WLM (Workload Management)
    wlm_config = {
        'concurrency_scaling': True,
        'max_concurrency': 50,
        'query_timeout': 300
    }
    
    return {
        'node_types': node_types,
        'wlm_config': wlm_config
    }

3. Boas Práticas de Otimização

Desligar Recursos Não Utilizados

# Exemplo de desligamento automático
def stop_unused_resources():
    ec2 = boto3.client('ec2')
    
    # Parar as instâncias EC2 inativas
    instances = ec2.describe_instances(
        Filters=[
            {
                'Name': 'instance-state-name',
                'Values': ['running']
            }
        ]
    )
    
    for instance in instances['Reservations']:
        # Verificar a utilização de 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']
        )
        
        # Parar se a utilização for < 5%
        if cpu_usage['Datapoints'][-1]['Average'] < 5:
            ec2.stop_instances(InstanceIds=[instance['InstanceId']])

Usar Reservas

# Exemplo de compra de reserva
def purchase_reservation():
    ec2 = boto3.client('ec2')
    
    # Comprar uma reserva EC2
    reservation = ec2.purchase_reserved_instances_offering(
        ReservedInstancesOfferingId='offering-id',
        InstanceCount=1,
        LimitPrice={
            'Amount': '100',
            'CurrencyCode': 'USD'
        }
    )
    
    return reservation['ReservedInstancesId']

4. Configuração de Alertas

Configuração de Orçamentos

# Exemplo de configuração de orçamento
def setup_budget():
    budgets = boto3.client('budgets')
    
    # Criar um orçamento mensal
    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']

Monitoramento de Custos

# Exemplo de monitoramento de custos
def monitor_costs():
    ce = boto3.client('ce')
    
    # Obter os custos por serviço
    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. Ferramentas de Otimização

AWS Cost Explorer

  • Funcionalidades:
    • Visualização dos custos
    • Previsões
    • Recomendações de otimização

AWS Trusted Advisor

  • Verificações:
    • Custos não otimizados
    • Desempenho
    • Segurança
    • Tolerância a falhas

Conclusão

Pontos-chave a lembrar:

  • Usar o Free Tier
  • Monitorar os custos por serviço
  • Otimizar as consultas
  • Desligar os recursos não utilizados
  • Configurar alertas

Recomendações:

  • Começar pequeno
  • Usar as reservas
  • Configurar orçamentos
  • Monitorar os custos regularmente
  • Otimizar continuamente
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
79

Comentários

Os comentários são alimentados pelo GitHub Discussions

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

Link copiado!