# OVA 파일을 통해 AMI 를 만들기 위한 IAM Policy
{
"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",
"s3:PutObjectAcl",
"s3:PutBucketAcl"
],
"Resource": [
"arn:aws:s3:::<S3 Bucket>",
"arn:aws:s3:::<S3 Bucket>/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:CancelConversionTask",
"ec2:CancelExportTask",
"ec2:CreateImage",
"ec2:CreateInstanceExportTask",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeConversionTasks",
"ec2:DescribeExportTasks",
"ec2:DescribeExportImageTasks",
"ec2:DescribeImages",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeInstanceStatus",
"ec2:DescribeInstances",
"ec2:DescribeSnapshots",
"ec2:DescribeTags",
"ec2:ExportImage",
"ec2:ImportInstance",
"ec2:ImportVolume",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"ec2:ImportImage",
"ec2:ImportSnapshot",
"ec2:DescribeImportImageTasks",
"ec2:DescribeImportSnapshotTasks",
"ec2:CancelImportTask"
],
"Resource": "*"
}
]
}
일단 AWS 에서 명령을 실행할 User 또는 Role 에 대한 권한이 위와 같이 있어야 한다.
S3 는 ova 가 위치할 버킷이며, EC2 는 AMI 를 생성하기 위함이다.
작성자는 ovftool을 사용하여 OVF 파일을 OVA 파일로 변환해보도록 하겠다.
ovftool 다운로드 링크를 통해 ovftool을 다운로드 받으실 수 있다.
$ ls
pbiinfra1-disk1.vmdk
pbiinfra1-file1.nvram
pbiinfra1-file1.mf
pbiinfra1-file1.ovf
config.json
OVF(Open Virtualization Format) 파일과 OVA(Open Virtual Appliance) 파일은 가상 머신 및 가상화 환경에서 가상 머신 이미지를 배포, 공유 및 관리하는 데 사용되는 포맷이다.
OVF는 여러 파일을 패키지로 포함하며 .ovf
, .mf
, .vmdk
, .nvram
파일 등으로 구성된다.
config.json 은 ovf 파일 변환이 완료된 ova 파일의 이미지를 만들기 위한 정보들이 기입되어 있다.
$ ovftool.exe .\pbiinfra1.ovf .\pbiinfra1.ova
Opening OVF source: .\pbiinfra1.ovf
The manifest validates
Opening OVA target: .\pbiinfra1.ova
Writing OVA package: .\pbiinfra1.ova
Transfer Completed
Completed successfully
ovftool을 사용하여 OVF 파일을 OVA 파일로 변환한다.
참고로 ovftool 명령어 사용 시 환경 변수 경로가 잡혀있지 않다면, 추가적으로 잡아주도록 하자!
$ ls
pbiinfra1-disk1.vmdk
pbiinfra1-file1.nvram
pbiinfra1-file1.mf
pbiinfra1-file1.ovf
pbiinfra1-file1.ova
config.json
완료 시 위와 같이 Completed successfully을 확인하실 수 있고, 지정한 이름으로 ova 파일을 생성을 완료 하였다.
$ aws ec2 import-image --description "My server VM" --disk-containers "file://C:\Users\admin\Desktop\import\config.json"
{
"Description": "My server VM",
"ImportTaskId": "import-ami-036b5bxxxxxxxxxx",
"Progress": "1",
"SnapshotDetails": [
{
"Description": "pbiinfra1",
"DiskImageSize": 0.0,
"Format": "OVA",
"UserBucket": {
"S3Bucket": "<S3 Bucket>",
"S3Key": "pbiinfra1.ova"
}
}
],
"Status": "active",
"StatusMessage": "pending"
}
사용할 명령어는 위와 같으며, 파일을 사용하여 disk-containers
매개 변수에는 아래와 같은 json 파일을 읽어 AMI 로 생성을 하게 된다.
# config.json 예시
[
{
"Description": "pbiinfra1",
"Format": "ova",
"UserBucket": {
"S3Bucket": "<S3 Bucket>",
"S3Key": "<file.ova>"
}
}
]
# 다른 예시
[
{
"Description": "My Server OVA",
"Format": "ova",
"Url": "s3://amzn-s3-demo-import-bucket/vms/my-server-vm.ova"
}
]
좀 더 자세한 내용은 아래 링크를 통해 확인할 수 있다.
링크 : VM을 이미지로 가져오기
여기서 추가적으로 진행되는 상태를 확인하고자 하신다면 아래와 같이 입력하여 상태를 확인할 수 있다.
$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-036b5bxxxxxxxxxx
# 생성중
{
"ImportImageTasks": [
{
"Description": "My server VM",
"ImportTaskId": "import-ami-036b5bxxxxxxxxxx",
"Progress": "19",
"SnapshotDetails": [
{
"DiskImageSize": 13853794816.0,
"Format": "VMDK",
"Status": "active",
"UserBucket": {
"S3Bucket": "<S3 Bucket>",
"S3Key": "pbiinfra1.ova"
}
}
],
"Status": "active",
"StatusMessage": "converting",
"Tags": []
}
]
}
# Status 상태에서 "completed" 시 완료
{
"ImportImageTasks": [
{
"Architecture": "x86_64",
"Description": "pbiinfra1 VM",
"ImageId": "ami-0c1cf4xxxxxxxx",
"ImportTaskId": "import-ami-036b5bxxxxxxxxxx",
"LicenseType": "BYOL",
"Platform": "Linux",
"SnapshotDetails": [
{
"DeviceName": "/dev/sda1",
"DiskImageSize": 13853794816.0,
"Format": "VMDK",
"SnapshotId": "snap-04fac1257xxxxxxx",
"Status": "completed",
"UserBucket": {
"S3Bucket": "<S3 Bucket>",
"S3Key": "pbiinfra1.ova"
}
}
],
"Status": "completed",
"Tags": []
}
]
}
완료가 되었다면 AMI 이름에서 import-ami-xxxxx 으로 확인을 할 수 있으며, 해당 AMI 를 통해 EC2를 생성할 수 있다.