Amazon EC2 默认并不支持 .iso 格式的镜像文件。本文将介绍如何把 iso 格式的 Linux 镜像文件转换为可以用来启动 Amazon EC2 实例的 AMI。
##### 前置条件
本方案基于 vm import 和 VirtualBox 实现。请先下载安装[VirtualBox](https://www.virtualbox.org/?trk=cndc-detail)。
下文中使用的 VirtualBox 版本:Version 6.1.12 r139181 (Qt5.6.2)
**重要**:请先阅读[vm import的文档](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html#prerequisites?trk=cndc-detail),确保您的iso文件是被vm import支持的。
##### 制作镜像文件
以ubuntu-18.04.4-live-server-amd64为例。
在VirtualBox中点击New以创建新的虚拟机
![image.png](https://dev-media.amazoncloud.cn/29fbf03c69954d7a95d5a4efd516beac_image.png "image.png")
输入名称,选择保存虚拟机的位置,选择正确的系统,此处为 linux → ubuntu 64bit
![image.png](https://dev-media.amazoncloud.cn/e9e3419fa2f440dcae4b1375da45ec92_image.png "image.png")
后面的配置均使用默认值即可,直到创建完毕。我们会得到:
![image.png](https://dev-media.amazoncloud.cn/326ce188b1c34070a2e01e9604cf2af7_image.png "image.png")
选中此虚拟机后,点击 Settings → Storage → Empty → 光盘图标 → Choose a disk file,选择我们的 ubuntu 镜像文件
![image.png](https://dev-media.amazoncloud.cn/b42ad4b96ced492cb5ed94b486d2c847_image.png "image.png")
此时我们已经创建好了一个虚拟机。我们可以点击菜单栏的Start来启动虚拟机,并进行定制化
![image.png](https://dev-media.amazoncloud.cn/919ab25e49ca477fb4fd7b3da2e4bd0f_image.png "image.png")
**安装的时候记得选中安装 SSH 服务器**,这样才能远程访问
![image.png](https://dev-media.amazoncloud.cn/6226a3dc663e4cfb8965ac20a590adc8_image.png "image.png")
接下来要把虚拟机导出为 vm import 支持的 ova 格式文件
![image.png](https://dev-media.amazoncloud.cn/ad814080071c41978b2ba44644981eed_image.png "image.png")
导出时选中 include ISO image files,其他选项使用默认配置导出即可。
##### 上传到 Amazon
在控制台中左上角点击【服务】,选择【S3】进入 S3 控制台
![image.png](https://dev-media.amazoncloud.cn/31b9c46c90c941c69a6e61e126e9262e_image.png "image.png")
点击【创建存储桶】,输入存储桶名称并点击创建
![image.png](https://dev-media.amazoncloud.cn/d205489a1c0743868f9defef946146de_image.png "image.png")
参考[此文档](https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-cliv2.html?trk=cndc-detail)下载并安装 Amazon CLI。
参考[此文档](https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config?trk=cndc-detail)使用 amazon configure 命令配置 Amazon CLI。
参考[此文档](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html#vmimport-role?trk=cndc-detail),使用 Amazon CLI 创建 vm import 所需要的角色。其中需要您使用存储桶的 ARN,您可以在 S3 控制台,选中存储桶后复制 ARN
![image.png](https://dev-media.amazoncloud.cn/5fee490cc33647ae9da86a32f1163072_image.png "image.png")
接下来把镜像文件上传到 S3 存储桶。此处使用了 Amazon CLI 的[cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html?trk=cndc-detail)命令。您也可以使用[开源的S3断点续传工具](https://github.com/aws-samples/amazon-s3-resumable-upload?trk=cndc-detail)
aws s3 cp import-linux-iso.ova s3://linux-import-test-123/import-linux-iso.ova
上传后可以在 S3 存储桶中看到
![image.png](https://dev-media.amazoncloud.cn/8f45e40b8f924732bae5e8a21ad10f0e_image.png "image.png")
参考[此文档](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html#import-vm?trk=cndc-detail)把 S3 中的镜像文件转换为 Amazon EC2 能够使用的 AMI 。此处我的 containers.json 文件内容如下:
```
\[
{
"Description": "My Server OVA",
"Format": "ova",
"UserBucket": {
"S3Bucket": "linux-import-test-123",
"S3Key": "import-linux-iso.ova"
}
}]
```
执行 import-image 命令后的输出:
![image.png](https://dev-media.amazoncloud.cn/53598c81eae146d6a7efd86f17688026_image.png "image.png")
考[此文档](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html#check-import-task-status?trk=cndc-detail)可以查看导入进度
![image.png](https://dev-media.amazoncloud.cn/7a620b9c772440018a079bed6cf96607_image.png "image.png")
导入完毕时,查询结果中的状态显示为 completed
![image.png](https://dev-media.amazoncloud.cn/f86b2d45c1bb4f179c167bae0081cdc4_image.png "image.png")
登录 EC2 控制台以查看
![image.png](https://dev-media.amazoncloud.cn/b73588debca64cf7abf61d1fffb56436_image.png "image.png")
可以看到已经被导入的 AMI:
![image.png](https://dev-media.amazoncloud.cn/c5c1d24dade6455aa6814337316f1281_image.png "image.png")
启动新实例时就可以选择此 AMI:
![image.png](https://dev-media.amazoncloud.cn/b1d1c19cd24b4b4ab02d4d35c435e663_image.png "image.png")
#### 参考文档
[<https://docs.oracle.com/cd/E26217_01/E26796/html/qs-create-vm.html>](https://docs.oracle.com/cd/E26217_01/E26796/html/qs-create-vm.html?trk=cndc-detail)
[<https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html>](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html?trk=cndc-detail)