Aws EC2 basic
1. EC2 là gì?
EC2 (Elastic Compute Cloud) là dịch vụ cung cấp máy chủ ảo có thể tùy chỉnh linh hoạt để chạy ứng dụng trên nền tảng đám mây AWS.
EC2 ≈ “máy chủ vật lý nhưng ở cloud”, chúng ta toàn quyền điều khiển hệ điều hành, phần mềm, mạng, và bảo mật.
2. Những tính năng chính của EC2
| Tính năng | Mô tả |
| Tùy chọn instance đa dạng | Có thể khởi tạo các VM theo nhu cầu: CPU, RAM, disk, GPU, workload, storate, loại hệ điều hành phù hợp cho các mục đích sử dụng khác nhau, như web servers, databases |
| Auto Scaling | Tự động tăng/giảm số lượng máy theo tải |
| Elastic IP | Cung cấp IP cố định cho instance |
| Elastic Block Store (EBS) | Ổ đĩa lưu trữ độc lập, có thể gắn/rút linh hoạt |
| Security Groups | Firewall cấp máy chủ, tích hợp nhiều tính năng bảo mật như Security Groups, Network ACLs, IAM Roles, và khả năng mã hóa dữ liệu |
| Key Pair | Đăng nhập an toàn qua SSH |
| Placement Groups | Tối ưu hiệu suất trong môi trường phân tán |
| Load Balancer | Phân tải giữa nhiều instance |
| Monitoring với CloudWatch | Theo dõi hiệu suất, log và cảnh báo |
| AMIs (Amazon Machine Images) | Lưu mẫu cấu hình máy để khởi tạo nhanh |
| Spot Instances | Máy ảo giá rẻ theo cơ chế đấu giá |
| Reserved Instances | Giảm giá nếu cam kết sử dụng lâu dài |
| Instance Metadata & User Data | Truy xuất cấu hình hoặc chạy script khi khởi động |
3. EC2 User data
3.1. EC2 User Data là gì?
User Data là một đoạn script hoặc tập lệnh shell, được truyền vào khi khởi tạo một EC2 instance, dùng để tự động cấu hình máy chủ trong lần boot đầu tiên.
Ví dụ:
Cài đặt Apache/Nginx
Cập nhật hệ thống
Clone source code
Tự động khởi chạy app
3.2. Cách hoạt động
Khi EC2 instance khởi động lần đầu:
EC2 Agent sẽ tìm script User Data nếu có
Script được chạy một lần duy nhất (trừ khi cấu hình chạy lại)
Script sẽ chạy dưới quyền root
3.3. Cấu trúc User Data
Linux (Amazon Linux / Ubuntu)
!/bin/bash
yum update -y
yum install -y httpd
systemctl enable httpd
systemctl start httpd
echo "Hello from Boss!" > /var/www/html/index.html
Ubuntu
#!/bin/bash
apt update -y
apt install apache2 -y
systemctl enable apache2
systemctl start apache2
PowerShell (Windows)
<powershell>
Install-WindowsFeature -Name Web-Server
Add-Content -Path "C:\inetpub\wwwroot\index.html" -Value "Hello from Boss!"
</powershell>
3.4. Cách thêm User Data
A. Dùng AWS Console
Khi tạo EC2 → Mục “Advanced details”
Phần User Data → Dán script vào
Khởi tạo EC2 → Script sẽ chạy
B. Dùng AWS CLI
aws ec2 run-instances \
--image-id ami-xxxxxxxx \
--instance-type t2.micro \
--key-name my-key \
--user-data file://setup.sh \
--security-groups my-sg \
--count 1
3.5. Một số ví dụ thực tế
Tự cài Apache + website
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Xin chào Boss! EC2 đang chạy ngon lành 😎</h1>" > /var/www/html/index.html
Cài Node.js + app
#!/bin/bash
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs git
git clone https://github.com/boss/app.git /home/ec2-user/app
cd /home/ec2-user/app
npm install
node index.js &
3.6. Những điều cần lưu ý
| Mục | Ghi chú |
| 🔁 Script chỉ chạy 1 lần duy nhất | Trừ khi tạo AMI hoặc sửa file metadata |
📄 Script phải bắt đầu bằng #! | Ví dụ: #!/bin/bash |
| 🔍 Kiểm tra log tại | /var/log/cloud-init-output.log hoặc /var/log/user-data.log |
| 🔐 Chạy với quyền root | Không cần sudo |
| 🐌 Nếu script có lỗi → instance vẫn khởi tạo bình thường | Cần kiểm tra log để debug |
3.7. Trường hợp nâng cao
User Data kết hợp CloudInit (Ubuntu, Amazon Linux 2)
Gọi script từ S3:
#!/bin/bash aws s3 cp s3://boss-bucket/scripts/init.sh /tmp/init.sh chmod +x /tmp/init.sh /tmp/init.shKhởi tạo container (ngay từ EC2):
#!/bin/bash yum update -y yum install docker -y service docker start docker run -d -p 80:80 nginx
4. Phân loại Instance Types (Loại máy)
| Nhóm | Mục đích | Ví dụ |
| General Purpose | Cân bằng CPU-RAM. Thường được sử dụng cho các yêu cầu công việc workload như web server, code repository, cân bằng giữa compute, memory, networking. | t4g, t3, m5, m6g |
| Compute Optimized | Tối ưu CPU. Phù hợp với các công việc tính toán chuyên sâu (compute-intensive tasks), yêu cầu hiệu năng xử lý cao. Ví dụ như batch processing, high performance web server, high performance computing (HPC), scientific modeling, mechine learning, game server. | c6g, c5 |
| Memory Optimized | RAM lớn. Sử dụng cho công việc xử lý dữ liệu lớn trên memory (process large data set in memory), high performance relational/non-relational database, distributed cache, in-memory database, real-time processing, | r5, x1, z1d |
| Storage Optimized | Disk IO cao. Tối ưu hóa các tác vụ yêu cầu nhiều dung lượng lưu trữ, tác vụ đọc ghi trên các tệp dữ liệu lớn (storage intensive tasks, require high and sequential read and write access to large data on local storage). Ví dụ: OLTP, relational & NoSQL database, data warehouse application, distributed file system | i3, d2, h1 |
| Accelerated Computing | GPU, ML. Tối ưu cho các tác vụ xử lý như traning AI, đồ họa nặng. | p4, g4, inf1 |
5. Những điều cần lưu ý khi sử dụng EC2
Bảo mật
Luôn giới hạn SSH port (
22) chỉ cho IP tin cậyDùng key pair để đăng nhập (không dùng mật khẩu)
Sử dụng Security Group và Network ACL để kiểm soát traffic
Không để EBS hay snapshot ở chế độ public
Chi phí
Dùng đúng loại instance phù hợp, tránh lãng phí
Ưu tiên dùng Spot Instance cho workload ngắt quãng (giá rẻ)
Dùng Auto Scaling để tối ưu tài nguyên
Xem xét dùng Savings Plans hoặc Reserved Instances cho dịch vụ dài hạn
Quản lý
Luôn dùng CloudWatch để theo dõi CPU, RAM, disk I/O
Bật Termination Protection nếu không muốn ai đó xóa nhầm
Dùng Lifecycle Hooks nếu dùng Auto Scaling
Tính khả dụng
Chạy multi-AZ deployment để đảm bảo hệ thống không bị gián đoạn
Kết hợp với ELB (Load Balancer) để phân tải
6. Tạo và truy cập EC2 Instance
Vào AWS Console → EC2 → “Launch Instance”
Chọn Amazon Machine Image (AMI) → Ubuntu, Amazon Linux,...
Chọn loại máy (instance type): t3.micro, t2.small...
Tạo hoặc chọn Key Pair (để SSH vào máy)
Cấu hình Network (VPC, subnet, security group)
Gán EBS (tùy dung lượng)
Gắn IAM Role nếu cần
Review → Launch
Sau đó SSH vào instance:
ssh -i my-key.pem ec2-user@<Public-IP>