10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

将 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:00794

评论

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

在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?

四猿外

Java 学习 程序员 个人成长

不懂送女朋友什么牌子的口红?没关系!Python 数据分析告诉你。

JackTian

Python 程序员 数据分析 python 爬虫 口红

游戏夜读 | vim,vim,vim

game1night

服务化架构-状态码设计要点

图南日晟

微服务 RESTful 架构设计

深入浅出Mysql索引的那些事儿

猿人谷

MySQL 性能优化 索引

磁盘挂载

唯爱

避免争执

孙苏勇

职场 随笔杂谈

《中国互联网简史》系列笔记之P2P

dongh11

读书笔记

认识数据产品经理(四 与互联网产品经理的区别)

马踏飞机747

大数据 互联网 产品经理 职业规划

MySQL死锁系列-常见加锁场景分析

程序员历小冰

MySQL

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

珍藏已久的 OS 学习网站拿出来分享给大家

苹果看辽宁体育

操作系统

Java 学习笔记(三)数据类型

杜朋

ARTS|Week 1 第一次使用LeetCode

Puran

LeetCode ARTS活动

超简单入门MyBatis,看了就会了~

程序员的时光

mybatis

安装R语言编译器:

唯爱

金灿灿的季节 - Apache DolphinScheduler收获5位新Committer

代立冬

Eureka 实例注册状态保持 STARTING 的问题排查

张晓辉

spring Spring Cloud netflix

Vol.7 聊聊我热爱的陕西省图书馆

pyfn2030

记录 生活,随想

【写作群星榜】5.22~5.28写作平台优秀作者&文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

控制 Pod 内容器的启动顺序

张晓辉

Kubernetes

小谈校招offer选择

dongh11

职场 职业规划 应届毕业 心态 招聘

tput命令介绍

唯爱

XSKY发布XMotion纳管热迁移技术,OpenStack集群迁移效率提升超10倍

XSKY星辰天合

Vol.8 云栖小镇游记

pyfn2030

阿里云 随笔 数字化转型

时序数据库

pydata

只用CSS实现响应式Full-Width img 2种方法

寇云

CSS css3

服务化构建-多维度的认识中台

图南日晟

软件工程 分层架构 架构设计

Vol.9 Web前端发展历程及前端工程化

pyfn2030

大前端

Rust 遇上 C/C++(二):函数传参

Coding Fatty

c c++ rust 编程语言

解决版权难题,“豪横”字体自己做

zhoo299

设计 CG

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