AWS折腾记——为EC2制作镜像

零、前言

Amazon web services 在近期启用了悉尼区的服务器,公司终于可以下决心使用了。但在准备开启第一个EC2实例的时候,发现没有CentOS的官方AMI(即EC2可用的镜像)可以选择,只有社区制作的第三方AMI。而对于有洁癖的我们来说,使用第三方镜像是不放心,所以这次我的任务是制作自己的AMI。 制作自己的AMI,我使用了2种方法—— 一是将现有的系统打包成镜像上传;二是在现有系统上制作新的镜像并上传,即官方说的『Creating an Instance Store-Backed AMI From a Loopback』。可惜,虽然2种方法都令EC2成功运行,但启动的时候会将内核变成其他。截至写本文时亦找不到解决办法,是以为记。

一、转换现有系统并上传

这种方法是将VM上的系统用Amazon提供的命令行工具压缩成image并上传到S3,在注册成AMI。具体做法如下:

1. 安装ec2 ami tools 和ec2 api tools

通过以下命令安装ec2 ami tools

1
yum install http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm

对于ec2 api tools,可以参考官方文档安装 『Setting Up the Amazon EC2 Command Line Tools

2. 更改系统配置

首先是将ifcfg-eth0里的HWADDRESS去掉,并加上“NM_Controlled no”。然后是安装cloud-init(直接用yum安装)并根据官方修改配置。

3. 获得密钥并打包

在AWS网站上,account里的『Security Credentials』找到『X.509』,生成key.pem和cert.pem,然后用以下命令生成image文件并打包

1
ec2-bundle-vol -c cert.pem -k pk.pem -u <account-id> -d /image -e /image -r x86_64 --no-inherit

其中是帐号的id,-d后面是指镜像放置的目录,-e代表忽略的目录——这个一定要加上,否则会进入死循环。

4. 上传

account里的『access key』找到找到access key id 和secret access key,然后用以下命令上传到S3

1
ec2-upload-bundle -b <bucket name> -m /image/image.manifest.xml -a <access id> -s <secret access id>

5. 注册AMI

1
2
3
4
5
6
7
#设置变量,以便直接运行ec2-register
export EC2_HOME=/usr/local/ec2/ec2-api/
export PATH=$PATH:$EC2_HOME/bin
export AWS_ACCESS_KEY=&amp;lt;access key>
export AWS_SECRET_KEY=&amp;lt;secret key>
ec2-register <bucket name>/image.manifest.xml --region ap-southeast-2

这里,要用–region表明上传到哪个地区,ap-southeast-2是表示悉尼区。

二、现有系统新建系统并上传

这个做法的具体原理是:先在原有系统新建一个镜像文件,然后将其mount到某个目录,利用yum groupinstall Base将系统安装到该镜像文件,最后将文件打包并上传。 在镜像文件里安装系统的做法可以参考以下文章:『Create your own CentOS AMI Image (S3 Backed) 』、『Build your own Core CentOS 5.x AMI for Amazon EC2』 其中打包和上传的命令如下

1
2
3
4
5
6
7
8
#打包
#--image指镜像文件的位置
#--destination指打包后文件的位置
ec2-bundle-image --image /image/ami-centos5.8-64bit-base-img --prefix ami-centos5.8-64bit-base --cert cert-.pem --privatekey pk.pem --user <account-id> --destination /home/public
/EC2AMIFILES --arch x86_64
#上传
ec2-upload-bundle -b crazysalesamistore -m /home/public/EC2AMIFILES/ami-centos5.8-64bit-base.manifest.xml -a <access-key> -s <secret-key>

上传完毕后,可以按照第一种方法注册AMI,也可以在AWS后台使用图形界面注册。