aws制作自己的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 <your_s3_bucket_name> \ --region ap-southeast-1 -O <access_key_id> -W <secret_access_key> \ -o <access_key_id> -w <secret_access_key>
-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别删除)
至此完毕