QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

将 VMware 中的 Ubuntu 12.04 映像导入成 Amazon EC2 AMI

  • 2019-11-20
  • 本文字数:5428 字

    阅读完需:约 18 分钟

将VMware 中的Ubuntu 12.04 映像导入成Amazon EC2 AMI
(本操作文档部分叙述内容与技术知识引用自AWS官方网站)


要在 Amazon EC2 中使用您的 VM,您必须首先将其从虚拟化环境中导出,然后使用 AWS Command Line Interface (AWS CLI) 或 API 工具将其导入 Amazon EC2。(AWS Console不支持从VM导入AWS的操作功能。)
从总体上看,要将VM导入到Amazon EC2中,需要经过以下五个步骤:
1. 安装 AWS CLI。
2. 为 VM 导入 Amazon EC2 做准备。
3. 从虚拟化环境中导出 VM。
4. 将 VM 导入 Amazon EC2。
5. 在 Amazon EC2 中启动实例。
本次实验使用VMware Workstation 10,把Ubuntu原生镜像ubuntu-12.04.5-desktop-amd64.iso导入到VMware Workstation 10。自行个性化操作后,利用VMware Workstation 10导出OVF映像的功能,获得VM的vmdk文件。并用AWS CLI,以流优化型 ESX 虚拟机磁盘 (VMDK) 映像格式把它导入到Beijing Region的AMI当中。(AWS并不完全支持所有基于Windows或Linux操作系统的系统版本,具体的支持列表请查看http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/VMImportPrerequisites.html)。
**一.安装AWS CLI** 在本地安装AWS CLI具体请查看http://docs.aws.amazon.com/zh_cn/cli/latest/userguide/installing.html。需要注意的是,安装完客户端后,需要在AWS账户的IAM->用户->(目标用户)->安全证书 中创建并下载访问安全密钥,根据下载的Excel文件中的AWS Access Key ID和AWS Secret Access Key,配置好AWS CLI。具体请看以下截图。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0530-1.png)
**二.为 VM 导入 Amazon EC2 做准备**
把个性化操作后的Ubuntu VM从VMware Workstation 10导出前,需要在VM中进行以下几步重要的操作:
1. 在VM中启用SSH远程访问,并保证VM防火墙允许外部访问VM。虽然允许基于密码的SSH,但为安全起见,建议使用公共密钥登录。
2. 在VM中配置一个非root用户。虽然允许root登录,但为了安全起见,建议配置一个非root用户。
3. 确保您的 Linux VM 将 GRUB(传统 GRUB)或 GRUB 2 作为其启动加载程序。
4. 确保您的 Linux VM 使用下列根文件系统之一:EXT2、EXT3、EXT4、Btrfs、JFS 或 XFS。
5. 关闭所有反病毒软件,从您的 VMware 虚拟机上卸载 VMware 工具。
6. 保持您的网络设置为 DHCP 而不是静态 IP 地址。
在本次的操作中,由于我们使用原生的Ubuntu ISO文件,因此一般情况下,我们只需要操作上述的第1、2、6点即可。
**三.从虚拟化环境中导出 VM**
AWS支持下列四种映像格式:
1. 用于导入磁盘和 VM 的 RAW 格式。
2. 固定和动态虚拟硬盘 (VHD) 映像格式,该格式与 Microsoft Hyper-V 和 Citrix Xen 虚拟化产品兼容。目前不支持 VHDX 映像。VM Export 仅支持动态虚拟硬盘 (VHD)。不支持固定 VHD。
3. **流优化型 ESX 虚拟机磁盘 (VMDK) 映像格式**,该格式可与 VMware ESX 和 VMware vSphere 虚拟化产品兼容。**只能将通过 VMware 中的 OVF 导出过程创建的 VMDK 文件导入 Amazon EC2**。
4. 启动虚拟装置 (OVA) 映像格式,该格式支持将映像与多个硬盘一起导入。
AWS官方文档中提到Citrix Xen、Microsoft Hyper-V 和 VMware vSphere这三款虚拟化环境软件。其中VMware vSphere支持导出OVF格式和OVA格式。而最常用的VMware Workstation系列软件,则只支持导出OVF格式。考虑到VMware vSphere是一款操作系统软件,而VMware Workstation是一款应用软件,为了简化复杂程度,我们使用VMware Workstation 10,也就决定了我们使用第三种的映像格式。
当在VM上个性化操作后,关闭VM,然后在**VMware Workstation 10菜单栏中的“文件”->”导出为OVF”中把选中的VM导出到磁盘中**。导出后一共有.mf、.ovf、.vmdk三个文件,个别操作系统的VM会出现.iso原生镜像文件。其中.mf文件是一些文件SHA的集合,主要起到防止映像文件被非法用户篡改的验证作用。.ovf文件相当于配置文件,它保证了映像文件vmdk、资源文件iso与虚拟机domain配置之间的正确对应。.vmdk文件是具体的映像资源。在这里,**我们只需要把.vmdk文件上传到AWS S3的bucket即可**。
**四.将 VM 导入 Amazon EC2** 在这一步中,我们需要使用AWS CLI操作S3中的.vmdk文件,把该文件转换为AMI。在这个过程当中,我们所使用的CLI命令import-image需要在我们的账户中创建名为vmimport的角色,并为该角色配置相关的策略和为使用IAM身份登录的用户配置权限后(http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/VMImportPrerequisites.html),才能够执行特定的操作。因此在转换为AMI前,我们需要先操作我们的账户。下面会逐步介绍。
**1. 使用 aws iam create-role 命令创建名为 vmimport 的角色,并向 VM Import/Export 提供对该角色的访问权。**
**具体命令:**
`aws iam create-role --role-name vmimport --assume-role-policy-document [](http://trust-policy.json/)`
其中trust-policy.json文件的内容为:
`{`
` "Version":"2012-10-17",`
` "Statement":[`
` {`
` "Sid":"",`
` "Effect":"Allow",`
` "Principal":{`
` "Service":"vmie.amazonaws.com"`
` },`
` "Action":"sts:AssumeRole",`
` "Condition":{`
` "StringEquals":{`
` "sts:ExternalId":"vmimport"`
` }`
` }`
` }`
` ]`
`}`
**特别注意事项:**
(1) 必须将外部 ID 命名为vmimport,不能是其他的名字。
(2) trust-policy.json文件当中的”Version”并非是用户自定义版本号,而是AWS中vmimport的版本号,因此请保留”Version”:”2012-10-17″不变。
**2. 为角色vmimport创建策略。**
**具体命令:**
`aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document [](https://role-policy.json/)`
其中role-policy.json文件的内容为:
`{`
` "Version":"2012-10-17",`
` "Statement":[`
` {`
` "Effect":"Allow",`
` "Action":[`
` "s3:ListBucket",`
` "s3:GetBucketLocation"`
` ],`
` "Resource":[`
` "arn:aws-cn:s3:::vm.vincentqiu.cn"`
` ]`
` },`
` {`
` "Effect":"Allow",`
` "Action":[`
` "s3:GetObject"`
` ],`
` "Resource":[`
` "arn:aws-cn:s3:::vm.vincentqiu.cn/*"`
` ]`
` },`
` {`
` "Effect":"Allow",`
` "Action":[`
` "ec2:ModifySnapshotAttribute",`
` "ec2:CopySnapshot",`
` "ec2:RegisterImage",`
` "ec2:Describe*"`
` ],`
` "Resource":"*"`
` }`
` ]`
`}`
**特别注意事项:**
(1) 同样地,要求保留role-policy.json文件中的”Version”:”2012-10-17″不变。
(2) 需要特别注意上述role-policy.json文件中红色标注的两行,分别有两个注意事项:第一,如果VM映像所在的S3为中国区内,则需要以“arn:aws-cn:s3”开头标注资源;如果VM映像所在的S3为中国区外的标准AWS区域,则只需要使用一般的“arn:aws:s3”开头标注资源。第二,上述的vm.vincentqiu.cn为本人的VM映像在S3中的bucket名字,用户可根据情况替换成自己的bucket名字。
**3. 为使用IAM身份登录的用户配置权限。**
如果您以 AWS Identity and Access Management (IAM) 用户身份登录,那么您的 IAM 策略中需要以下权限才能导入或导出 VM。
`{`
` "Version": "2012-10-17",`
` "Statement": [`
` {`
` "Effect": "Allow",`
` "Action": [`
` "s3:ListAllMyBuckets"`
` ],`
` "Resource": "*"`
` },`
` {`
` "Effect": "Allow",`
` "Action": [`
` "s3:CreateBucket",`
` "s3:DeleteBucket",`
` "s3:DeleteObject",`
` "s3:GetBucketLocation",`
` "s3:GetObject",`
` "s3:ListBucket",`
` "s3:PutObject"`
` ],`
` "Resource": ["arn:aws:s3:::mys3bucket","arn:aws:s3:::mys3bucket/*"]`
` },`
` {`
` "Effect": "Allow",`
` "Action": [`
` "ec2:CancelConversionTask",`
` "ec2:CancelExportTask",`
` "ec2:CreateImage",`
` "ec2:CreateInstanceExportTask",`
` "ec2:CreateTags",`
` "ec2:DeleteTags",`
` "ec2:DescribeConversionTasks",`
` "ec2:DescribeExportTasks",`
` "ec2:DescribeInstanceAttribute",`
` "ec2:DescribeInstanceStatus",`
` "ec2:DescribeInstances",`
` "ec2:DescribeTags",`
` "ec2:ImportInstance",`
` "ec2:ImportVolume",`
` "ec2:StartInstances",`
` "ec2:StopInstances",`
` "ec2:TerminateInstances",`
` "ec2:ImportImage",`
` "ec2:ImportSnapshot",`
` "ec2:DescribeImportImageTasks",`
` "ec2:DescribeImportSnapshotTasks",`
` "ec2:CancelImportTask"`
` ],`
` "Resource": "*"`
` }`
` ]`
`}`


