AWS VM Import を試してみる
- 2019.11.05
- AWS

はじめに
VMの仮想マシンをAWSに取り込む方法としてVM Importという機能があります。これを今回は試してみたいと思います。ライセンスがなんやかんやとうるさそうなので、CentOS7 64bitを使って試します。これならフリーですから。
テスト用CentOS7の構築
まずはESXi6.5上にテスト用のCentOS7を構築しました。確認用にテストファイルを作成しておきます。

OVFテンプレートのエクスポート
それでは構築した仮想マシンからOVFテンプレートをエクスポートします。OVFテンプレートをエクスポートするには仮想マシンをシャットダウンしておく必要があります。


しばらくすると次の4つのファイルがダウンロードされます。

S3へファイルのアップロード
先ほどダウンロードした4つのファイルの中からvmdkファイルのみS3にアップロードします。今回は専用のバケットを作成しました。


ロールの作成
S3からイメージファイルのダウンロードをしたりする必要があるためロールを作成します。
次のようなjsonファイルを作成してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
次のコマンドでロールを作成します。
$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
{
"Role": {
"Path": "/",
"RoleName": "vmimport",
"RoleId": "AROAUC6VD3XAAD52A32TI",
"Arn": "arn:aws:iam::281230433728:role/vmimport",
"CreateDate": "2019-11-05T07:26:59Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "vmie.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:Externalid": "vmimport"
}
}
}
]
}
}
}
次に作成したロールにポリシーをアタッチします。次のようなJSONファイルを作成してください。ここのwaku-nagoya-vm-import-testはS3のバケット名です。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::waku-nagoya-vm-import-test",
"arn:aws:s3:::waku-nagoya-vm-import-test/*"
]
},
{
"Effect":"Allow",
"Action":[
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource":"*"
}
]
}
次のコマンドでポリシーをアタッチします。
$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
VM Import
次のコマンドでVM Importを開始します。
まずは次のようなJSONファイルを作成してください。S3BucketはS3のバケット名、S3Keyはvmdkのファイル名です。
[
{
"Description": "My Server OVA",
"Format": "vmdk",
"UserBucket": {
"S3Bucket": "waku-nagoya-vm-import-test",
"S3Key": "centos7-1.vmdk"
}
}]
次のコマンドでインポートを開始します。
$ aws ec2 import-image --description "My server VM" --disk-containers file://vmimport.json
{
"Description": "My server VM",
"ImportTaskId": "import-ami-0a938f000edf790f6",
"Progress": "2",
"SnapshotDetails": [
{
"DiskImageSize": 0.0,
"Format": "VMDK",
"UserBucket": {
"S3Bucket": "waku-nagoya-vm-import-test",
"S3Key": "centos7-1.vmdk"
}
}
],
"Status": "active",
"StatusMessage": "pending"
}
次のコマンドで進行状況を確認できます。
$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-0a938f000edf790f6
{
"ImportImageTasks": [
{
"Description": "My server VM",
"ImportTaskId": "import-ami-0a938f000edf790f6",
"Progress": "28",
"SnapshotDetails": [
{
"Description": "My Server OVA",
"DiskImageSize": 634796032.0,
"Format": "VMDK",
"Status": "completed",
"UserBucket": {
"S3Bucket": "waku-nagoya-vm-import-test",
"S3Key": "centos7-1.vmdk"
}
}
],
"Status": "active",
"StatusMessage": "converting"
}
]
}
28%となっています。現在は変換中のようです。
$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-0a938f000edf790f6
{
"ImportImageTasks": [
{
"Architecture": "x86_64",
"Description": "My server VM",
"ImportTaskId": "import-ami-0a938f000edf790f6",
"LicenseType": "BYOL",
"Platform": "Linux",
"Progress": "69",
"SnapshotDetails": [
{
"Description": "My Server OVA",
"DeviceName": "/dev/sda1",
"DiskImageSize": 634796032.0,
"Format": "VMDK",
"Status": "completed",
"UserBucket": {
"S3Bucket": "waku-nagoya-vm-import-test",
"S3Key": "centos7-1.vmdk"
}
}
],
"Status": "active",
"StatusMessage": "booted"
}
]
}
起動完了です。でもよく見るとまだ69%でした。焦らない焦らない。
$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-0a938f000edf790f6
{
"ImportImageTasks": [
{
"Architecture": "x86_64",
"Description": "My server VM",
"ImageId": "ami-0ff0cd74bae6291d6",
"ImportTaskId": "import-ami-0a938f000edf790f6",
"LicenseType": "BYOL",
"Platform": "Linux",
"SnapshotDetails": [
{
"Description": "My Server OVA",
"DeviceName": "/dev/sda1",
"DiskImageSize": 634796032.0,
"Format": "VMDK",
"SnapshotId": "snap-07fe133b417fdd7f3",
"Status": "completed",
"UserBucket": {
"S3Bucket": "waku-nagoya-vm-import-test",
"S3Key": "centos7-1.vmdk"
}
}
],
"Status": "completed"
}
]
}
これでやっと完了です。
AMIの起動
作成したAMIを起動してみます。


起動したCentOS7の動作確認
それでは起動したCentOS7の動作確認をしてみます。
$ ssh -i $key root@ec2-hoge.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-hoge.ap-northeast-1.compute.amazonaws.com (hoge)' can't be established.
ECDSA key fingerprint is SHA256:hoge.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-hoge.ap-northeast-1.compute.amazonaws.com,hoge' (ECDSA) to the list of known hosts.
root@ec2-hoge.ap-northeast-1.compute.amazonaws.com's password:
Last login: Tue Nov 5 15:10:54 2019
[root@ip-hoge ~]# ls
anaconda-ks.cfg test.txt
[root@ip-hoge ~]# cat test.txt
VM Import test
正常に動作しています!
念のため(お金の節約の意味も込めて)、今回作成したS3のバケットと、EC2インスタンス、IAMロールを削除しておきます。
最初、VM Importを始める前に心配だったのがVMの大きなイメージファイルをアップロードしてお金が結構かかるのでは?と思っていたのですが、今回の634MB程度のイメージファイルなら無料利用枠で十分利用できました。

-
前の記事
AWS EC2スナップショットの作成と復元 2019.11.01
-
次の記事
AWS EC2インスタンス Windows Server2019を作成してMacから接続 2019.11.06