포스트

AWS AMI VM 이미지 내보내기

AWS AMI VM 이미지 내보내기

개요

AMI를 가상 머신에서 사용가능하도록 추출하거나 반대로 가상 머신 이미지를 AMI로 생성하는 방법을 알아보자.

사전 조건1

  • AWS CLI 설치
  • Amazon S3 버킷
  • vmimport IAM 역할

고려사항2

여러가지 고려사항이 있지만 우선적으로 확인해야할 고려사항만 간추렸다.

  • VM Import/Export는 동일한 계정의 S3 버킷으로 VM 내보내기만 지원
  • 블록 디바이스가 암호화된 EBS 볼륨은 내보내기 불가
  • Windows 이미지, SQL Server, AWS Marketplace 이미지는 내보내기 불가
  • 다른 AWS 계정에서 공유받은 이미지는 내보내기 불가
  • 1TiB보다 큰 볼륨은 VM 지원되지 않음

작업

1. S3 버킷 생성

VM Export된 이미지를 저장한 S3 버킷 생성이 필요하다.

버킷이름: vmimport-123456789012

2. IAM 역할 생성

신뢰 정책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "vmie.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:Externalid": "vmimport"
        }
      }
    }
  ]
}
IAM 정책

정책 후 생성 후 역할에 연결한다.

Resource는 위에서 생성한 S3 버킷 arn을 지정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::<vmimport-123456789012>",
        "arn:aws:s3:::<vmimport-123456789012>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::<vmimport-123456789012>",
        "arn:aws:s3:::<vmimport-123456789012>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:ModifySnapshotAttribute",
        "ec2:CopySnapshot",
        "ec2:RegisterImage",
        "ec2:Describe*"
      ],
      "Resource": "*"
    }
  ]
}

3. 이미지 내보내기

export-image 명령어를 사용해서 이미지를 내보낸다.

이 때 지원되는 디스크 이미지 포맷은 VMDK, RAW, VHD 세가지이다.

포맷설명용도
VMDKVMWare 가상 머신 디스크 이미지VMWare vSphere/ESxi, Workstation, Fusion에서 사용
RAW블록 디바이스 이미지클라우드 및 온프레미스에서 직접 사용하거나 QEMU/KVM과 같은 환경에서 사용
VHDMicrosoft Hyper-V 가상 머신 디스크 이미지Hyper-V 환경으로 마이그레이션 또는 Azure 클라우드에서 사용
export-image 명령어 실행

VMDK를 사용해서 VMWare에서 사용 가능한 이미지를 내보내기한다.

1
aws ec2 export-image --image-id <ami-id> --disk-image-format VMDK --s3-export-location S3Bucket=<vmimport-123456789012>,S3Prefix=export/ --region <region>
출력 결과
1
2
3
4
5
6
7
8
9
10
11
12
{
  "DiskImageFormat": "VMDK",
  "ExportImageTaskId": "export-ami-abcd1234",
  "ImageId": "ami-abcd1234",
  "Progress": "0",
  "S3ExportLocation": {
    "S3Bucket": "vmimport-123456789012",
    "S3Prefix": "export/"
  },
  "Status": "active",
  "StatusMessage": "validating"
}
진행률 확인
1
aws ec2 describe-export-image-tasks --export-image-task-ids export-ami-abcd1234 --region <region>
출력 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "ExportImageTasks": [
        {
            "ExportImageTaskId": "export-ami-abcd1234",
            "ImageId": "ami-abcd1234",
            "Progress": "60",
            "S3ExportLocation": {
                "S3Bucket": "vmimport-123456789012",
                "S3Prefix": "export/"
            },
            "Status": "active",
            "StatusMessage": "updating",
            "Tags": []
        }
    ]

Ref.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.