メインコンテンツまでスキップ

AWS Billing & Cost Management

AWS Billing & Cost Management là bộ công cụ giúp bạn có visibility đầy đủ về chi phí, kiểm soát ngân sách, và tối ưu hóa chi tiêu trên AWS. Đây là một trong những kỹ năng quan trọng nhất đối với DevOps Engineer và Cloud Architect làm việc ở production.


1. Tổng quan

Vấn đề phổ biến

Vấn đềNguyên nhânHệ quả
Chi phí tăng đột biếnEC2/RDS chạy idle, snapshot tích lũy, data transfer bất thườngVượt budget, khó giải thích với dự án/khách hàng
Thiếu visibilityKhông có tagging, không phân tách cost theo team/môi trườngKhông biết tiền đi đâu
Multi-account phức tạpMỗi account quản lý billing riêngKhông có cái nhìn tổng thể, dễ bỏ sót chi phí

Kiến trúc tổng quan

AWS Organizations (Management Account)
├── Consolidated Billing
│ ├── Dev Account
│ ├── Staging Account
│ └── Prod Account
└── Cost Management Tools
├── AWS Cost Explorer → Phân tích & forecast
├── AWS Budgets → Alert khi vượt ngưỡng
├── Cost Allocation Tags → Phân bổ chi phí theo business unit

2. AWS Cost Explorer

Cách hoạt động

Cost Explorer xử lý dữ liệu billing từ tất cả các dịch vụ AWS và cho phép bạn slice/dice chi phí theo nhiều dimension khác nhau. Dữ liệu có độ trễ 24 giờ — không phải real-time.

Bật Cost Explorer lần đầu

Cost Explorer cần được manually enable từ Billing Console. Sau khi bật, dữ liệu lịch sử được populate trong vòng 24 giờ. Một khi đã bật, không thể tắt.

Tính năng chính

Breakdown dimensions:

DimensionDùng khi nào
ServiceBiết service nào tốn nhiều nhất
Account (linked)Phân tích chi phí cross-account
RegionPhát hiện workload chạy sai region
TagPhân bổ theo project/team/env
Usage typeDrill down vào data transfer, request count, storage
Instance typeSo sánh chi phí giữa các EC2 family

Granularity:

  • Monthly: Overview, phát hiện trend dài hạn
  • Daily: Detect spike nhanh, debug chi phí bất thường
  • Hourly: Chỉ khả dụng nếu bật trong Settings, tốn thêm phí — chỉ dùng khi cần debug cụ thể

Forecast: Cost Explorer dùng machine learning để dự báo chi phí dựa trên pattern lịch sử. Độ chính xác tăng khi có nhiều data (ít nhất 3 tháng). Forecast hiển thị confidence interval (upper/lower bound).

Use case: Detect EC2 spike bất thường

Scenario: Sáng thứ Hai nhận email báo chi phí tuần tăng 40%.

Quy trình debug trong Cost Explorer:

1. Filter: Service = EC2
2. Group by: Usage Type
→ Phát hiện "BoxUsage:m5.4xlarge" tăng mạnh
3. Group by: Tag (Environment)
→ Spike xuất phát từ tag env=dev
4. Change granularity: Daily
→ Spike bắt đầu từ thứ Sáu 18:00
5. Group by: Instance Type (via AWS CLI)
# Drill down cost theo từng EC2 instance type qua CLI
# Lưu ý: SERVICE value phải khớp chính xác với Cost Explorer dimension value.
# Có thể kiểm tra trước bằng lệnh:
# aws ce get-dimension-values --dimension SERVICE --time-period Start=2026-04-14,End=2026-04-21
aws ce get-cost-and-usage \
--time-period Start=2026-04-14,End=2026-04-21 \
--granularity DAILY \
--filter '{"Dimensions": {"Key": "SERVICE", "Values": ["Amazon Elastic Compute Cloud - Compute"]}}' \
--group-by '[{"Type": "TAG", "Key": "Environment"}, {"Type": "DIMENSION", "Key": "INSTANCE_TYPE"}]' \
--metrics "UnblendedCost"

