写点什么

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

评论

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

软件测试简历秀软技能:轻松吸引HR的注意!

测试人

软件测试

CDN与云计算技术的结合:专业视角下的深度融合

天翼云开发者社区

云计算 CDN 内容分发网络

如何在简历中展示软技能,吸引HR关注

霍格沃兹测试开发学社

如何实现零基础转行做测试开发,入职3个月后涨薪30%

霍格沃兹测试开发学社

2024年漳州本地有正规等保测评机构吗?在哪里?

行云管家

等保 等保测评 等保测评机构 漳州

【自己实现Sora客户端】颠覆级的王炸般的文生视频工具——Sora

派大星

一文搞懂设计模式—装饰器模式

Java随想录

Java 设计模式

软件测试经验分享丨零基础转行做测试开发,入职3个月后涨薪30%

测试人

软件测试

Flink ML 的新特性解析与应用

Apache Flink

大数据 实时计算 flink 实战

测试人生 | 零基础转行做测试开发,入职3个月后涨薪30%

测吧(北京)科技有限公司

测试

TDengine 签约福州城建,助力智慧水务数据管理革新!

TDengine

tdengine 时序数据库

怎样利用 AI 大模型,辅助研发管理与效能提升?

思码逸研发效能

春节期间消费行业收入大涨:企业如何抓住私域运营优化机会?

Geek_2d6073

听 GPT 讲 client-go 源代码 (13)

fliter

一文带你了解容器探针

华为云开发者联盟

Kubernetes 后端 开发 华为云 华为云开发者联盟

云数据库实现架构与设计的构想

天翼云开发者社区

数据库 云计算 云数据库

知识图谱数据处理流程是什么

悦数图数据库

知识图谱

大数据了解一下

小齐写代码

听 GPT 讲 client-go 源代码 (14)

fliter

等保测评师工资怎么样?有前途吗?

行云管家

等保 等级保护 等保测评师

简历秀软技能:轻松吸引HR的注意!

测吧(北京)科技有限公司

测试

除了代码行数、工时,我们还有什么更科学的方式度量研发工作量?

思码逸研发效能

香港Web3盛会:HTX Ventures投资经理Gigi Cho确认出席Hack .Summit() 2024!

TechubNews

#Web3

4个为数据程序员量身打造的PyCharm插件

伤感汤姆布利柏

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