**4. 创建新的导入映像任务。**
经历了上述角色和账户操作后,我们现在终于可以使用 aws ec2 import-image 创建新的导入映像任务!
**具体命令:**
`aws ec2 import-image --description "Ubuntu 12.04 vmdk" --disk-containers [](https://containers.json/)`
其中containers.json文件的内容为:
`[{`
` "Description": "VM import first CLI task",`
` "Format": "vmdk",`
` "UserBucket": {`
` "S3Bucket": "vm.vincentqiu.cn",`
` "S3Key": "OVA_ubuntu_12.04/Ubuntu12.04-disk1.vmdk"`
` }`
`}]`
如果该VM具有多个显示磁盘,import-image命令也支持具有多个显示磁盘的VM导入Amazon EC2中。在这种情况下,containers.json文件的内容类似于:
`[{`
` "Description": "First CLI task",`
` "Format": "vmdk",`
` "UserBucket": {`
` "S3Bucket": "my-import-bucket",`
` "S3Key": "my-windows-2008-vm-disk1.vmdk"`
` }`
`},`


` {`
` "Description": "Second CLI task",`
` "Format": "vmdk",`
` "UserBucket": {`
` "S3Bucket": "my-import-bucket",`
` "S3Key": "my-windows-2008-vm-disk2.vmdk"`
` }`
`}]`
**特别注意事项:**
(1) 上述命令中的description均为注解部分,用户可以根据自己的需要进行修改。
(2) 上述红色字体中的”Format“的值取决于第三步中导出VM的映像格式。如果导出的VM映像格式为ova,请把”Format“的值改为ova。本次实验使用的是流优化型 ESX 虚拟机磁盘 (VMDK) 映像格式,所以”Format“的值为vmdk。
(3) 上述红色字体中的”S3Bucket“的值指的是VM映像所在S3的bucket名字,而”S3Key“的值指的是VM映像所在bucket中的具体路径名,用户可以根据自身情况进行修改。需要注意的是,设定”S3Key“的值时,请注意S3中文件夹的存在。请按照“文件夹/子文件夹/……/文件名”的格式进行填写。
当执行完该命令后,如果没有错误发生,CLI会返回任务响应。在任务相应中含有一个ImportTaskId的值,我们保存下来,方便下面查询使用。
**5.检查您的导入映像任务的状态**
**具体命令:**
`aws ec2 describe-import-image-tasks --cli-input-json "{ \"ImportTaskIds\": [\"import-ami-fggrs8es\"], \"NextToken\": \"abc\", \"MaxResults\": 10 } "`
**注意事项:**
(1) 上述命令中的红色部分为导入映像任务的id值,用户根据上一步保留的ImportTaskId值自行替换,即可查询该任务的情况。
(2) 当使用上述命令查询任务状态时,根据AWS的处理进度,返回任务响应中的Status依次为“Pending”、“Converting”、“Updating”、“Updated”、“Preparing AMI”等。整个的处理过程持续10+分钟,请用户耐心等待。隔一段时间再次查询后,如果Status为“Completed”,则表示映像转换完成,用户可以在EC2的AMI镜像中找到它。
**五.在 Amazon EC2 中启动实例** 当生成AMI镜像后,我们就能够通过EC2按照正常的方法创建对应的实例。但需要注意的是:您的实例将只有一个 Ethernet 网络接口。**另外**,对于不同的操作系统,import-image命令对其Licence、最低存储、Internet协议、实例类型等方面有不同的限制和要求,具体请查看http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/VMImportPrerequisites.html的《要求和限制》部分。
复制代码