Kết quả: Dev team để quên một EC2 m5.4xlarge chạy qua cuối tuần. Fix: implement Instance Scheduler hoặc Lambda auto-stop ngoài giờ làm việc.

Best practices

  • Bật Hourly granularity có chọn lọc: Chỉ bật khi đang debug. Hourly data tốn thêm ~$0.01/metric/day.
  • Lưu Saved Filters: Nếu các môi trường được build trong cùng 1 aws account thì nên có filter riêng (VD: filter theo tag env=dev).
  • Export định kỳ: Schedule export Cost Explorer data ra S3 để lưu vết.
  • Dùng Rightsizing Recommendations: Cost Explorer có tab riêng cho EC2 rightsizing recommendations dựa trên CloudWatch utilization.

3. AWS Budgets

Các loại Budget

LoạiTheo dõiDùng khi nào
Cost BudgetTổng chi phí USDKiểm soát tổng chi tiêu
Usage BudgetSố lượng resource (EC2 hours, S3 GB)Giới hạn consumption
RI Utilization% sử dụng Reserved InstancesĐảm bảo RI không bị lãng phí
RI Coverage% On-Demand được cover bởi RIBiết cần mua thêm RI không
Savings Plans Utilization% sử dụng Savings Plans commitmentĐảm bảo SP không waste
Savings Plans Coverage% On-Demand được cover bởi SPTối ưu SP coverage

Cấu hình Cost Budget từng bước

Bước 1 — Tạo budget qua Console:

Billing Console → Budgets → Create budget
→ Budget type: Cost budget
→ Budget name: prod-monthly-cost-2026
→ Period: Monthly
→ Budget amount: Fixed → $5,000
→ Budget scope: Filter by tag Environment=prod

Bước 2 — Cấu hình Alert:

Threshold 1: 80% of budgeted amount ($4,000)
→ Alert type: Actual
→ Notification: Email → devops@company.com, finance@company.com

Threshold 2: 100% of budgeted amount ($5,000)
→ Alert type: Actual
→ Notification: SNS Topic → arn:aws:sns:us-east-1:123456789012:budget-alerts
Cách đọc alert theo ngày trong tháng

Khi nhận alert, ngày nhận alert quyết định mức độ ưu tiên xử lý:

ThresholdTrước ngày 23Từ ngày 23 trở đi
Threshold 1 — 80%🔴 High — Chi phí tăng bất thường, cần investigate và action ngay🟢 Low — Budget đang cạn dần theo đúng trend, theo dõi bình thường
Threshold 2 — 100%🔴 High — Vượt budget, action ngay🔴 High — Vượt budget, action ngay

Lý do: Nếu đã tiêu 80% ngân sách mà mới đến giữa tháng → tốc độ chi tiêu đang vượt kế hoạch, cần điều tra ngay. Nếu cuối tháng mới đạt 80% → bình thường, budget sắp hết đúng chu kỳ.

Threshold 2 luôn là High bất kể thời điểm — vượt 100% budget là vấn đề cần xử lý ngay lập tức.

Alert delay

AWS Budgets alert có thể delay 8-12 giờ do billing data lag. Không dùng Budgets để real-time alert — dùng CloudWatch Billing Metric nếu cần alert nhanh hơn.

SNS Integration để Slack/Mail

Budget Alert → SNS Topic → Lambda → Slack Webhook
→ Mail

4. Cost Allocation Tags

AWS-generated Tags vs User-defined Tags

LoạiVí dụAi tạoCó thể dùng cho billing?
AWS-generatedaws:createdBy, aws:cloudformation:stack-nameAWS tự độngCần activate trong Billing Console
User-definedEnvironment, Project, OwnerDevOps/DeveloperCần activate trong Billing Console
Tags không tự động xuất hiện trong billing

Tạo tag trên resource không đủ. Bạn phải vào Billing Console → Cost Allocation Tags → Activate thì tag mới xuất hiện trong Cost Explorer và CUR. Activation delay ~24 giờ.

Chiến lược tagging cho Production

Mandatory tags (enforce bằng SCP/Config):

