EC2 Fundamentals
EC2 là dịch vụ được hỏi nhiều nhất trong đề SAA. Hai phần nặng nhất chương này là Purchasing Options (câu tối ưu chi phí) và Security Groups (câu troubleshooting mạng) — hai chủ đề quay lại liên tục ở Section 6, 7, 8.
EC2 là gì & các lựa chọn cấu hình
EC2 = Elastic Compute Cloud — dịch vụ thuê máy chủ ảo, thuộc mô hình IaaS (Infrastructure as a Service). Đây là dịch vụ phổ biến nhất của AWS và là nền của gần như mọi kiến trúc bạn sẽ học.
EC2 không đứng một mình. Bốn thứ thường đi cùng nhau tạo thành bộ khung:
- EC2 — thuê máy ảo
- EBS — ổ đĩa ảo gắn vào máy để lưu dữ liệu
- ELB — phân phối tải giữa nhiều máy
- ASG — tự động tăng/giảm số máy theo nhu cầu
Bảy thứ bạn cấu hình khi tạo một EC2 instance
| Thành phần | Chọn gì |
|---|---|
| Operating System / AMI | Linux (phổ biến nhất), Windows, hoặc macOS |
| CPU | Bao nhiêu vCPU, tốc độ ra sao |
| RAM | Dung lượng bộ nhớ |
| Storage | Gắn qua mạng (EBS, EFS) hoặc gắn cứng vào máy vật lý (EC2 Instance Store) |
| Network card | Tốc độ card mạng, có gán Public IP hay không |
| Firewall rules | Security Group — mục 5.4 |
| Bootstrap script | EC2 User Data — mục 5.2 |
t2.micro: 1 vCPU, 1 GiB RAM, được miễn phí 750 giờ/tháng trong 12 tháng đầu. Đề không hỏi con số này, nhưng nó là lý do mọi bài lab đều dùng t2.micro.
EC2 User Data
User Data là script chạy tự động khi instance khởi động lần đầu tiên, dùng để tự động hóa mọi việc setup: cập nhật hệ điều hành, cài phần mềm, tải file về, khởi động dịch vụ.
Ba tính chất phải nhớ
- Chỉ chạy MỘT lần — ở lần boot đầu tiên. Restart instance sau đó sẽ không chạy lại (trừ khi cấu hình đặc biệt).
- Chạy với quyền root — nên không cần
sudotrong script (dù viếtsudocũng không sao). - Script càng dài, boot càng lâu — vì instance chỉ sẵn sàng sau khi chạy xong.
#!/bin/bash
# cài web server và tạo trang chủ hiển thị hostname
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello from $(hostname -f)</h1>" > /var/www/html/index.html
Thấy "instance cần tự cài phần mềm khi khởi động", "bootstrap", "chạy script lúc launch" → EC2 User Data. Ở Section 8 nó quay lại trong Launch Template của Auto Scaling Group: mọi instance mới sinh ra đều tự cấu hình bằng User Data.
User Data không được mã hóa và ai có quyền mô tả instance đều đọc được. Vì vậy không bao giờ đặt mật khẩu hay access key vào đây — dùng IAM Role (mục 5.6) hoặc SSM Parameter Store (Section 26).
Team deploy web PHP: User Data cài nginx và php-fpm, kéo code mới nhất từ S3, rồi khởi động service. Nhờ vậy khi Auto Scaling sinh thêm 5 máy lúc 8h sáng, mỗi máy tự sẵn sàng nhận traffic sau khoảng 90 giây mà không ai phải SSH vào. Nếu script này dài tới mức mất 5 phút thì lại thành vấn đề — lúc đó nên đóng gói sẵn vào AMI (Section 7) và chỉ để User Data làm phần cấu hình riêng.
Instance Types & 5 nhóm
Đọc tên instance
AWS có hàng trăm loại instance nhưng tên đều theo một quy tắc. Ví dụ m5.2xlarge:
| Phần | Ý nghĩa |
|---|---|
m | Instance class — nhóm công dụng (m = general purpose) |
5 | Generation — thế hệ phần cứng. Số càng lớn càng mới, thường rẻ hơn và mạnh hơn. |
2xlarge | Size — kích cỡ trong nhóm. Lên một bậc thì vCPU và RAM thường gấp đôi. |
Thang size: nano → micro → small → medium → large → xlarge → 2xlarge → 4xlarge → 8xlarge → …
Năm nhóm instance
| Nhóm | Chữ cái | Tối ưu cho | Use case điển hình |
|---|---|---|---|
| General Purpose | t, m | Cân bằng compute – memory – networking | Web server, code repository, ứng dụng đa dạng nhỏ |
| Compute Optimized | c | CPU mạnh | Batch processing, media transcoding, HPC, mô phỏng khoa học, game server, machine learning inference |
| Memory Optimized | r, x, z | RAM lớn | Database quan hệ / NoSQL, cache phân tán (ElastiCache), in-memory database cho BI, xử lý dữ liệu lớn thời gian thực |
| Storage Optimized | i, d, h | Đọc/ghi tuần tự cực nhanh trên đĩa cục bộ | OLTP tần suất cao, data warehouse, hệ thống file phân tán, cache cho in-memory DB |
| Accelerated Computing | p, g, inf | GPU / chip chuyên dụng | Huấn luyện machine learning, đồ họa, suy luận mô hình |
Compute → c. RAM → r. I/O (storage) → i. Graphics → g. Còn m và t là "mọi thứ vừa phải". Nhớ được bốn chữ này là giải được hầu hết câu hỏi chọn instance.
"Ứng dụng phân tích dữ liệu cần giữ toàn bộ dataset 400 GB trong bộ nhớ." → nhóm Memory Optimized (r).
"Hệ thống encode video hàng loạt, CPU chạy 100% liên tục." → Compute Optimized (c).
Nhóm t (t2, t3, t4g) là burstable: chạy ở mức nền thấp và tích lũy CPU credits khi rảnh, tiêu credit khi cần bùng lên. Hết credit thì hiệu năng tụt hẳn — nguyên nhân kinh điển của "ứng dụng chậm dần theo thời gian". Chi tiết ở Section 6, nhưng biết trước sẽ đỡ bất ngờ.
Cùng một công ty thường dùng bốn nhóm khác nhau cho bốn việc: web server t3.medium (tải nhẹ, bùng theo giờ), job encode video c6i (CPU chạy 100% liên tục), Redis cache r6g (giữ 200 GB trong RAM), và cụm Elasticsearch chứa log i4i (ghi đọc đĩa cục bộ liên tục). Chọn sai nhóm không làm hệ thống chết, nhưng khiến bạn trả gấp đôi cho cùng một mức hiệu năng.
Security Groups & Classic Ports
Security Group là tường lửa ảo bao quanh EC2 instance, và là nền tảng an ninh mạng cơ bản nhất trong AWS.
Bảy tính chất cần thuộc lòng
- Chỉ chứa rule ALLOW — không có rule deny. Cái gì không được cho phép thì tự động bị chặn.
- Rule có thể tham chiếu dải IP (IPv4/IPv6) hoặc một Security Group khác.
- Kiểm soát cả inbound và outbound.
- Mặc định: inbound bị chặn hết, outbound được phép hết.
- Một SG gắn được cho nhiều instance; một instance gắn được nhiều SG.
- SG bị khóa theo cặp region + VPC — sang region hay VPC khác phải tạo lại.
- SG là stateful: traffic đi ra được cho phép thì chiều hồi đáp tự động được phép, không cần rule riêng.
Thay vì mở port cho một dải IP, bạn cho phép chính Security Group của bên gọi. Ví dụ: SG của database chỉ cho phép port 3306 từ sg-web-servers. Khi Auto Scaling sinh thêm web server, chúng tự được phép — không phải cập nhật IP thủ công. Đề rất thích phương án này cho các câu ELB → EC2 → RDS.
Troubleshooting — câu hỏi kinh điển
| Hiện tượng | Nguyên nhân |
|---|---|
| Timeout (treo, không phản hồi) | Lỗi Security Group — gói tin bị chặn từ ngoài, instance thậm chí không thấy nó |
| Connection refused | Traffic đã qua được SG. Vấn đề nằm ở ứng dụng: chưa chạy, sai port, hoặc bị lỗi |
Phân biệt hai lỗi trên là câu hỏi ra thi rất thường xuyên. Timeout → Security Group. Refused → ứng dụng. Nhớ ngược là mất điểm.
Classic ports — phải thuộc
| Port | Giao thức | Ghi chú |
|---|---|---|
| 22 | SSH | Đăng nhập Linux từ xa. Cũng là port của SFTP (truyền file qua SSH) |
| 21 | FTP | Upload file dạng cũ, không mã hóa |
| 80 | HTTP | Web không mã hóa |
| 443 | HTTPS | Web có mã hóa |
| 3389 | RDP | Remote Desktop — đăng nhập Windows từ xa |
Bổ sung hay gặp ở các chương sau: 3306 MySQL/Aurora, 5432 PostgreSQL, 1433 SQL Server, 6379 Redis, 11211 Memcached.
Tách riêng một Security Group chỉ dành cho SSH. Khi cần siết hay mở quyền truy cập quản trị, bạn chỉ sửa đúng SG đó thay vì đụng vào rule của ứng dụng.
Kiến trúc ba tầng điển hình: ALB mở port 443 cho 0.0.0.0/0; Security Group của web server chỉ mở port 80 từ sg-alb; Security Group của database chỉ mở 3306 từ sg-web. Không máy nào mở thẳng ra internet. Đêm deploy thêm 4 web server mới, chúng tự được phép gọi database vì cùng thuộc sg-web — không phải sửa rule nào.
SSH & EC2 Instance Connect
Bài giảng dành nhiều lecture cho phần này nhưng chủ yếu là thao tác theo từng hệ điều hành. Đề thi chỉ quan tâm vài ý.
| Cách kết nối | Dùng trên | Ghi chú |
|---|---|---|
| SSH | Mac, Linux, Windows 10 trở lên | Cần file khóa .pem, port 22 |
| PuTTY | Windows mọi phiên bản | Làm đúng việc như SSH, dùng file .ppk |
| EC2 Instance Connect | Mọi hệ điều hành | Chạy trong trình duyệt, không cần cài gì, không cần giữ khóa |
chmod 0400 my-key.pem # bắt buộc, nếu không SSH sẽ từ chối vì file quá "mở"
ssh -i my-key.pem ec2-user@<public-ip>
EC2 Instance Connect vẫn cần port 22 mở trong Security Group — nó chỉ đẩy một khóa SSH tạm thời vào instance rồi kết nối hộ bạn, chứ không đi đường vòng nào khác. Nhiều người tưởng dùng Instance Connect thì khỏi mở port 22.
Thời điểm bài giảng được quay, Instance Connect mới hỗ trợ Amazon Linux 2; hiện AWS đã mở rộng thêm nhiều AMI khác.
Connection timed out → Security Group chưa mở port 22 cho IP của bạn.
Permission denied (publickey) → sai file khóa hoặc sai username (Amazon Linux dùng ec2-user, Ubuntu dùng ubuntu).
Unprotected private key file → chưa chmod 0400.
EC2 Instance Roles
Nội dung nối thẳng từ Section 4, và là một trong những câu hỏi ra thi nhiều nhất toàn bộ kỳ thi.
Không bao giờ chạy aws configure trên EC2 và nhập access key. Bài giảng làm demo điều này rồi chỉ ra tại sao nó sai: access key nằm trong file ~/.aws/credentials, ai vào được máy là lấy được, và nếu tạo AMI từ máy đó thì key nhân bản ra mọi instance.
Tạo IAM Role với quyền cần thiết → gắn vào EC2 instance. CLI và SDK trên máy tự lấy credential tạm thời từ instance metadata, tự xoay vòng, không có secret nào nằm trên đĩa.
Kiểm tra nhanh instance đang dùng role nào:
aws sts get-caller-identity
# ARN trả về dạng .../assumed-role/<TenRole>/i-0123456789abcdef → đang dùng role, đúng bài
Purchasing Options — 7 loại
Đây là phần sinh ra nhiều câu hỏi nhất của chương, luôn dưới dạng "chọn phương án tối ưu chi phí cho tình huống sau".
| Loại | Giảm giá | Cam kết | Dùng khi |
|---|---|---|---|
| On-Demand | 0% (đắt nhất theo giờ) | Không | Workload ngắn, không đoán trước được, không được gián đoạn |
| Reserved Instance | tới ~72% | 1 hoặc 3 năm | Workload chạy đều đặn, ổn định (database) |
| Convertible RI | tới ~66% | 1 hoặc 3 năm | Như trên nhưng cần đổi loại instance/OS giữa chừng |
| Savings Plan | tới ~72% | Cam kết $/giờ, 1 hoặc 3 năm | Chi tiêu ổn định nhưng muốn linh hoạt về size/OS |
| Spot Instance | tới ~90% | Không | Workload chịu được gián đoạn (batch, phân tích, xử lý ảnh) |
| Dedicated Host | Đắt nhất | On-demand hoặc 1/3 năm | Tuân thủ pháp lý; license tính theo core/socket (BYOL) |
| Dedicated Instance | — | Không | Cần phần cứng không chia sẻ với tài khoản khác, nhưng không cần kiểm soát máy vật lý |
Ví von khách sạn — cách nhớ nhanh nhất
| Loại | Ví von |
|---|---|
| On-Demand | Đến là thuê, trả giá niêm yết, ở bao lâu tùy ý |
| Reserved | Đặt trước 1–3 năm, giá rẻ hẳn, nhưng bỏ không ở vẫn mất tiền |
| Savings Plan | Cam kết tiêu tối thiểu X đồng/giờ trong 1–3 năm, đổi phòng thoải mái |
| Spot | Phòng ế bán rẻ, nhưng khách trả giá cao hơn tới là bạn phải dọn đi |
| Dedicated Host | Thuê trọn cả tòa nhà, không ai khác được vào |
| Capacity Reservation | Giữ phòng sẵn, trả tiền kể cả không đến ở |
Reserved Instances — chi tiết ra thi
- Đặt trước theo thuộc tính cụ thể: loại instance, region, tenancy, hệ điều hành.
- Ba cách trả tiền: no upfront → partial upfront → all upfront, trả trước càng nhiều giảm càng sâu.
- Phạm vi regional (linh hoạt AZ) hoặc zonal (đặt kèm chỗ trống trong một AZ cụ thể).
- Không dùng nữa có thể bán lại trên Reserved Instance Marketplace.
- Convertible RI: đổi được loại instance, family, OS, tenancy — đổi lấy mức giảm thấp hơn.
Savings Plan vs Reserved Instance
| Reserved Instance | Savings Plan | |
|---|---|---|
| Cam kết theo | Loại instance cụ thể | Số tiền mỗi giờ |
| Linh hoạt | Thấp (trừ bản Convertible) | Cao: đổi size, OS, tenancy thoải mái trong cùng family + region |
| Vượt cam kết | Phần vượt tính giá On-Demand | Phần vượt tính giá On-Demand |
| Từ khóa đề | "steady state", "database chạy liên tục" | "cam kết chi tiêu", "linh hoạt về instance size" |
Dedicated Host vs Dedicated Instance
| Dedicated Host | Dedicated Instance | |
|---|---|---|
| Bạn được gì | Cả máy chủ vật lý, nhìn thấy socket/core | Instance chạy trên phần cứng không chia sẻ với tài khoản khác |
| Kiểm soát vị trí instance | Có | Không |
| Lý do chọn | License tính theo core/socket (BYOL), yêu cầu tuân thủ khắt khe | Chỉ cần không dùng chung phần cứng |
Đề nhắc "per-socket / per-core software license" hoặc "bring your own license" → Dedicated Host, gần như không có ngoại lệ.
Capacity Reservations
- Giữ sẵn chỗ trống trong một AZ cụ thể, thời gian tùy ý, hủy lúc nào cũng được.
- Không có giảm giá — trả giá On-Demand, và trả kể cả khi không chạy instance.
- Ghép được với Regional RI hoặc Savings Plan để vừa có chỗ vừa có giảm giá.
- Dùng khi: workload ngắn hạn không được gián đoạn và bắt buộc nằm trong một AZ.
Reserved Instance = cam kết dài hạn để lấy giá rẻ. Capacity Reservation = giữ chỗ để chắc chắn có máy, không rẻ hơn đồng nào. Đề hay ra câu "đảm bảo luôn có capacity trong AZ nhưng không muốn cam kết dài hạn" → Capacity Reservation.
Nền tảng học trực tuyến dùng đủ bốn loại cùng lúc: 10 máy chạy quanh năm mua Savings Plan 1 năm; tăng lên 40 máy mùa thi dùng On-Demand; job encode video bài giảng chạy ban đêm dùng Spot; một cụm Oracle đặt trên Dedicated Host vì license tính theo core. Đề thi hay mô tả đúng kiểu hỗn hợp này rồi hỏi phần nào nên dùng gì.
Spot Instances & Spot Fleet
Rẻ nhất trong mọi lựa chọn — giảm tới 90% — đổi lại AWS có quyền lấy máy về bất cứ lúc nào.
Cơ chế hoạt động
- Bạn đặt max spot price — mức giá tối đa sẵn sàng trả.
- Instance chạy bình thường khi giá spot hiện tại < max price của bạn.
- Khi giá spot vượt max price: bạn có 2 phút để dừng hoặc kết thúc gọn gàng.
- Đặt max price càng cao thì càng ít bị lấy lại, nhưng chi phí tiềm năng càng lớn.
Batch job, phân tích dữ liệu, xử lý ảnh/video hàng loạt, workload phân tán, công việc có thể bắt đầu và kết thúc linh hoạt — tóm lại là bất cứ thứ gì chạy lại được mà không mất mát.
Database và công việc quan trọng không được gián đoạn. Nếu đề nói "critical", "cannot be interrupted", "production database" thì Spot là đáp án sai dù rẻ nhất.
Spot Request — điểm hay bị hỏi
| Loại request | Hành vi |
|---|---|
| One-time | Instance được cấp xong thì request kết thúc |
| Persistent | Bị lấy lại thì AWS tự khởi động lại instance khi có chỗ |
Muốn dừng hẳn Spot persistent: hủy Spot Request TRƯỚC, rồi mới terminate instance. Làm ngược lại thì request sẽ ngoan ngoãn tạo instance mới. Hủy request không tự terminate instance đang chạy.
Spot Fleet
Spot Fleet = tập hợp Spot Instances + (tùy chọn) On-Demand Instances, tự động chọn mua sao cho đạt target capacity trong giới hạn giá bạn đặt. Bạn khai báo nhiều launch pool (loại instance, OS, AZ) rồi để fleet tự chọn.
| Chiến lược | Cách chọn pool | Hợp với |
|---|---|---|
| lowestPrice | Pool rẻ nhất | Tối ưu chi phí, workload ngắn |
| diversified | Trải đều mọi pool | Ưu tiên sẵn sàng, workload dài |
| capacityOptimized | Pool có capacity tốt nhất | Giảm khả năng bị lấy lại |
| priceCapacityOptimized | Chọn pool nhiều capacity nhất, trong đó lấy pool rẻ nhất | Khuyến nghị mặc định cho hầu hết workload |
Spot Fleet dừng mua khi đạt đủ target capacity hoặc chạm trần chi phí. Điểm khác Spot Instance đơn lẻ: fleet chủ động chọn giữa nhiều pool nên vừa rẻ hơn vừa ít bị gián đoạn hơn.
Training một model ML mất 12 tiếng. Chạy trên Spot kèm cơ chế lưu checkpoint lên S3 mỗi 15 phút: bị thu hồi ở giờ thứ 8 thì chạy lại từ checkpoint gần nhất, mất thêm 15 phút thay vì mất trắng 8 tiếng. Chi phí giảm khoảng 70–90% so với On-Demand. Chính khả năng checkpoint biến một workload dài thành workload phù hợp với Spot.
IP Address Charges
Bài giảng mới, thêm vào sau thay đổi giá của AWS từ 01/02/2024.
- Mọi địa chỉ IPv4 công khai đều tính phí: khoảng $0.005/giờ, tương đương ~$3.6/tháng cho một IP.
- Tính phí kể cả khi IP không gắn vào đâu cả — Elastic IP để không vẫn mất tiền.
- IPv4 riêng (private): miễn phí.
- IPv6: không tính phí cho bản thân địa chỉ.
- Free tier: 750 giờ IPv4 công khai mỗi tháng trong 12 tháng đầu.
Xem chi phí qua AWS Cost Explorer (lọc theo "Public IPv4 Address"), và dùng Public IP Insights trong VPC IPAM để biết IP nào đang dùng, IP nào bỏ không. Cách giảm: chuyển sang IPv6, cho instance nằm ở private subnet đi qua NAT Gateway, và giải phóng Elastic IP không dùng.
Đây là lý do bài lab nên terminate instance sau khi làm xong, đặc biệt khi bạn đã giữ Elastic IP. Instance stop mà Elastic IP còn giữ thì vẫn bị tính tiền.
Một công ty dọn dẹp hạ tầng phát hiện còn giữ 25 Elastic IP từ các dự án đã đóng. 25 × khoảng $3,6/tháng ≈ $90 mỗi tháng, tức hơn $1.000 mỗi năm, cho những địa chỉ không gắn vào bất cứ thứ gì. Đây là khoản lãng phí âm thầm phổ biến nhất sau khi AWS đổi cách tính phí IPv4 đầu năm 2024.
Map từ khóa & cheat sheet
| Đề nhắc đến… | Nghĩ ngay tới |
|---|---|
| "batch job, có thể chạy lại, tối ưu chi phí" | Spot Instances |
| "database chạy 24/7 suốt 3 năm" | Reserved Instance |
| "cam kết chi tiêu, linh hoạt instance size" | Savings Plan |
| "per-core license / bring your own license" | Dedicated Host |
| "đảm bảo có capacity trong 1 AZ, không cam kết dài hạn" | Capacity Reservation |
| "workload ngắn, không đoán trước, không được gián đoạn" | On-Demand |
| "kết nối bị timeout" | Security Group chặn |
| "connection refused" | Ứng dụng chưa chạy / sai port |
| "web server gọi database, không muốn quản IP" | SG tham chiếu SG khác |
| "chạy script khi instance khởi động" | EC2 User Data |
| "ứng dụng trên EC2 gọi S3" | IAM Role gắn vào instance |
| "cần giữ dataset lớn trong RAM" | Memory Optimized (r) |
| "transcode video, CPU nặng" | Compute Optimized (c) |
| "hóa đơn tăng dù không chạy instance" | Elastic IP / IPv4 công khai để không |
Cheat sheet 60 giây
- EC2 = IaaS. Cấu hình: OS, CPU, RAM, storage, network card, security group, user data.
- User Data chạy một lần, quyền root, lúc boot đầu tiên.
- Tên instance:
class + generation + size. c = CPU, r = RAM, i = I/O, g = GPU, t/m = cân bằng. - Security Group: chỉ ALLOW, stateful, inbound chặn hết – outbound mở hết, gắn theo region+VPC.
- Timeout = SG. Refused = ứng dụng.
- Ports: 22 SSH · 21 FTP · 80 HTTP · 443 HTTPS · 3389 RDP.
- EC2 cần quyền AWS → IAM Role, không bao giờ access key.
- Giảm giá: On-Demand 0% → RI ~72% → Savings Plan ~72% → Spot ~90%. Dedicated Host đắt nhất.
- Spot persistent: hủy request trước, terminate sau.
- Spot Fleet nên dùng priceCapacityOptimized.
- IPv4 công khai tính phí ~$0.005/giờ, kể cả khi không gắn vào đâu.
Năm câu tự kiểm tra trước khi qua file quiz
1. Ứng dụng web trả về "connection timed out" khi truy cập port 80. Sửa ở đâu?
2. Công ty có license Oracle tính theo số socket vật lý. Chọn purchasing option nào?
3. Muốn dừng hẳn một Spot Instance dạng persistent, làm theo thứ tự nào?
4. Instance đã stop cả tháng nhưng hóa đơn vẫn có phí IP. Vì sao?
5. Job phân tích log chạy 4 tiếng mỗi đêm, hỏng thì chạy lại được. Dùng gì cho rẻ nhất?
Đáp án: (1) Security Group — timeout nghĩa là gói tin bị chặn trước khi tới ứng dụng. (2) Dedicated Host — chỉ nó cho bạn thấy và kiểm soát socket/core vật lý để tuân thủ license. (3) Hủy Spot Request trước, rồi terminate instance; làm ngược thì request tạo lại máy mới. (4) Elastic IP hoặc IPv4 công khai vẫn được giữ; AWS tính phí ~$0.005/giờ kể cả khi không gắn vào instance đang chạy. (5) Spot Instances — workload chịu được gián đoạn, giảm tới 90%.