综述
本文记录了将Azure中运行的虚机迁移到AWS中EC2运行的实战过程。
原理
使用 VM Import/Export 将虚拟机 (VM) 映像VHD文件,作为 Amazon 系统映像 (AMI) 从虚拟化环境导入到 Amazon EC2 中,并用于启动实例。
步骤
1、查询限制条件
在开始之前,需要了解 VM Import/Export 支持的操作系统和映像格式,以及实例和卷的导入限制。参考:
https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html
2、环境中增加中转机
新增Window EC2设备,用于从Azure侧下载镜像VHD文件。
3、Azure VDH文件下载(解决镜像文件大下载不成功问题)
下载Microsoft Azure Storage Explorer,使用Azure 管理员账户登陆,选择需要迁移的虚拟机,执行VHD文件下载。
4、VHD文件上传S3
4.1、创建 S3 存储桶
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/。
选择 Create Bucket。
在 Create a Bucket (创建存储桶) 对话框中,执行以下操作:
对于 Bucket Name,键入azuremigration您的存储桶的名称。
对于 Region,为您的 AMI 选择一个区域。
选择 Create。
4.2、创建服务角色
- 利用以下策略创建名为 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 Import/Export 提供对该角色的访问权。请确保指定 trust-policy.json 文件的完整路径,并且为路径添加 file:// 前缀。
aws iam create-role –role-name vmimport –assume-role-policy-document “file://trust-policy.json”
创建名为 role-policy.json 的文件并编写下面的策略,其中,disk-image-file-bucket为存储磁盘映像的存储桶:
- {
- “Version”:”2012-10-17″,
- “Statement”:[
- {
- “Effect”:”Allow”,
- “Action”:[
- “s3:GetBucketLocation”,
- “s3:GetObject”,
- “s3:ListBucket”
- ],
- “Resource”:[
- “arn:aws:s3::: azuremigration“,
- “arn:aws:s3::: azuremigration/*”
- ]
- },
- {
- “Effect”:”Allow”,
- “Action”:[
- “ec2:ModifySnapshotAttribute”,
- “ec2:CopySnapshot”,
- “ec2:RegisterImage”,
- “ec2:Describe*”
- ],
- “Resource”:”*”
- }
- ]
}
使用下面的 put-role-policy 命令将策略挂载到之前创建的角色。请务必指定 role-policy.json 文件位置的完整路径。
aws iam put-role-policy –role-name vmimport –policy-name vmimport –policy-document “file://role-policy.json”
4.3、将映像上传到 Amazon S3
安装AWS CLI,执行命令:aws s3 cp xxx.vhd s3://azuremigration/,完成镜像上传。
4.4、导入 VM镜像
将您的 VM 映像文件上传到 Amazon S3 后,使用 AWS CLI 导入该映像。
aws ec2 import-image –description “bishuiyuantest” –disk-containers “file://containers.json”
下面是一个 containers.json 示例文件。
[
{
“Description”: “bishuiyuantest-1”,
“Format”: “vhd”,
“UserBucket”: {
“S3Bucket”: “azuremigration”,
“S3Key”: “jiayuefeng0320190509094710.vhd”
}
},
{
“Description”: “bishuiyuantest-2”,
“Format”: “vhd”,
“UserBucket”: {
“S3Bucket”: “azuremigration”,
“S3Key”: “jiayuefeng03-disk-0-20190509094710.vhd”
}
}
4.5检查导入任务的状态
使用 describe-import-image-tasks 命令返回导入任务的状态。
包括的状态值如下:
- active — 正在运行导入任务。
- deleting — 正在取消导入任务。
- deleted — 导入任务已取消。
- updating — 导入状态正在更新。
- validating — 正在验证导入的映像。
- validated — 已验证导入的映像。
- converting — 正在将导入的映像转换成 AMI。
- completed — 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。
aws ec2 describe-import-image-tasks
5、启动VM
基于当前镜像文件启动对应的VM,完成业务节点迁移。
