「ステップ 3: イメージとして VM をインポートする - VM Import/Export」に基づいて OVA ファイルをアップロードして AMI にする手順をまとめた。
S3 バケットの作成
OVA ファイルをいったん S3 バケットにアップロードする必要があるため、バケットを作成する。
- https://console.aws.amazon.com/s3/ にアクセス
- 「バケットを作成する」ボタンを押下
① 名前とリージョンで以下の指定を実施
- 「バケット名」に任意の文字列を入力
- 「リージョン」に適切なリージョン(通常は「アジアパシフィック(東京)」を指定
- 「次へ」ボタンを押下
② プロパティの設定
- 必要に応じて設定
- 「次へ」ボタンを押下
③ アクセス許可の設定
- (「パブリックアクセス許可を管理」を開き「認証済みの AWS ユーザー」の「読み込み」をチェック)
- 「次へ」ボタンを押下
④ 確認
- 「バケットを作成」ボタンを押下
awscli のインストール
brew install awscli
aws configure
今回は Mac で作業したので Homebrew でインストール。環境に応じて適宜対応。
サービスロールの作成
ポリシーの作成
cat << "_EOF_" > trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
_EOF_
aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
create-role コマンドで vmimport
というロールを作成する。
ロールへのポリシーのアタッチ
cat << "_EOF_" > role-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::disk-image-file-bucket"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::disk-image-file-bucket/*"
]
},
{
"Effect": "Allow",
"Action":[
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
_EOF_
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
disk-image-file-bucket
(2箇所) は適宜変更のこと。
put-role-policy コマンドで上記で作成したロールにポリシーをアタッチする。
OVA ファイルのアップロード
aws s3 cp disk-image-file.ova s3://disk-image-file-bucket/
カレントディレクトリーにある disk-image-file.ova ファイルを disk-image-file-bucket バケットにアップロードする。
OVA ファイルのインポート
cat << "_EOF_" > containers.json
[
{
"Description": "OVA Disk Image",
"Format": "ova",
"UserBucket": {
"S3Bucket": "disk-image-file-bucket",
"S3Key": "disk-image-file.ova"
}
}
]
_EOF_
aws ec2 import-image --description "OVA Disk Image" --disk-containers file://containers.json
JSON ファイル内に "Description":
があるが、オプションでも --description
を指定しないと以下のエラーが出る。
A client error (InvalidParameter) occurred when calling the ImportImage operation: The service role <vmimport> does not exist or does not have sufficient permissions for the service to continue
ステータスの確認
aws ec2 describe-import-image-tasks --import-task-ids import-ami-XXXXXXXX
IMPORTIMAGETASKS OVA Disk Image import-ami-XXXXXXXX 2 active pending
SNAPSHOTDETAILS 0.0 OVA
USERBUCKET disk-image-file-bucket disk-image-file.ova
IMPORTIMAGETASKS OVA Disk Image import-ami-XXXXXXXX 28 active converting
SNAPSHOTDETAILS 771973632.0 VMDK
USERBUCKET disk-image-file-bucket disk-image-file.ova
IMPORTIMAGETASKS OVA Disk Image import-ami-XXXXXXXX 30 active updating
SNAPSHOTDETAILS 771973632.0 VMDK
USERBUCKET disk-image-file-bucket disk-image-file.ova
IMPORTIMAGETASKS OVA Disk Image import-ami-XXXXXXXX 37 active updating
SNAPSHOTDETAILS 771973632.0 VMDK
USERBUCKET disk-image-file-bucket disk-image-file.ova
IMPORTIMAGETASKS x86_64 OVA Disk Image import-ami-XXXXXXXX BYOL Linux 59 active booting
SNAPSHOTDETAILS /dev/sda1 771973632.0 VMDK
USERBUCKET disk-image-file-bucket disk-image-file.ova
IMPORTIMAGETASKS x86_64 OVA Disk Image ami-XXXXXXXX import-ami-XXXXXXXX BYOL Linux completed
SNAPSHOTDETAILS /dev/sda1 771973632.0 VMDK snap-XXXXXXXXXXXXXXXXX
USERBUCKET disk-image-file-bucket disk-image-file.ova
watch
コマンドを使ってもいいかもしれない。