简介
场景说明
常见本地自建虚拟机是在 VMware 或者VirtualBox,客户想迁移到 AWS 云上使用,不用重新部署自己的应用环境等,亦或者是本地算力不足,需要扩展机器等,总的需求是要更多的虚拟机和更便宜的费用。
AWS 能够将虚拟机映像从现有的虚拟化环境导入 Amazon EC2。例如可以将 VMware 虚拟机导出成 ovf 格式,导出后一共有.mf、.ovf、.vmdk三个文件,打包成 .ova文件,AWS支持导入 AMI 镜像和快照两种方式。
环境准备
- 国内AWS Root账户或者IAM账户(IAM用户需具有相关权限)
- 源服务器(拥有修改防火墙规则和执行命令的权限)
先决条件(限制)
- 系统限制
- 必要配置
- 所需要的权限
- 许可选项
具体内容参考链接:https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html
实践步骤
一、 从虚拟化环境中导出 VM
在VM或者VirtualBox中导出时,直接选择导出为OVF格式,导出后一共有.mf、.ovf、.vmdk三个文件
其中.mf文件是一些文件SHA的集合,主要起到防止映像文件被非法用户篡改的验证作用
.ovf文件相当于配置文件,它保证了映像文件vmdk、资源文件iso与虚拟机domain配置之间的正确对应
.vmdk文件是具体的映像资源。在这里,我们只需要把.vmdk文件上传到AWS S3的bucket即可
二、将 VM 作为映像导入
当 .vmdk文件上传到AWS S3之后,就要在本机使用CLI的import-image命令,而这需要在我们的账户中创建名为vmimport的角色,并为该角色配置相关的策略和权限后,才能够执行特定的操作。因此在转换为AMI前,我们需要先操作我们的账户。下面会逐步介绍。
使用 aws iam create-role 命令创建名为 vmimport 的角色,并向 VM Import/Export 提供对该角色的访问权
为角色vmimport创建策略
为使用IAM身份登录的用户配置权限
如果您以 AWS Identity and Access Management (IAM) 用户身份登录,那么您的 IAM 策略中需要以下权限才能导入或导出 VM。创建新的导入映像任务
经历了上述角色和账户操作后,我们现在终于可以使用 aws ec2 import-image 创建新的导入映像任务!- 监控导入映像任务的状态
使用 describe-import-image-tasks 命令返回导入任务的状态
aws ec2 describe-import-image-tasks --import-task-ids import-ami-1234567890abcdef0 包括的状态值如下: active — 正在运行导入任务。 deleting — 正在取消导入任务。 deleted — 导入任务已取消。 updating — 导入状态正在更新。 validating — 正在验证导入的映像。 validated — 已验证导入的映像。 converting — 正在将导入的映像转换成 AMI。 completed — 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。
三、将 VM 作为快照导入
注意:同上“将 VM 作为映像导入”的 1、2、3 步骤,需要添加对应的用户权限、角色和策略
使用下面的 import-snapshot 命令导入磁盘。您可以指定 S3 存储桶的 URL,或提供 S3Bucket和 S3Key
具体命令:
aws ec2 import-snapshot --description "centos7 VMDK" --disk-container "file://containers.json"
其中containers.json文件的内容为:
{
"Description": "VM import first CLI task",
"Format": "VMDK",
"UserBucket": {
"S3Bucket": "my-import-bucket", #修改此处为具体的S3Bucket
"S3Key": "vms/my-server-vm.vmdk" #修改此处为具体的Bucket下面的vmdk文件路径
}
}
#以下为响应示例:
{
"Description": "VM import first CLI task",
"ImportTaskId": "import-snap-1234567890abcdef0",
"SnapshotTaskDetail": {
"Description": "VM import first CLI task",
"DiskImageSize": "0.0",
"Format": "VMDK",
"Progress": "3",
"Status": "active",
"StatusMessage": "pending",
"UserBucket": {
"S3Bucket": "my-import-bucket",
"S3Key": "vms/my-server-vm.vmdk"
}
}
}
监控快照导入任务
aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-1234567890abcdef0
以下为响应示例。所示状态为 active,表明正在导入。当状态为 completed 时,表示快照可供使用。
{
"ImportSnapshotTasks": [
{
"Description": "VM import first CLI task",
"ImportTaskId": "import-snap-1234567890abcdef0",
"SnapshotTaskDetail": {
"Description": "My server VMDK",
"DiskImageSize": "3.115815424E9",
"Format": "VMDK",
"Progress": "22",
"Status": "active",
"StatusMessage": "downloading/converting",
"UserBucket": {
"S3Bucket": "my-import-bucket",
"S3Key": "vms/my-server-vm.vmdk"
},
}
}
]
}
取消导入快照任务:
aws ec2 cancel-import-task --import-task-id import-snap-1234567890abcdef0
自我判定
序号 | 判定描述 | 自我判定(是/否) |
|---|---|---|
1 | 在各搜索引擎中是否能找到知识信息(包括但不限于Google、百度、Bing) | 是 |
2 | 是否需要代码集成开发 | 否 |