Tag KeyVí dụMục đíchTrường hợp sử dụng
Environmentdev, staging, prodPhân tách cost theo môi trườngCác môi trường (dev/staging/prod) được build trong cùng 1 AWS account
Projectcheckout-service, data-platformPhân bổ cost theo productNhiều project chạy trong cùng 1 AWS account, cần biết project nào tốn tiền
Ownerteam-backend, team-infraChủ sở hữu chịu trách nhiệm chi phíMuốn phân tách chi phí theo từng team (dev, infra, data, ...) để chargeback nội bộ

Activate tags qua AWS CLI

# List user-defined tags available for activation
aws ce list-cost-allocation-tags \
--status Inactive \
--type UserDefined

# Activate tags
aws ce update-cost-allocation-tags-status \
--cost-allocation-tags-status '[
{"TagKey": "Environment", "Status": "Active"},
{"TagKey": "Project", "Status": "Active"},
{"TagKey": "Owner", "Status": "Active"}
]'

Enforce Mandatory Tags bằng SCP

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnforceMandatoryTags",
"Effect": "Deny",
"Action": [
"ec2:RunInstances",
"rds:CreateDBInstance",
"elasticloadbalancing:CreateLoadBalancer"
],
"Resource": "*",
"Condition": {
"Null": {
"aws:RequestTag/Environment": "true",
"aws:RequestTag/Project": "true",
"aws:RequestTag/Owner": "true"
}
}
}
]
}
SCP chỉ là safety net

SCP ngăn resource mới không có tag, nhưng không fix resource cũ. Dùng AWS Config Rule required-tags để audit resource hiện có và Tag Editor để bulk-tag resource cũ.

Lỗi phổ biến

LỗiHệ quảFix
Quên activate tag trong Billing ConsoleTag không xuất hiện trong Cost ExplorerTạo runbook activation sau mỗi khi thêm tag key mới
Tag trên EC2 nhưng không tag EBS volume đính kèmCost phân bổ saiTag propagation: bật "Tag new volumes" trong EC2 settings
Lambda function không được tagServerless cost mất vào "untagged" bucketTag function và enforce bằng IAM policy lambda:CreateFunction

5. Chiến lược Multi-Account

AWS Organizations & Consolidated Billing

Management Account (Payer)
└── Root
├── OU: dev
│ └── Account: dev
├── OU: stg
│ └── Account: stg
└── OU: prd
└── Account: prd

Lợi ích Consolidated Billing:

  • Volume discounts: S3, Data Transfer pricing tính cộng dồn toàn org
  • RI/SP sharing: RI mua ở management account tự động apply cho linked accounts
  • Single invoice: Một hóa đơn duy nhất
  • Cross-account visibility: Cost Explorer hiển thị breakdown theo account

Cost Anomaly Detection

Bật Anomaly Detection thay vì chỉ dựa vào Budgets để phát hiện bất thường sớm hơn:

# Tạo Anomaly Monitor cho toàn bộ services
aws ce create-anomaly-monitor \
--anomaly-monitor '{
"MonitorName": "AllServices",
"MonitorType": "DIMENSIONAL",
"MonitorDimension": "SERVICE"
}'

# Tạo Anomaly Subscription (alert khi impact > $100)
aws ce create-anomaly-subscription \
--anomaly-subscription '{
"SubscriptionName": "DevOps-Alert",
"MonitorArnList": ["arn:aws:ce::123456789012:anomalymonitor/abc123"],
"Subscribers": [
{
"Address": "devops@company.com",
"Type": "EMAIL"
}
],
"Threshold": 100,
"Frequency": "DAILY"
}'
Anomaly Detection vs Budgets
  • Budgets: Alert khi vượt ngưỡng tuyệt đối (VD: $5,000/tháng)
  • Anomaly Detection: Alert khi có pattern bất thường so với baseline, dù chưa vượt budget — phát hiện sớm hơn
  • Dùng cả hai kết hợp.

Review Cost Định Kỳ

Cadence được khuyến nghị:

FrequencyReview nội dung
DailyAnomaly detection alerts, overnight spike
WeeklyService-level breakdown, forecast trend
MonthlyAccount-level budget review, rightsizing
QuarterlyRI/SP coverage review, architecture optimization