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以创建新的虚拟机

输入名称,选择保存虚拟机的位置,选择正确的系统,此处为 linux → ubuntu 64bit

后面的配置均使用默认值即可,直到创建完毕。我们会得到:

选中此虚拟机后,点击 Settings → Storage → Empty → 光盘图标 → Choose a disk file,选择我们的 ubuntu 镜像文件

此时我们已经创建好了一个虚拟机。我们可以点击菜单栏的Start来启动虚拟机,并进行定制化

**安装的时候记得选中安装 SSH 服务器**,这样才能远程访问

接下来要把虚拟机导出为 vm import 支持的 ova 格式文件

导出时选中 include ISO image files,其他选项使用默认配置导出即可。
##### 上传到 Amazon
在控制台中左上角点击【服务】,选择【S3】进入 S3 控制台

点击【创建存储桶】,输入存储桶名称并点击创建

参考[此文档](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

接下来把镜像文件上传到 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 存储桶中看到

参考[此文档](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 命令后的输出:

考[此文档](https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmimport-image-import.html#check-import-task-status?trk=cndc-detail)可以查看导入进度

导入完毕时,查询结果中的状态显示为 completed

登录 EC2 控制台以查看

可以看到已经被导入的 AMI:

启动新实例时就可以选择此 AMI:

#### 参考文档
[<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)