Basic Setup:
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
)