作者介绍:


邓明轩
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/Deng+Damon.jpg)
亚马逊AWS解决方案架构师;拥有15年IT 领域的工作经验,先后在IBM,RIM,Apple 等企业担任工程师、架构师等职位;目前就职于AWS,担任解决方案架构师一职。喜欢编程,喜欢各种编程语言,尤其喜欢Lisp。喜欢新技术,喜欢各种技术挑战,目前在集中精力学习分布式计算环境下的机器学习算法。
邱越俊
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/%E9%82%B1%E8%B6%8A%E4%BF%8A.jpg)
亚马逊AWS解决方案架构师实习生,擅长Web开发,熟悉使用Java、Javascript、Html5、Mysql数据库,曾在多个互联网公司从事软件平台开发工作,对计算机网络架构、云平台的开发和部署有一定的经验。
复制代码


TAGS:


Amazon EC2


,


VMware


,


大咖专栏


,


计算


原文链接:


https://amazonaws-china.com/cn/blogs/china/ubuntu-ec2/


2019-11-20 08:00695

评论

发布
暂无评论
发现更多内容

官宣:恭喜 ChaosBlade 项目进入 CNCF Sandbox

阿里巴巴云原生

容器 云原生 k8s 监控 Go 语言

新思科技发现开源安全、许可证合规性和维护问题依然很普遍

