AMI
什么是AMI
为什么要上传自己创建的AMI
两个原因可能需要使用自己创建的AMI,
1:前期大量工作,运行环境放在虚拟机上,后面需要将虚拟机迁移到AWS 上,如果重新搭建一搭运行环境,时间成本具大,因此可以将现有的虚拟机导出成可被EC2运行的AMI。
2:某些软件,需要运行在特定的linux环境,如redhat6.5,而这些特定的环境,在AMI市场上没有找到对应的AIM,因此需要自己先建一个AMI,导出成可被EC2运行的AMI
如何上传自己的AMI
AWS VM Import/Export 可以帮助我们将虚拟机镜像从虚拟机导入到EC2实例中,还可以将导入的实例导出回本地虚拟机,减轻在部署上的工作。
一:创建S3存储桶,将OVA文件上传到该S3存储桶
$ aws s3 mb s3://arificial.vm
$ aws s3 cp redhat6.5.ova s3://arificial.vm/
二:通过策略配置文件创建vmimport角色
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
$ aws iam create-role --role-name vmimport --assume-role-policy-document "file://trust-policy.json"
三:为vmimport配置权限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws-cn:s3:::"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws-cn:s3:::/*"
]
},
{
"Effect": "Allow",
"Action":[
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
使用下面的命令将策略挂载到vmimport
$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://role-policy.json"
四:导入OVA
[
{
"Description": "redhat 6.5 OVA",
"Format": "ova",
"UserBucket": {
"S3Bucket": "arificial.vm",
"S3Key": "redhat6.5.ova"
}
}]
上面创建了一个配置文件,用于定义从哪个bucket拿ova文件,接下来,使用命令,导入vm
$ aws ec2 import-image --description "My server VM" --disk-containers "file://containers.json"
导入后,需要一些时间,通过提示可以看到ami ID,我们通过 describe-import-p_w_picpath-tasks 命令,结合那个ID ,可以查看导入任务的状态
$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-{上面说的ID}
包括的状态值如下:
active
- 正在运行导入任务。deleting
- 正在取消导入任务。deleted
- 导入任务已取消。validating
— 正在验证导入的映像。converting
— 正在将导入的映像转换成 AMI。completed
- 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。
``
最后更新于
这有帮助吗?