Setup cơ bản:
AWS Budgets
Billing Alerts
Cost Explorer
Deep Dive Analysis:
Custom CloudWatch Metrics
import boto3
def publish_cost_metrics():
ce = boto3.client('ce')
cw = boto3.client('cloudwatch')
# Get daily cost
response = ce.get_cost_and_usage(
TimePeriod={
'Start': '2025-01-01',
'End': '2025-01-02'
},
Granularity='DAILY',
Metrics=['BlendedCost']
)
cost = float(response['ResultsByTime'][0]['Total']['BlendedCost']['Amount'])
# Publish to CloudWatch
cw.put_metric_data(
Namespace='AWS/Billing/Custom',
MetricData=[
{
'MetricName': 'DailyCost',
'Value': cost,
'Unit': 'None'
}
]
)
Resource Tagging Strategy
Mandatory Tags:
- Project: project-name
- Environment: dev/staging/prod
- Owner: email@domain.com
- CostCenter: department
- AutoShutdown: true/false
- CreatedDate: YYYY-MM-DD
Immediate Resource Audit
# Find most expensive resources
aws ce get-cost-and-usage \
--time-period Start=2025-01-01,End=2025-01-31 \
--granularity MONTHLY \
--metrics BlendedCost \
--group-by Type=DIMENSION,Key=SERVICE
Emergency Shutdown Protocol
# Stop all non-critical instances
aws ec2 stop-instances --instance-ids $(
aws ec2 describe-instances \
--filters "Name=tag:Critical,Values=false" \
--query 'Reservations[].Instances[?State.Name==`running`].InstanceId' \
--output text
)