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
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