为什么需要
aws的云主机要选择自己系统的时候,就需要通过自有的AMI镜像来操作的,但是AWS是不支持直接上传ISO包的,所以只能通过aws-cli来上传到S3存储桶里面,然后再导入到AMI镜像中。
导入到AMI的前提是已经在虚拟机上面安装好了系统,然后配置为DHCP,关机之后就可以导入。在windows平台可以使用vmware、HyperV、virtualBox等虚拟机软件,在导出格式时,尽量选择使用ova的格式。但由于某些原因,我们这次使用centos的KVM来做虚拟化。
安装镜像
我们使用kvm来安装需要的镜像,由于aws不支持qcow2格式,所以直接使用了raw格式:
1 | qemu-img create -f raw -o size=5G /data/raw/raw-disk01.raw |
运行之后,可以使用VNC来观察安装的进展。
kvm具体使用方法可以参考 实战CentOS7安装且使用KVM虚拟机
安装完成之后,把网卡配置为DHCP,这一步是必须的,然后直接关机即可。这样就准备好了虚拟化的文件了。
AMI制作
主要有几步:
- 安装与配置awscli
- 创建服务角色以方便S3的上传
- 导入镜像
安装与配置awscli
使用 pip 安装 AWS CLI:
1 | pip install awscli --upgrade --user |
更多安装方法参考:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html
配置AWS CLI:
1 | $ aws configure |
第一次运行的时候需要配置CLI,AWS CLI 会提示您输入四条信息,并将它们存储在名为 default 的配置文件(一个设置集合)中。每当您运行的 AWS CLI 命令未明确指定要使用的配置文件时,就会使用该配置文件。
参考:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-configure.html
创建服务角色
1、创建名为 trust-policy.json 的文件:
1 | { |
2、使用 create-role 命令创建名为 vmimport 的角色,并向 VM Import/Export 提供对该角色的访问权。请确保指定 trust-policy.json 文件的完整路径,并且为路径添加 file:// 前缀。
1 | aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json |
3、创建名为 role-policy.json 的文件并编写下面的策略,其中,disk-image-file-bucket 为存储磁盘映像的存储桶:
1 | { |
其中
1 | "arn:aws-cn:s3:::disk-image-file-bucket", |
arn:aws-cn:s3为AWS中国区域,disk-image-file-bucket 为存储磁盘映像的存储桶:为存储桶的名称
4、使用put-role-policy命令将策略挂载到之前创建的角色,请指定 role-policy.json 文件位置的完整路径
1 | aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json |
导入镜像
使用以下命令导入镜像,
1 | aws ec2 import-image --platform Linux --license-type BYOL --no-encrypted --description _imagedescription_ --architecture x86_64 --disk-containers Format=Raw,UserBucket="{S3Bucket=centosbucket,S3Key=wsos.raw}" |
运行之后会返回一个ID,这时就可以使用 aws ec2 describe-import-image-tasks --import-task-ids import-ami-0c0a99df27707ef13 来查看进度,几个状态为:
1 | 包括的状态值如下: |