Bị Tính Phí Elastic IP Sau Khi Dừng EC2 — Cần Disassociate Hay Release?
Bạn vừa stop EC2 instance để tiết kiệm chi phí, nhưng cuối tháng nhìn vào hóa đơn AWS vẫn thấy dòng phí Elastic IP xuất hiện đều đặn. Đây là một trong những 'bẫy chi phí' phổ biến nhất trên AWS — Elastic IP không tự động miễn phí khi instance dừng, và nhiều kỹ sư mất vài tháng mới nhận ra.
TL;DR — Tóm Tắt Nhanh
| Trạng thái | Elastic IP có bị tính phí không? | Hành động cần làm |
|---|---|---|
| Instance đang running, EIP đã gắn | Miễn phí | Không cần làm gì |
| Instance đã stopped, EIP vẫn gắn | Có — bị tính phí theo giờ | Release EIP nếu không dùng nữa |
| EIP không gắn với bất kỳ resource nào | Có — bị tính phí theo giờ | Release EIP |
| EIP đã Released | Miễn phí hoàn toàn | Xong |
Elastic IP Tính Phí Như Thế Nào?
AWS cung cấp Elastic IP miễn phí với một điều kiện duy nhất: địa chỉ đó phải đang được gắn vào một EC2 instance đang chạy (running). Ngay khi instance bị stop hoặc EIP bị tách ra mà chưa release, AWS bắt đầu tính phí theo giờ — lý do là AWS muốn tránh tình trạng người dùng 'gom' địa chỉ IPv4 công khai mà không sử dụng, vì IPv4 là tài nguyên có giới hạn toàn cầu.
Hãy hình dung Elastic IP như một chỗ đậu xe thuê theo giờ. Khi xe bạn đang đậu (instance running), bạn không mất thêm phí. Nhưng nếu xe bạn lái đi (instance stopped) mà vẫn giữ chỗ đó, bạn vẫn phải trả tiền chỗ đậu — dù xe không ở đó.
Kể từ tháng 2 năm 2024, AWS đã thay đổi chính sách: tất cả các địa chỉ IPv4 công khai đều bị tính phí, bao gồm cả Public IPv4 tự động gán cho instance (không chỉ Elastic IP). Tuy nhiên, bài viết này tập trung vào Elastic IP — loại địa chỉ bạn chủ động cấp phát và quản lý.
- Instance Running + EIP gắn: Trạng thái bình thường, miễn phí.
- Instance Stopped + EIP vẫn gắn: AWS bắt đầu tính phí EIP theo giờ ngay lập tức.
- EIP không gắn (unassociated): Cũng bị tính phí — trạng thái này nguy hiểm nhất vì dễ bị bỏ quên.
- EIP Released: Địa chỉ trả lại pool của AWS, không còn phí.
Disassociate vs. Release — Khác Nhau Ở Điểm Nào?
Đây là chỗ nhiều người nhầm lẫn nhất. Hai thao tác này trông giống nhau trên console nhưng có hậu quả hoàn toàn khác nhau về chi phí và khả năng phục hồi.
Disassociate (Tách liên kết): Gỡ EIP khỏi instance nhưng vẫn giữ địa chỉ IP trong tài khoản của bạn. Sau bước này, EIP ở trạng thái 'unassociated' và vẫn bị tính phí. Dùng Disassociate khi bạn muốn chuyển EIP sang instance khác mà không mất địa chỉ IP đó.
Release (Giải phóng): Trả địa chỉ IP về pool của AWS. Sau bước này, địa chỉ IP đó biến mất khỏi tài khoản bạn và không còn phí. Nếu sau này bạn cần IP tĩnh, bạn sẽ nhận được một địa chỉ khác — không thể lấy lại địa chỉ cũ.
EIP vẫn gắn] --> B{Bạn muốn làm gì?} B --> C[Chuyển EIP sang
instance khác] B --> D[Không dùng EIP nữa] C --> E[Disassociate] E --> F[Associate với
instance mới] F --> G[✅ Miễn phí
instance đang running] D --> H[Disassociate] H --> I[Release] I --> J[✅ Dừng hoàn toàn phí] E --> K[⚠️ Nếu chỉ Disassociate
mà không làm gì thêm] K --> L[💸 Vẫn bị tính phí
EIP unassociated]
- Disassociate đơn thuần không dừng phí — EIP chỉ chuyển sang trạng thái unassociated và vẫn bị tính tiền.
- Release mới thực sự dừng phí hoàn toàn.
- Nếu cần giữ IP để dùng lại sau, bạn phải chấp nhận trả phí trong thời gian đó.
Cách Dừng Phí Elastic IP — Từng Bước Cụ Thể
Bước 1: Xác định các EIP đang bị tính phí trong tài khoản
Trước khi làm gì, cần biết mình đang có bao nhiêu EIP và trạng thái của chúng. EIP ở trạng thái unassociated hoặc gắn với instance đang stopped đều là nguồn phí tiềm ẩn.
aws ec2 describe-addresses \
--query 'Addresses[*].{AllocationId:AllocationId,PublicIp:PublicIp,InstanceId:InstanceId,AssociationId:AssociationId}' \
--output table \
--region us-east-1
Cột InstanceId trống nghĩa là EIP đang ở trạng thái unassociated — đang bị tính phí ngay lúc này. Nếu có InstanceId nhưng instance đó đang stopped, kiểm tra thêm bước dưới.
Bước 2: Kiểm tra trạng thái instance đang gắn với EIP
Bước này xác nhận instance có đang chạy không — nếu stopped, EIP đang tốn tiền vô ích.
aws ec2 describe-instances \
--instance-ids i-0123456789abcdef0 \
--query 'Reservations[*].Instances[*].{InstanceId:InstanceId,State:State.Name}' \
--output table \
--region us-east-1
Bước 3: Disassociate EIP khỏi instance (nếu instance đang stopped)
Nếu instance đang stopped và bạn quyết định release EIP, cần disassociate trước. Lưu ý: nếu instance đang running, bạn có thể release trực tiếp mà không cần disassociate thủ công — AWS sẽ tự xử lý. Nhưng với instance stopped, thao tác tường minh hơn.
aws ec2 disassociate-address \
--association-id eipassoc-0123456789abcdef0 \
--region us-east-1
Lấy association-id từ kết quả của bước 1 (cột AssociationId).
Bước 4: Release EIP để dừng hoàn toàn phí
Đây là bước quan trọng nhất. Sau khi release, địa chỉ IP này không còn thuộc tài khoản bạn nữa.
aws ec2 release-address \
--allocation-id eipalloc-0123456789abcdef0 \
--region us-east-1
Lấy allocation-id từ kết quả của bước 1 (cột AllocationId).
Bước 5: Xác nhận không còn EIP nào bị tính phí
Chạy lại lệnh describe-addresses để đảm bảo không còn EIP unassociated nào sót lại.
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==`null`].{AllocationId:AllocationId,PublicIp:PublicIp}' \
--output table \
--region us-east-1
Nếu output trống, bạn đã sạch phí EIP.
CLI examples omitted for steps không có — tất cả 5 bước đều có CLI đầy đủ.
Trường Hợp Thực Tế: Sai Lầm Phổ Biến Nhất
Một kịch bản hay gặp: kỹ sư tạo EC2 instance cho môi trường dev, gắn EIP để có IP cố định, sau đó stop instance vào cuối ngày làm việc. Sau 2 tuần, hóa đơn tăng bất thường. Nhìn vào Cost Explorer thấy dòng 'EC2-EIP IdleAddress' — đó là dấu hiệu EIP đang ở trạng thái idle (không gắn với running instance).
Phản ứng đầu tiên thường là vào console, nhấn 'Disassociate', rồi nghĩ xong. Nhưng Disassociate chỉ tách EIP khỏi instance — không dừng phí. EIP lúc này chuyển sang unassociated và tiếp tục tính tiền. Phải nhấn thêm 'Release' mới thực sự dừng.
Nguyên nhân gốc rễ không phải là thiếu kiến thức về EIP — mà là UI console không làm rõ rằng Disassociate và Release là hai bước riêng biệt với hậu quả tài chính khác nhau. Nhiều người đọc 'Disassociate' và hiểu là 'đã xong'.
IAM Policy Tối Thiểu Để Quản Lý EIP
Nếu bạn cần cấp quyền cho một role hoặc user để thực hiện các thao tác trên, đây là policy tối thiểu theo nguyên tắc least privilege:
🔽 Xem IAM Policy mẫu
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DescribeEIP",
"Effect": "Allow",
"Action": [
"ec2:DescribeAddresses",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Sid": "ManageEIP",
"Effect": "Allow",
"Action": [
"ec2:DisassociateAddress",
"ec2:ReleaseAddress"
],
"Resource": "*"
}
]
}
Lưu ý: ec2:DescribeAddresses và ec2:DescribeInstances yêu cầu "Resource": "*" vì các Describe action không hỗ trợ resource-level restriction theo AWS Service Authorization Reference.
Ngăn Chặn Phí EIP Trong Tương Lai
Dùng AWS Cost Anomaly Detection
Thiết lập Cost Anomaly Detection cho service EC2 để nhận cảnh báo khi chi phí tăng bất thường. EIP idle thường tạo ra spike nhỏ nhưng đều đặn — loại anomaly này dễ bị bỏ qua nếu không có alert.
Tạo AWS Config Rule để phát hiện EIP unassociated
AWS Config có managed rule eip-attached — rule này đánh dấu bất kỳ EIP nào không được gắn với running instance là non-compliant. Kết hợp với SNS notification, bạn sẽ nhận cảnh báo ngay khi có EIP bị bỏ lơ.
aws configservice put-config-rule \
--config-rule '{
"ConfigRuleName": "eip-attached",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "EIP_ATTACHED"
}
}' \
--region us-east-1
Cân nhắc dùng Public IPv4 tự động thay vì EIP
Với môi trường dev/test, nếu không cần IP cố định, hãy dùng Public IPv4 tự động gán của instance thay vì EIP. Khi instance stop rồi start lại, IP sẽ thay đổi — nhưng với môi trường dev, điều đó thường chấp nhận được và tránh được phí EIP idle.
Dừng Phí Elastic IP — Kết Luận
Để dừng phí Elastic IP hoàn toàn, bạn phải Release địa chỉ đó — không phải chỉ Disassociate. Disassociate chỉ tách EIP khỏi instance nhưng vẫn giữ địa chỉ trong tài khoản và tiếp tục tính phí. Release mới thực sự trả địa chỉ về AWS và dừng hoàn toàn mọi khoản phí liên quan.
Nếu bạn cần giữ IP tĩnh cho sau này, bạn phải chấp nhận trả phí trong thời gian đó hoặc tìm giải pháp thay thế như Route 53 với DNS failover. Kiểm tra định kỳ các EIP trong tài khoản bằng describe-addresses hoặc thiết lập AWS Config rule eip-attached để tự động phát hiện EIP bị bỏ lơ.
Tham khảo thêm: AWS Elastic IP Addresses Documentation và AWS Config Rule: eip-attached.
Glossary — Thuật Ngữ Chính
| Thuật ngữ | Giải thích |
|---|---|
| Elastic IP (EIP) | Địa chỉ IPv4 tĩnh công khai do bạn cấp phát và quản lý trong tài khoản AWS. |
| Disassociate | Tách EIP khỏi instance hoặc network interface, nhưng vẫn giữ EIP trong tài khoản. |
| Release | Trả EIP về pool của AWS, xóa khỏi tài khoản, dừng hoàn toàn phí. |
| Allocation ID | Định danh duy nhất của EIP trong tài khoản AWS (dạng eipalloc-xxx). |
| Association ID | Định danh của liên kết giữa EIP và một instance/network interface cụ thể (dạng eipassoc-xxx). |
Nhận xét
Đăng nhận xét