前提:
AWS中创建EC2 Linux时,大多是使用已经默认提供的镜像,当你需要是用自己的镜像文件创建对应的系统时,就需要导入自己的系统包,这时候你就用得到本篇文章了,实际操作过程请参考AWS官方文档为主,本文为辅。
使用AWS的 Import/Export 工具:
https://aws.amazon.com/cn/ec2/vm-import/
VM Import/Export 提供多种可将你的虚拟机导入 Amazon EC2 的方法
第一种方法是使用 AWS CLI 工具导入 VM 映像。启动时,只需:
- 下载并安装 AWS 命令行接口。
- 确认你的 VM 满足 VM Import 前提条件,准备好导入并从当前环境作为 OVA 文件(或 VMDK、VHD 或 RAW)导出。
- 使用 AWS CLI 上传 VM 映像到 S3。多部分上传将提升性能。作为替代方法,您还可以使用 AWS Import 服务发送 VM 映像到 AWS。
- 一旦上传 VM 映像,使用 ec2 import-image 命令导入您的 VM。作为本命令的一部分,您可以为导入的映像指定许可模式和其他参数。
- 使用 ec2 describe-import-image-tasks 命令监控导入进度。
- 一旦导入任务完成,您可以使用 ec2 run-instances 命令从导入流程期间生成的 AMI 创建 Amazon EC2 实例。
所需操作步骤:
AWS官方文档:使用 VM Import/Export 将 VM 作为映像导入:
https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html
1、OVA上传到S3 (此处省略,手动上传,很简单)。
2、创建命名为 vmimport 的 IAM 角色(见下文)。
【具体参照AWS官网:https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html#vmimport-role 】
3、执行AWS CLI导入命令(见下文)。
详细过程:
1、上传OVA到S3 (省略)
2、创建IAM角色 vmimport
若要创建服务角色,步骤如下:
2.1、创建一个名为 trust-policy.json 的文件
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
使用create-role命令以创建一个名为的角色vmimport并授予 VM 导入/导出访问权限。确保您已指定在上一步中创建的 trust-policy.json 文件的位置的完整路径,并包含 file:// 前缀,如下例所示:
aws iam create-role --role-name vmimport --assume-role-policy-document "file://C:\import\trust-policy.json"
2.2、创建一个名为的文件role-policy.json使用以下策略,其中 disk-image-file-bucket 是磁盘映像的存储桶,export-bucket 是导出映像的存储桶:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::vw你的桶的名字",
"arn:aws:s3:::vw你的桶的名字/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::vw你的桶的名字",
"arn:aws:s3:::vw你的桶的名字/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
返回内容如下,且在AWS的角色里面可以看到已经创建vmimport
2.3、使用下面的 put-role-policy 命令将策略挂载到之前创建的角色。
请务必指定 role-policy.json 文件位置的完整路径。
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://C:\import\role-policy.json"
然后可看到vmimport已经被添加了权限,这点很重要,添加不成功,执行命令会提示无权访问S3:
3、CLI导入VM:
在你本地创建文件containers.json,如下:
(https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html)
[
{
"Description": "My Server OVA",
"Format": "ova",
"UserBucket": {
"S3Bucket": "v你的桶的名字",
"S3Key": "v你的ova包的名字.ova"
}
}]
执行命令,导入:
aws ec2 import-image --description "My server VM" --disk-containers "file://C:\import\containers.json"
查看状态:
aws ec2 describe-import-image-tasks --import-task-ids import-ami-1234567890abcdef0
状态信息值如下:active— 正在运行导入任务。
- deleting— 正在取消导入任务。
- deleted— 导入任务已取消。
- updating— 导入状态正在更新。
- validating— 正在验证导入的映像。
- validated— 已验证导入的映像。
- converting— 正在将导入的映像转换成 AMI。
- completed— 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。
完成之后会在AWS主页,AMI下可看到我们刚刚上传的映像:
再然后,就可以使用刚刚导入的映像创建实例了。
细节就是给角色vmimport授权时注意检查其指定的资源路径附上以上过程中使用的Json文件。
附:
监视导入映像任务 命令
aws ec2 describe-import-image-tasks --import-task-ids import-ami-05aff01e3f70a3ede
取消导入映像任务 命令
aws ec2 cancel-import-task --import-task-id import-ami-05aff01e3f70a3ede
创建vimport角色
aws iam create-role --role-name vmimport --assume-role-policy-document "file://D:\Users\User\Desktop\AWS\trust-policy.json"
策略挂载到角色vimport
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://D:\Users\User\Desktop\AWS\role-policy.json"
【全篇完】