Networking
Elastic Network Interface (ENI)
Elastic Network Interface, Private/Public IPs, Multiple ENIs, Failover
ENI là gì?
ENI (Elastic Network Interface) = "Card mạng ảo" gắn vào EC2 instance.
Card mạng ảo (Virtual Network Card) là gì?
| Card mạng vật lý (Laptop) | Card mạng ảo (ENI) | |
|---|---|---|
| Là gì | Phần cứng thật (chip WiFi, cổng Ethernet) | Phần mềm mô phỏng card mạng |
| Ở đâu | Laptop/Server vật lý | EC2/VM trên cloud |
| MAC | In sẵn trên chip | AWS generate |
| IP | Router cấp | AWS/VPC cấp |
| Di chuyển | Tháo ra cắm máy khác | Detach rồi attach EC2 khác |
Tại sao cần ENI?
Không có ENI = Không kết nối được gì cả!
💡 Tóm lại: ENI cho phép EC2 có IP và kết nối mạng. Giống như laptop cần card WiFi để lên mạng, EC2 cần ENI để kết nối trong VPC!
💡 Quan trọng: Mọi thứ về network (IP, Security Group, MAC) đều gắn vào ENI, không phải EC2 trực tiếp!
Thuộc tính của ENI
| Thuộc tính | Mô tả |
|---|---|
| Private IP(s) | 1 primary + nhiều secondary IPs (bắt buộc có) |
| Public IP | Auto-assigned hoặc Elastic IP (optional) |
| Elastic IP | Static public IP gắn vào ENI |
| MAC Address | Địa chỉ MAC duy nhất |
| Security Groups | 1 hoặc nhiều SG gắn vào ENI |
| Subnet | ENI thuộc về 1 subnet cụ thể |
| Source/Dest Check | Enable/Disable (disable cho NAT instance) |
Private IP và Public IP
Private IP: Luôn có (bắt buộc)
Public IP: Tùy chọn (optional)
| Loại | Mô tả | Khi nào có |
|---|---|---|
| Auto-assigned Public IP | AWS tự gán, thay đổi khi restart | Subnet có auto-assign = ON |
| Elastic IP | Static, không thay đổi | Bạn tự gán vào ENI |
⚠️ Lưu ý: 1 ENI chỉ có thể có 1 Public IP hoặc 1 Elastic IP, nhưng có thể có nhiều Private IPs.
Nhiều ENI trên 1 EC2
1 EC2 có thể gắn nhiều ENIs, số lượng tùy thuộc instance type.
Giới hạn theo Instance Type
| Instance Type | Max ENIs | Max Private IPs/ENI |
|---|---|---|
| t2.micro | 2 | 2 |
| t3.medium | 3 | 6 |
| m5.large | 3 | 10 |
| m5.xlarge | 4 | 15 |
| m5.4xlarge | 8 | 30 |
| c5.18xlarge | 15 | 50 |
Cách tạo và attach ENI
Qua AWS Console
Qua AWS CLI
Lưu ý quan trọng
| Lưu ý | Chi tiết |
|---|---|
| Cùng AZ | ENI và EC2 phải ở cùng Availability Zone |
| Device Index | eth0 = 0 (primary), eth1 = 1, eth2 = 2... |
| Hot-attach | Có thể attach ENI khi EC2 đang chạy |
| Primary ENI | eth0 không thể detach, chỉ secondary mới được |
| OS config | Có thể cần config thêm routing trong OS |
Use Cases
1. Dual-homed Instance
2. Management Network
3. Failover - Move ENI
4. Network/Security Appliance
Giới hạn
| Giới hạn | Giá trị |
|---|---|
| Max ENIs per instance | Tùy instance type (2-15) |
| Max IPs per ENI | Tùy instance type (2-50) |
| ENI và EC2 cùng AZ | Bắt buộc |
| Primary ENI (eth0) | Không thể detach |
| Security Groups per ENI | Max 5 |
ENI dùng cho service nào?
Quy tắc đơn giản
💡 Trong VPC + cần IP = cần ENI
ENI là cầu nối giữa AWS resource và network (VPC). Không có ENI = Không có IP trong VPC = Không kết nối được!
Phân loại Services
Chi tiết theo Service
| Service | Loại | ENI | Ghi chú |
|---|---|---|---|
| EC2 | VPC-based | ✅ Bạn quản lý | Có thể tạo/attach/detach ENI |
| RDS | VPC-based | ✅ AWS tạo ngầm | ENI trong DB Subnet Group |
| Lambda (VPC) | VPC-based | ✅ AWS tạo ngầm | ENI để access VPC resources |
| ECS (awsvpc) | VPC-based | ✅ AWS tạo ngầm | Mỗi task có ENI riêng |
| ALB/NLB | VPC-based | ✅ AWS tạo ngầm | ENI trong mỗi subnet |
| NAT Gateway | VPC-based | ✅ AWS tạo ngầm | 1 ENI với Elastic IP |
| VPC Endpoint (Interface) | VPC-based | ✅ AWS tạo ngầm | ENI trong subnet bạn chọn |
| S3 | Public | ❌ | Connect qua URL/VPC Endpoint |
| DynamoDB | Public | ❌ | Connect qua URL/VPC Endpoint |
| SQS/SNS | Public | ❌ | Connect qua URL |
| Lambda (không VPC) | Public | ❌ | Chạy trong AWS network |
Ví dụ kết nối
Liên kết
- EC2 - Elastic Compute Cloud
- VPC - Virtual Private Cloud
- Security Groups - Firewall rules
Nguồn: AWS ENI Documentation