☁️ AWS Series #03 — EC2: Tạo và Quản lý Virtual Server trên AWS
📺 Nguồn: AWS Zero to Hero — Day 3: AWS EC2
📌 Series: AWS Zero to Hero — 30 bài từ cơ bản đến thực chiến
🎯 Mục Tiêu Bài Viết
Hiểu và thực hành AWS EC2 (Elastic Cloud Compute) — service phổ biến nhất của AWS, là nền tảng của hầu hết mọi hệ thống trên cloud.
EC2 = Elastic Cloud Compute = Máy chủ ảo trên AWS
Khi tạo EC2 instance, bạn nhận được:
CPU + RAM + Disk + Operating System
EC2 là thứ đầu tiên bạn cần thành thạo. Mọi hệ thống cloud đều bắt đầu từ đây.
📋 Tổng Quan Bài Học
AWS EC2
│
├── 1. EC2 là gì & tại sao cần dùng
├── 2. Các loại Instance Type
├── 3. Region & Availability Zone
├── 4. Tạo EC2 Instance
├── 5. Key Pair & SSH
├── 6. Public IP vs Private IP
├── 7. Security Group & Inbound Rule
└── 8. Demo: Deploy Jenkins lên EC2
💡 1. EC2 Là Gì & Tại Sao Cần Dùng?
EC2 = Elastic Cloud Compute
AWS EC2
│
├── Elastic → Scale up/down tài nguyên theo nhu cầu
├── Cloud → Chạy trên hạ tầng AWS, không cần tự mua server
└── Compute → CPU + RAM + Disk + OS = Virtual Server
So sánh trước và sau khi có EC2:
Không dùng EC2 (On-premises) │ Dùng EC2
──────────────────────────────────┼───────────────────────────────
Mua server vật lý │ AWS quản lý phần hạ tầng
Cài hypervisor, tạo VM │ Bạn chỉ cần tạo instance
Quản lý update/security │ Cài app lên instance
Monitor server sống/chết │ Deploy & access từ internet
Xử lý downtime thủ công │ Pay-as-you-go
Tốn nhân sự vận hành │ Stop instance khi không dùng
Lợi ích cụ thể:
| Lợi ích | Giải thích |
|---|---|
| Giảm maintenance | AWS lo phần hardware, bạn chỉ lo phần app |
| Tiết kiệm chi phí | Dùng bao nhiêu trả bấy nhiêu, stop khi không dùng |
| Linh hoạt | Chọn OS, region, instance type, storage theo nhu cầu |
| Scale dễ dàng | Tăng/giảm tài nguyên khi cần mà không cần mua phần cứng mới |
🖥️ 2. Các Loại EC2 Instance Type
AWS chia EC2 instance thành 5 nhóm theo mục đích sử dụng:
EC2 Instance Types
│
├── General Purpose
│ ├── Cân bằng CPU, RAM, network
│ ├── Phù hợp: web app, demo, học tập
│ └── Ví dụ: t2.micro, t3.medium
│
├── Compute Optimized
│ ├── Mạnh về CPU
│ ├── Phù hợp: game server, ML inference
│ └── Ví dụ: c5.large, c6g.xlarge
│
├── Memory Optimized
│ ├── Mạnh về RAM
│ ├── Phù hợp: big data, real-time analytics
│ └── Ví dụ: r5.large, x1e.xlarge
│
├── Storage Optimized
│ ├── Mạnh về disk I/O
│ ├── Phù hợp: database, data warehouse
│ └── Ví dụ: i3.large, d2.xlarge
│
└── Accelerated Computing
├── Dùng GPU/hardware accelerator
├── Phù hợp: AI/ML training, video processing
└── Ví dụ: p3.2xlarge, g4dn.xlarge
Chọn instance type nào?
App của bạn cần gì?
│
├── App web bình thường / học tập → General Purpose (t2.micro)
├── CPU mạnh (game, ML) → Compute Optimized
├── RAM lớn (big data, analytics) → Memory Optimized
├── Đọc/ghi dữ liệu nhiều (DB) → Storage Optimized
└── GPU (AI, video rendering) → Accelerated Computing
💡 Khi học AWS: Luôn chọn t2.micro — Free Tier eligible, đủ dùng cho mọi bài tập thực hành.
🌍 3. Region & Availability Zone
Region — Khu Vực Địa Lý
Region là khu vực địa lý nơi AWS đặt data center. Bạn chọn region dựa trên:
Chọn Region dựa trên:
│
├── Latency → User ở đâu thì deploy gần đó để giảm độ trễ
├── Compliance → Dữ liệu nhạy cảm có thể bị yêu cầu nằm trong khu vực cụ thể
├── Cost → Mỗi region có giá khác nhau
└── Availability → Region có nhiều AZ giúp thiết kế hệ thống chịu lỗi tốt hơn
Ví dụ: Ngân hàng ở Đức có thể yêu cầu dữ liệu chỉ lưu tại eu-central-1 (Frankfurt).
Availability Zone — Tầng Cao Hơn Của Độ Tin Cậy
AWS Global Infrastructure
│
├── Region: US East (us-east-1)
│ ├── AZ: us-east-1a
│ ├── AZ: us-east-1b
│ └── AZ: us-east-1c
│
├── Region: Singapore (ap-southeast-1)
│ ├── AZ: ap-southeast-1a
│ ├── AZ: ap-southeast-1b
│ └── AZ: ap-southeast-1c
│
└── Region: Frankfurt (eu-central-1)
├── AZ: eu-central-1a
├── AZ: eu-central-1b
└── AZ: eu-central-1c
Mục đích của AZ: Nếu một zone gặp sự cố (điện, mạng, thiên tai), app vẫn chạy bình thường ở zone khác → High Availability.
🛠️ 4. Tạo EC2 Instance — Từng Bước
Các bước tạo EC2 Instance:
│
├── 1. Login AWS Console → Search "EC2"
│
├── 2. Click "Launch Instance"
│
├── 3. Đặt tên instance
│ └── Ví dụ: my-first-instance
│
├── 4. Chọn Operating System (AMI)
│ ├── Ubuntu ← Phổ biến nhất
│ ├── Amazon Linux
│ ├── Red Hat
│ ├── Debian
│ └── Windows
│
├── 5. Chọn Instance Type
│ └── t2.micro (1 CPU, 1GB RAM) — Free Tier eligible ✅
│
├── 6. Tạo Key Pair
│ ├── Type: RSA
│ ├── Format: .pem
│ └── Tải về máy và giữ cẩn thận
│
├── 7. Network Settings — giữ mặc định khi học
│
├── 8. Storage — mặc định 8GB
│
└── 9. Click "Launch Instance" → Chờ khoảng 1-2 phút
🔑 5. Key Pair & SSH Vào EC2
AWS không cho đăng nhập bằng password. Thay vào đó dùng Key Pair.
Key Pair
│
├── Public Key
│ └── Tự động được gắn vào EC2 instance khi tạo
│
└── Private Key (.pem file)
├── Bạn tải về máy khi tạo instance
├── Dùng để SSH vào EC2
└── ⚠️ Không được share — mất file này = mất quyền SSH
Cách SSH vào EC2 (Mac/Linux):
# Bước 1: Phân quyền đúng cho file .pem
chmod 600 aws-login.pem
# Bước 2: SSH vào EC2
ssh -i aws-login.pem ubuntu@<public-ip>
⚠️ Nếu bỏ qua
chmod 600, SSH sẽ báo lỗi “Permissions too open” và từ chối kết nối.
Luồng kết nối từ laptop đến EC2:
Your Laptop
│
├── Private Key: aws-login.pem
└── SSH command: ssh -i aws-login.pem ubuntu@public-ip
│
↓
Internet
│
↓
AWS EC2 Instance
├── Public IP
├── Ubuntu OS
└── Public key đã gắn sẵn → xác thực thành công
🌐 6. Public IP vs Private IP
EC2 IP Address
│
├── Public IP
│ ├── Dùng để truy cập EC2 từ internet
│ ├── Laptop SSH vào EC2 qua Public IP
│ └── Browser truy cập app cũng qua Public IP
│
└── Private IP
├── Dùng trong AWS internal network (VPC)
├── EC2 giao tiếp với EC2 khác trong cùng VPC
└── Không dùng trực tiếp từ internet bên ngoài
🔒 7. Security Group & Inbound Rule
Security Group hoạt động như firewall cho EC2, kiểm soát traffic đi vào và đi ra.
Security Group
│
├── Inbound Rules → Traffic từ bên ngoài vào EC2
│ ├── Ví dụ: SSH port 22 (để connect từ laptop)
│ └── Ví dụ: TCP port 8080 (để truy cập Jenkins)
│
└── Outbound Rules → Traffic từ EC2 đi ra ngoài
└── Ví dụ: EC2 gọi internet để download package
Luồng request vào EC2:
Browser trên máy bạn
│
└── http://<public-ip>:8080
│
↓
Internet
│
↓
AWS Security Group
│
├── Port 8080 được cho phép? ──→ Có → request đi tiếp
│ └──→ Không → timeout, không vào được
│
↓
EC2 Instance
└── App đang chạy trên port 8080 → trả response về browser
Mở inbound rule cho port 8080:
Edit Inbound Rules → Add Rule
├── Type: Custom TCP
├── Port: 8080
├── Source: Anywhere IPv4 (0.0.0.0/0)
└── Save Rule
🚀 8. Demo Thực Hành — Deploy Jenkins Lên EC2
Jenkins là CI/CD tool phổ biến, thường được deploy trên EC2. Đây là bài thực hành điển hình nhất.
Workflow triển khai Jenkins lên EC2:
│
├── 1. Tạo EC2 Instance
│ ├── OS: Ubuntu
│ ├── Type: t2.micro
│ └── Tạo key pair, launch instance
│
├── 2. SSH vào EC2
│ ├── chmod 600 key.pem
│ └── ssh -i key.pem ubuntu@<public-ip>
│
├── 3. Chuẩn bị server
│ ├── sudo apt update
│ └── sudo apt install openjdk-11-jdk -y
│
├── 4. Kiểm tra Java
│ └── java --version
│
├── 5. Cài Jenkins (theo official docs)
│ └── systemctl status jenkins
│ → Active: running ✅
│
├── 6. Jenkins chạy mặc định ở port 8080
│ └── Cần mở port này trong Security Group
│
├── 7. Mở inbound rule port 8080
│ └── Security Group → Edit Inbound Rules → Add TCP 8080
│
└── 8. Truy cập Jenkins từ browser
└── http://<public-ip>:8080
⚠️ 9. Free Tier — Những Điều Cần Biết
AWS Free Tier cho EC2
│
├── Chỉ áp dụng một số instance type
│ └── t2.micro là loại phổ biến nhất được Free Tier
│
├── Giới hạn 750 giờ/tháng
│ ├── 1 instance chạy cả tháng ≈ 720 giờ → OK
│ └── Chạy nhiều instance cùng lúc → dễ vượt giới hạn
│
└── Best Practice khi học:
├── Học xong → Stop instance (dừng tính phí compute)
├── Không cần nữa → Terminate instance
└── Kiểm tra billing thường xuyên
✅ 10. EC2 Best Practices
EC2 Best Practices
│
├── ✅ Chọn Free Tier eligible khi học (t2.micro)
├── ✅ Stop/Terminate instance khi không dùng
├── ✅ Không share private key .pem
├── ✅ Luôn chạy chmod 600 cho file .pem
├── ✅ Chỉ mở port thực sự cần thiết
├── ✅ Kiểm tra đúng region trước khi tạo resource
└── ⚠️ Production: không để Source = Anywhere cho các port nhạy cảm
📝 Bảng Thuật Ngữ Nhanh
| Thuật ngữ | Ý nghĩa |
|---|---|
| EC2 | Elastic Cloud Compute — máy chủ ảo trên AWS |
| Instance | Một EC2 server đang chạy |
| AMI | Amazon Machine Image — template OS để tạo instance |
| Instance Type | Cấu hình server (CPU/RAM/Storage) |
| Region | Khu vực địa lý AWS đặt data center |
| Availability Zone | Data center/cụm data center trong một region |
| Key Pair | Cặp key dùng để SSH vào EC2 |
| Public IP | IP để truy cập EC2 từ internet |
| Private IP | IP dùng giao tiếp nội bộ trong AWS |
| Security Group | Firewall cho EC2 — kiểm soát traffic vào/ra |
| Inbound Rule | Rule cho traffic đi vào EC2 |
| Outbound Rule | Rule cho traffic đi ra từ EC2 |
💡 Điểm Quan Trọng Nhất Của Bài
EC2 là máy chủ ảo trên AWS. Bạn có thể tạo server, chọn hệ điều hành, SSH vào server, cài application và mở Security Group port để người dùng bên ngoài truy cập.
Luồng cơ bản nhất của cloud deployment:
Create EC2
↓
SSH vào EC2
↓
Install app
↓
Open Security Group port
↓
Access app from browser
Đây là nền tảng của mọi hệ thống cloud:
Local machine → AWS EC2 → Application running → Public access
➡️ Bài Tiếp Theo
Bài #04 sẽ đi vào: AWS VPC — Mạng riêng ảo, cách tổ chức và bảo vệ hạ tầng trên AWS.
🌐 Đã có server rồi — giờ là lúc học cách tổ chức mạng để hệ thống vừa an toàn vừa hiệu quả.