EC2 Fundamentals
EC2 compute basics for developers
01ภาพรวม EC2 (Elastic Compute Cloud)
EC2 (Elastic Compute Cloud) คือบริการ IaaS (Infrastructure as a Service) ที่ให้เราเช่า virtual servers (เรียกว่า instances) บน cloud ของ AWS เป็นหนึ่งในบริการพื้นฐานที่สำคัญที่สุดในข้อสอบ DVA-C02 เพราะบริการอื่นๆ จำนวนมากต่อยอดมาจาก EC2
- Rent virtual machines — เช่า EC2 instances
- Store data on virtual drives — เก็บข้อมูลบน EBS (Elastic Block Store) volumes
- Distribute load — กระจาย load ด้วย ELB (Elastic Load Balancer)
- Scaling — ปรับขนาดอัตโนมัติด้วย ASG (Auto Scaling Group)
การ config EC2 instance ประกอบด้วย: OS (AMI), CPU/RAM (instance type), storage (EBS/Instance Store), network (Security Group + IP), และ bootstrap script (User Data)
02Instance Types & Families
AWS มี EC2 instance หลากหลายแบบ optimize ตามการใช้งาน การตั้งชื่อมีรูปแบบ เช่น m5.2xlarge โดย m = family, 5 = generation, 2xlarge = size
03AMI (Amazon Machine Image)
AMI คือ template ที่กำหนด OS, software, configuration ที่จะใช้ launch instance ออกมา การใช้ custom AMI ที่ติดตั้ง software ไว้ล่วงหน้า (pre-baking) ช่วยให้ boot เร็วขึ้นและลดการรัน User Data ทุกครั้ง
- Public AMI — AWS จัดเตรียมไว้ เช่น Amazon Linux 2
- Custom AMI — คุณสร้างและ maintain เอง
- AWS Marketplace AMI — ซื้อจาก vendor (อาจมี software license รวมมา)
04EC2 User Data (Bootstrap Script)
EC2 User Data คือ script ที่รัน ครั้งเดียวตอน boot ครั้งแรก (first boot only) ด้วยสิทธิ์ root ใช้ทำ bootstrapping เช่น ติดตั้ง package, update software, download files, ตั้งค่าเริ่มต้น
#!/bin/bash
# รันด้วยสิทธิ์ root ตอน first boot
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "Hello from $(hostname -f)" > /var/www/html/index.html05Security Groups (Firewall)
Security Groups ทำหน้าที่เป็น virtual firewall ระดับ instance/ENI ควบคุม traffic ขาเข้า (inbound) และขาออก (outbound) คุณสมบัติสำคัญคือเป็น stateful
- Stateful — ถ้าอนุญาต inbound traffic แล้ว response ขาออกถูกอนุญาตอัตโนมัติ (ไม่ต้องเพิ่ม rule ตรงข้าม)
- มีได้แค่ allow rules เท่านั้น (ไม่มี deny rule)
- Default: block inbound ทั้งหมด, allow outbound ทั้งหมด
- Reference Security Group อื่นได้ (อนุญาต traffic จาก instance ที่มี SG นั้น)
- หนึ่ง instance ผูกได้หลาย SG และหนึ่ง SG ผูกได้หลาย instance
| ลักษณะ | Security Group | NACL |
|---|---|---|
| ระดับ | Instance / ENI | Subnet |
| State | Stateful | Stateless |
| Rules | Allow เท่านั้น | Allow และ Deny |
| การประเมิน | รวมทุก rule (all) | เรียงตามลำดับ rule number |
Connection Timeout vs Connection Refused
| อาการ | สาเหตุ | ระดับปัญหา |
|---|---|---|
| Connection timeout | Security Group / NACL / firewall บล็อก หรือ route ไม่ถึง | Network |
| Connection refused | ไปถึง host แล้วแต่ไม่มี service ฟังที่ port / แอปไม่ run | Application |
06Key Pairs (SSH Access)
Key pairs ใช้สำหรับ SSH เข้า EC2 instance (Linux) AWS เก็บ public key ไว้บน instance ส่วน private key (.pem) เป็นของคุณ
# ตั้ง permission ของ private key (จำเป็นบน Linux/Mac)
chmod 0400 my-key.pem
# SSH เข้า instance ด้วย private key
ssh -i my-key.pem ec2-user@<public-ip>07Purchasing Options
EC2 มีหลายรูปแบบการจ่ายเงิน แต่ละแบบเหมาะกับ workload ต่างกัน เป็นหัวข้อที่ออกสอบบ่อยมาก
| Option | Commitment | ส่วนลด | Use case | |
|---|---|---|---|---|
| On-Demand | ไม่มี | 0% | Spiky/short-term | unpredictable |
| Reserved (Standard) | 1-3 ปี | สูงสุด ~72% | Steady 24/7 | |
| Compute Savings Plan | 1-3 ปี ($/hr) | สูงสุด ~66% | ยืดหยุ่น family/region | |
| Spot | ไม่มี | สูงสุด ~90% | ทน interruption ได้ |
08Placement Groups
Placement Groups ควบคุมว่า AWS จะวาง EC2 instances ทางกายภาพอย่างไร มี 3 แบบ ออกสอบบ่อยมาก
| แบบ | เป้าหมาย | ข้อจำกัด | Use case |
|---|---|---|---|
| Cluster | Performance | High failure risk | HPC, low latency |
| Spread | Max HA | 7 instances/AZ | Critical apps |
| Partition | Scale + isolation | 7 partitions/AZ | HDFS, Kafka, Cassandra |
09Elastic IP & ENI
Elastic IP (EIP)
Public IP default ของ EC2 จะ เปลี่ยนทุกครั้งที่ stop/start. Elastic IP เป็น static public IPv4 ที่คุณเป็นเจ้าของ map ไป instance ได้คงที่ และ remap ไป instance อื่นได้เร็วเมื่อ failover
ENI (Elastic Network Interface)
ENI คือ virtual network card ที่ instance ใช้สื่อสาร แต่ละ ENI มี primary private IP, secondary private IPs, Elastic IP, MAC address, และ Security Group ของตัวเองได้
- ผูกกับ AZ เดียว — detach/attach ไป instance อื่นใน AZ เดียวกันได้ (ใช้ทำ failover)
- ไม่สามารถย้ายข้าม AZ ได้
- ใช้แยก management traffic ออกจาก application traffic
- สร้างแยกอิสระจาก instance แล้วค่อย attach ได้
10Instance Metadata Service (IMDS)
IMDS (Instance Metadata Service) ให้ instance ดึงข้อมูลของตัวเองได้ที่ link-local address 169.254.169.254 เช่น instance-id, private IP, IAM role credentials, user data โดยไม่ต้องใช้ IAM permission
- /latest/meta-data/ — ดึง metadata เช่น hostname, instance-id, AZ
- /latest/meta-data/iam/security-credentials/<role> — ดึง temporary credentials ของ IAM role
- /latest/user-data/ — ดึง user data ที่ใส่ตอน launch
- ดึง metadata ได้ แต่ดึง user-data จาก meta-data path ไม่ได้ (คนละ path)
IMDSv1 vs IMDSv2
| ลักษณะ | IMDSv1 | IMDSv2 |
|---|---|---|
| วิธีเรียก | GET ตรงๆ | ต้องขอ token ก่อน (PUT) แล้วแนบ token ใน GET |
| ความปลอดภัย | เสี่ยง SSRF | ป้องกัน SSRF (token-based, session-oriented) |
| Protocol | HTTP | HTTP (เหมือนกัน) |
# IMDSv2: ขอ token ก่อน (มีอายุ TTL)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
# แล้วแนบ token ใน request ถัดไป
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/iam/security-credentials/คำถามทบทวน
ทดสอบความเข้าใจหัวข้อ EC2 Fundamentals
21 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย
1.คุณเขียน bootstrap script ที่ติดตั้ง Apache อัตโนมัติตอน launch EC2 instance ครั้งแรก ควรใส่ script นี้ไว้ที่ใด?
2.แอป EC2 พยายามต่อ database ที่ port 3306 แล้วได้ "connection timeout" สาเหตุที่เป็นไปได้มากที่สุดคือ?
3.Security Group มีคุณสมบัติเป็น stateful หมายความว่าอย่างไร?
4.workload เป็น batch processing ที่ทนต่อการ interrupt ได้และต้องการต้นทุนต่ำสุด ควรเลือก purchasing option ใด?
5.แอปต้องการ HPC ที่ network latency ต่ำมากระหว่าง instances และ high throughput ควรใช้ Placement Group แบบใด?
6.ต้องการแยก instances ออกจากกันให้มี hardware ต่างกันเพื่อลดความเสี่ยง failure พร้อมกัน (critical apps ที่ต้องการ HA สูงสุด) ใช้ Placement Group ใด?
7.คุณต้องการ IP ที่คงที่ (static public IPv4) สำหรับ EC2 instance ที่อาจถูก stop/start บ่อย ควรใช้อะไร?
8.แอปบน EC2 ต้องการดึง IAM role credentials เพื่อเรียก AWS API ควร query endpoint ใด?
9.ข้อใดอธิบายความแตกต่างหลักระหว่าง IMDSv1 และ IMDSv2 ได้ถูกต้อง?
10.ENI (Elastic Network Interface) มีคุณสมบัติข้อใดถูกต้อง?
11.องค์กรต้องการ commit การใช้งานเป็นเวลา 1 หรือ 3 ปี เพื่อรับส่วนลด แต่ต้องการความยืดหยุ่นในการเปลี่ยน instance family, size, OS, region ได้ ควรเลือกอะไร?
12.กรณีใดต้องใช้ Dedicated Hosts แทน Dedicated Instances?
13.AMI (Amazon Machine Image) มีลักษณะข้อใดถูกต้องที่สุด?
14.เมื่อ Spot Instance กำลังจะถูก reclaim โดย AWS instance จะได้รับการแจ้งล่วงหน้าเท่าใด?
15.คุณ launch EC2 instance แล้วลืม download private key (.pem) ตอนสร้าง key pair จะเกิดอะไรขึ้น?
16.ระบบ distributed เช่น HDFS หรือ Kafka ที่ต้องการรองรับ instances จำนวนมาก (100+) และให้ rack-level fault isolation ควรใช้ Placement Group ใด?
17.คุณต้องการบังคับให้ทุก instance ใหม่ใช้เฉพาะ IMDSv2 เพื่อความปลอดภัยจาก SSRF ควรตั้งค่าใด?
18.EC2 instance families: instance family ใดเหมาะกับงาน in-memory database หรือ workload ที่ต้องการ RAM สูง?
19.ความแตกต่างระหว่าง "connection refused" และ "connection timeout" ในบริบท EC2 troubleshooting คือ?
20.งาน steady-state ที่รัน 24/7 ตลอดทั้งปีด้วย instance type เดิมใน region เดิม ต้องการประหยัดสูงสุด ควรเลือก?
21.คุณต้องการ attach network interface ตัวที่สองให้ EC2 instance เพื่อแยก management traffic ออกจาก application traffic ควรใช้อะไร?