ขอแนะนำแนวคิด Amazon Elastic Compute Cloud (EC2) สั้นๆ Amazon EC2 คือ Web Service ที่ให้ Scalable Computing Capacity ทันทีให้ผู้ใช้ทั่วโลก เป็น Virtualization Grid ขนาดใหญ่ในฟาร์มของ Amazon ให้ CPU Cycles และ Disk Space แบบ On-demand เพียงแค่จ่ายเงิน (และไม่แพงมาก)
Amazon เสนอราคาที่คุ้มค่า เทียบเท่าการซื้อและบำรุงรักษา Infrastructure เอง สำหรับ Home Users อาจไม่ดูจำเป็นทันที แต่องค์กร SME ที่มีความต้องการเปลี่ยนแปลงจะชอบความอิสระจาก Hardware
บางคนจะชอบ บางคนจะเกลียด ส่วนตัวผมคิดว่าโปรเจกต์นี้ยอดเยี่ยม โดยเฉพาะที่ Amazon Cloud รันบน Linux และรองรับ Linux หลัก สร้างโอกาสเจริญเติบโตตลาด Linux Mark Shuttleworth เคยโดนวิพากษ์เพราะจะรวม Amazon เข้า Ubuntu แต่ผมคิดว่าเป็นขั้นตอนที่ฉลาด เพราะความต้องการ Desktop และ Web กำลัง融合 ต้องการความยืดหยุ่น "Ethereal" ที่ Cloud ให้มาเท่านั้น

