製作自己的AMI

亞馬遜AMI market上提供的AMI有的含有Market Code(不允許將跟分區作爲第二分區掛載到別的實例上進去修改根分區內容),有的AMI不支持特定實例類型(例如CentOS.org提供的AMI就不支持c3系列)。因此有必要自己做幾個AMI。製作方法和步驟如下:
(1)自己在合適的位置安裝一個精簡版的CentOS,儘量最簡化安裝,因爲一會要把系統文件內容全部同步到亞馬遜上去。還可以直接將虛擬機import進AWS。安裝的時候使用/dev/sda1 跟分區,/dev/sda1 swap分區,不要用LVM。例子裏我們是創建1GB的vmware磁盤,不要使用動態擴展,儘量使用一次性分配。然後分區/dev/sda1 768M,剩下的MB全部給swap,此處大小要是2的n次方,否則會出現partition doesn’t end with disk boundry類似的警告提示。
(2)第二部將系統內容弄到AWS上去,此處提供兩個方案:
首先在一臺配置到aws tools的機器(推薦Amazon AMI創建的的EC2),創建一塊25GB的EBS volume,並attach,然後格式化分區,17GB/, 8GB swap,精確到MB,然後

mkfs.ext4 /dev/xvdj1;
e2label /dev/xvdj1 /  (打上標籤);
mkswap -L swap /dev/xvdj2(也打上標籤),
然後掛載
mount /dev/xvdj1 /ebs(自己創建一個掛載點)

使用rsync將剛纔安裝的虛擬機文件系統同步到上述掛載點中

rsync -avx -e "ssh -i xxxxx.pem" /* user@ip:/ebs/

使用ec2-import-volume命令將虛擬機磁盤導入到AWS的一塊EBS磁盤中。命令如下:

ec2-import-volume centos6.5.disk -f raw -b  \
 --region ap-southeast-1 -O  -W  \
 -o  -w 

-f是指定格式:kvm、xen的是raw, vmware的是vmdk,hyper-v的是vhd(vhdx格式好想目前還不支持,需要轉成vhd格式),-b是指定與你導入地區一致的s3 bucket,因爲此過程是通過S3中轉的。然後你會得到一塊磁盤,attach到上述Amazon AMI的EC2上,然後把內容複製出來。
(3)進入到/ebs中修改你剛纔同步過來的文件系統
檢查/etc/grub.conf,主要是默認會採用uuid來指定分區,但是複製的vm uuid是不一樣的,因此要改成LABEL形式,如下:

default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=LABEL=/ console=ttyS0
initrd /boot/initramfs-2.6.32-358.el6.x86_64.img

修改/etc/sysconfig/network-scripts/ifcfg-eth0(注意安裝虛擬機得時候只要一個網卡),修改成如下

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

修改/etc/fatab,改成用LABEL掛載,如下:(none開頭的保持默認)

LABEL=/ / ext4 defaults 1 1
LABEL=swap swap swap defaults 0 0

( 4)將改好的EBS磁盤做成snapshot快照,並獲取snapshot ID備用
(5)在上述工作機上用ec2-register命令註冊AMI

ec2-register -n "CentOS6.4" -d "CentOS6.4" -a x86_64 -K pk-xxxxxx.pem \
 -C cert-mod.pem --root-device-name /dev/sda1 \
 -b /dev/sda=snap-a40edf49:25:true --kernel aki-503e7402 \
 --region ap-southeast-1

這一步驟需要你賬號的X.509 Certificates密鑰對(在security credential裏面找),還需要kernel id,具體該使用哪個aki,詳見這個官方文檔鏈接
AmazonKernelImageIDs
(6)試着基於自己創建的AMI創建一個實例,然後進去自定義一下,再在實例上右鍵註冊成自己個性化的AMI(我一般會裝上CloudWatch然後寫個README說這個AMI是我做的cloudwatch別刪除)
至此完畢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章