InfoQ_434670063458

新思科技 OSSRA 开源安全

高性能JavaScriptの笔记(一)

空城机

JavaScript 性能优化 大前端 5月日更

阿里开源的“高并发设计笔记”就这水平!?我反正是跪着看完的

Java架构师迁哥

Amazon Glue 版本 2.0 将作业启动时间缩短了 10 倍,现已全面开放!

亚马逊云科技 (Amazon Web Services)

CampusBulider(模模搭)学习笔记5:创建自定义建筑

ThingJS数字孪生引擎

大前端 可视化 3D 3D可视化 数字孪生

我崩溃了!BTAJ面试有关散列(哈希)表的面试题详解,电子版已问世

欢喜学安卓

android 程序员 面试 移动开发

Fedora 34成哑巴了?

吴脑的键客

fedora

STM32电源框图解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的区别)

不脱发的程序猿

嵌入式 stm32 单片机 电源框图解析

堪称完美!淘宝内部百亿级Java高并发系统架构设计PDF手册分享

Java架构追梦

Java 架构 高并发 淘宝网 亿级架构设计

数据采集之js自定义采集

大数据技术指南

大数据

Spring Cloud Bus 消息总线介绍

阿里巴巴云原生

Java 微服务 云原生 中间件 数据格式

揭秘 Amazon Go 无人商店是如何炼成的!

亚马逊云科技 (Amazon Web Services)

Linux C/C++ 学习路线总结!助我拿下腾讯offer

赖猫

后台开发 C/C++ Linux服务器开发

限流与Guava RateLimiter原理解析

千珏

Java 微服务 限流算法 Guava 令牌桶

嵌入式程序调用函数的内部过程和机制

不脱发的程序猿

单片机 嵌入式程序 嵌入式设计

2021年5月国产数据库排行榜:“华为高斯模式”取得成功,阿里OPA持续攀升

墨天轮

数据库 dba tdsql TiDB Gauss DB

再次荣获最受观众喜爱奖

Serverless Devs

阿里云 云原生 cncf #Serverless

Apache Flink Meetup 北京站,1.13 新版本发布 x 互娱场景实践分享的开发者盛筵!

Apache Flink

大数据 flink

HuskyLens人工智能摄像头

不脱发的程序猿

人工智能 智能硬件 AIOT HuskyLens 人工智能摄像头

为啥你写的代码总是这么复杂?

华为云开发者联盟

软件 代码 代码注释 bug 复杂度

更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性

阿里巴巴云原生

容器 运维 云原生 中间件 边缘计算

论好文章和烂文章

阿里巴巴云原生

程序员 开发者 云原生 写作技巧 成长与思考

阿里开源的“SpringCloudAlibaba笔记”这么细节的吗?真秀!

Java架构师迁哥

打破思维定式(七)

Changing Lin

5月日更

智慧党建三维云展厅可视化

一只数据鲸鱼

数据可视化 智慧党建 三维可视化

怎么进大厂?166位Java工程师的大厂面试经验分享

北游学Java

Java 面试 大厂

云图说|不要小看不起眼的日志,“小日志,大作用”

华为云开发者联盟

运维 日志 云日志服务 安全监控审计

MapReduce排序以及序列化

五分钟学大数据

大数据 hadoop mapreduce

如何做一场高质量的分享

阿里巴巴云原生

深度学习 开发者 云原生 分享

Amazon Route 53 Resolver 落地中国区,轻松玩转私有域名互访不是梦!| 新服务上线

亚马逊云科技 (Amazon Web Services)

将VMware 中的Ubuntu 12.04 映像导入成Amazon EC2 AMI_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章