ที่บ้าน...
ที่บ้านคุณนادرาจะต้องการมากกว่า Classic Virtualization แต่จะเริ่มคิดถึง Amazon เมื่อราคา Database Server 16GB RAM ในห้องนั่งเล่นเป็นปัญหา
ถ้าวันนั้นมาถึง คุณจะอยากรู้วิธีใช้ Amazon EC2 Full Tutorial อยู่นอกขอบเขต มี Official Documentation ให้อ่าน
แทนนั้น ผมจะสาธิตส่วนสำคัญที่ Home User อาจเจอ - การสร้าง Amazon VM Images แปลง Virtual Hard Disks ของ VMware ให้กลายเป็น Amazon-compatible Images สำหรับ EC2
ทำไมไม่สร้าง Amazon Images ตั้งแต่แรก หรือใช้ Existing Builds?
คำถามดี! Amazon ให้สร้าง Images เอง หรือใช้ Templates (SUSE, Ubuntu, RedHat) เป็นจุดเริ่มต้น แต่สร้าง Images เองซับซ้อน และ Templates อาจไม่ตรงใจ เช่น อยากรัน Distro ที่ Custom เอง หรือ Private Digitally-signed Image ที่เฉพาะคุณเข้าถึงได้ ต้องการ Control เต็มที่ ไม่ไหว้ให้คนอื่นสร้าง
เป้าหมาย: สร้าง Image ที่บ้าน แล้ว Upload ไป Amazon
ผมจำกัด Tutorial เฉพาะหัวข้อนี้ เพราะสำคัญ คุณต้องการ Private Image พร้อม Certificate สร้างที่บ้าน เวลาว่าง ไม่เสีย Bandwidth และชั่วโมง Config พร้อมแล้ว Convert และ Upload ไป Amazon Simple Storage Service (S3)
หมายเหตุ: ต้องมี Amazon EC2 Account ที่ Valid ก่อน และต้องใช้ Linux เพื่อ Follow Tutorial นี้ เครื่องมือบางตัวมีแค่ Linux - ไม่แปลกเพราะ Amazon รันบน Linux
คำถามแรก: แปลงจากอะไร?
อีกคำถามดี มี Desktop Virtualization Formats หลายแบบ แต่ถ้ารัน Virtualization ที่บ้าน โอกาสสูงที่ใช้ VMware Products VMware ใช้ Format .vmdk สำหรับ Virtual Hard Disks นี่คือ Source Format ที่จะ Convert ไป AMI
แต่ไม่สามารถ Convert VMDK ไป AMI ตรงๆ ได้ ผมจึงเขียน Tutorial นี้ เริ่มกันเลย!
ขั้นตอน 1: ตรวจสอบว่ามีทุกอย่างครบ
ก่อนเริ่ม มีรายการสำคัญ (เยอะมาก) ที่ต้องพิจารณา
และขอให้เข้าใจว่า Amazon EC2 Project ยังใหม่ คำแนะนำที่นี่อาจใช้ได้บางส่วนในอนาคต - หรือไม่ได้เลย ผมไม่สามารถรับประกันความสำเร็จ 100% ได้ แต่อย่าปล القلب! ตามมาดู
General Amazon Requirements (ไม่เกี่ยวกับ VMware):
Xen Requirements
ต้อง Xenify Distro ของคุณก่อน Amazon Infrastructure ใช้ Xen (Open-source Hypervisor) Amazon VMs ต้องการ Kernels และ Kernel Modules เฉพาะ ต้อง Download Xen Kernel ที่เหมาะสม Extract ติดตั้ง Modules และ Update GRUB Menu
รายละเอียด: ไป Website/Repo ของ Distro โหลด Kernel ที่ตรง Version Extract วางไฟล์ใน /boot และ /lib สร้าง Module Files:
depmod -F /boot/System.map-<kernel>-xenU -a <kernel>-xenU
kernel คือ version ที่ตรงกับ uname -r ตรวจสอบ Modules อยู่ที่ /lib/modules/<kernel>-xenU สุดท้าย Update GRUB menu.lst ให้มี Xen Kernel Entry และ Boot Default อ่าน GRUB Tutorial ของผมเพิ่มเติม
Partitioning Requirements
อีกอย่างลำบาก Amazon VMs ต้อง Partition Layout เฉพาะ /etc/fstab ต้องเป็นแบบนี้:
/dev/sda1 / ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0
ถ้าใช้ Swap และ /mnt Mountpoints เอง ให้ลบออกจาก /etc/fstab เพราะ Amazon จะใช้ของตัวเอง
อ่าน Creating an AMI Document สำหรับรายละเอียด Geeky อย่าปวดหัวจากข้อมูลเยอะ ส่วนใหญ่ไม่เกี่ยวข้องกับ Test Case ให้ฟอกัสที่ Kernel Modules, Partition Layout, Network Config
Default Runlevel & Services
ต้องการ SSH เข้าถึง Amazon Machine Firewall ต้อง Disable หรือ Allow SSH Incoming SSH Service Enabled ใน Default Runlevel SSH ใช้ TCP Port 22 Default
เรื่อง Runlevels: Xen Machines Boot เข้า Runlevel 4 (ที่ไม่ได้ใช้) ต้อง Edit /etc/inittab Uncomment Runlevel 4 และ Set เป็น Default เปิด Services ที่เกี่ยวข้อง ไม่มี Magic Set แนะนำ
ไม่รัน X ใน Amazon (ยัง) Runlevel 5 ไม่ได้ ช่วย Config Services ใน Runlevels ต่างๆ ได้ที่ Linux Services Tutorial ของผม
Network Interfaces
Config Network Device ให้ Lease IP ผ่าน DHCP และ Disable IPv6 ในส่วนใหญ่เป็น Default อยู่แล้ว
Additional Important Notes:
VMware สร้าง Dynamically Expandable Images ได้ - 40GB Disk อาจมีแค่ 700MB ถ้า Data แค่ 700MB หรือ Pre-allocate ให้เต็ม 40GB หลายคนเลือก Dynamic เพื่อประหยัดพื้นที่
ตอน Convert VMDK to RAW ประโยชน์ของ Dynamic Expansion หายไป Disk Image จะขยายเป็น Real Size ระวังตอนสร้าง VM ใส่ใจ Disk Size
Amazon รองรับ Images ได้สูงสุด 10GB VMDK ต้องไม่เกิน 10GB ไม่อย่างนั้นสร้าง AMI ไม่ได้ Error: ERROR: the specified image file <something>.raw is too large
ต้องมี Java และ Ruby ติดตั้งบน Linux Machine และต้องใช้ Linux สำหรับ Step 3 ตรวจสอบให้ครบทุกอย่างก่อนเริ่ม
ขั้นตอน 2: แปลง VMDK เป็น RAW
ใช้ QEMU สำหรับ Conversion QEMU มีทั้ง Windows และ Linux เป็น Emulator/Image Utility อเนกประสงค์ แปลง VMDK เป็น RAW ได้ดี
ผมเคยแนะนำ QEMU สร้าง Virtual Hard Disk ในบทความ VMware Player ใช้ทำ Disk-related Tasks อื่นๆ ได้ เช่น Conversion
คำสั่ง:
qemu-img convert -O raw source.vmdk target.raw
รอจนเสร็จ ใช้เวลานานขึ้นอยู่กับ Specs และ Image Size
ขั้นตอน 3: Bundle Image ด้วย AMI Tools
Amazon มี Tool Bundles สองชุด: API Tools (Client Interface) และ AMI Tools (Command Utilities สำหรับ Create, Bundle, Upload AMI ไป S3) เราต้องใช้ AMI Tools
Download และ Extract ไว้ใน Home Directory รันคำสั่งยาวๆ แบบนี้:
./ec2-bundle-image -i <image> -r <arch> -c <cert> -k <key> --user <user id>
อธิบาย Options:
-i <image>- RAW File ของคุณ-r <arch>- Architecture (i386, x86_64, etc.)-c <cert>- Certificate จาก Amazon วางใน Home Directory หรือ Directory เดียวกับคำสั่ง ห้ามมี Trailing Slash ใน Path ไม่งั้น Error:--prefix has invalid value 'cert.pem':'/' character not allowed-k <key>- Private Key กฎเดียวกับ Cert--user <user id>- Amazon User ID
Requirements
แค่นี้ยังไม่พอ ec2-bundle-image จะบ่นว่า:
ec2-bundle-image: line 3: EC2_HOME: Neither of EC2_AMITOOL or EC2_HOME environment variables are set
ต้อง Export Environment Variables ก่อน
BASH
export EC_HOME=<path> export EC_AMITOOL_HOME=<path>
TCSH
setenv EC_HOME <path> setenv EC_AMITOOL_HOME <path>
Paths ควรเป็น:
- EC_HOME - Home Directory หรือ ec2 sub-directory ห้ามใช้ /tmp เพราะ World-readable
- EC_AMITOOL_HOME - Directory ที่ Extract AMI Tools ไว้
อยาก Export Variables อื่นๆ มาก พิมพ์มือทุกครั้งน่าเบื่อ สร้าง File เก็บ Variables แล้ว Source มัน:
source file-containing-all-exports
พร้อมแล้ว Enter คำสั่ง Conversion รอ ควรเสร็จสมบูรณ์ (เน้นคำว่า "ควร" เพราะต้องเตรียมมากมาย)
ถ้า Convert VMDK > RAW > AMI สำเร็จ พร้อม Upload แล้ว เครื่องหมายสำเร็จคือมีไฟล์รายการใน /tmp และ XML Manifest File (Default Output Directory)
ขั้นตอน Upload อยู่นอกขอบเขต จะพูดในโอกาสหน้า Amazon จะอยู่ต่อไป คาดว่าจะมีบทความเพิ่มเติมบน Dedoimedo
สรุป
งานนี้ไม่ง่ายแต่มองไม่ยาก จะประหยัดเวลา Bandwidth และเงิน การ Convert Images ให้ความอิสระเกินกว่า EC2 เราเคยใช้ VMware Converter ตอนนี้ QEMU เป็น Power Tool อีกตัว
ต้องปฏิบัติตามหลายกฎ โดยเฉพาะ AMI Tools: Image ไม่ใหญ่เกิน 10GB, ห้าม Trailing Slash ใน Cert/Key Paths, Export Env Variables ถูกต้อง, ไม่วาง Tools ใน "Unsafe" Directories ขอให้สนุกกับการเดินบนเมฆ!
บทความต่อไปจะพูดถึง Kiwi - Component ให้ลืมของ SUSE Build Service สร้าง Xen หรือ AMI Images จาก Custom Distros หรือ Physical Installation คล้าย VMware Converter แต่มากกว่า จะเล่นกับ Image Creator และ Product Creator และ SUSE Studio และ Concepts อื่นๆ ที่น่าตื่นเต้น
Markus คุณขอ AMI Tutorial ไปนี่แล้ว Enjoy!
Cheers.