VMware

[VMware/AWS] vShere VM을 내보내고 AWS로 가져오기(마이그레이션)

JuneJoon 2024. 6. 5. 18:16

안녕하세요?

 

AWS 관련 프로젝트를 검토 중에 AWS에서 제공하는 이미지가 아닌 외부의 이미지를 적용해야 하는 과정이 있어 작업을 테스트하고, 기록하기 위해 글을 포스팅하게 되었습니다.

 

AWS로 VM이미지를 가져오는 절차는 다음과 같습니다. 

 

1. 기존 환경에서 VM 이미지 내보내기 (OV/VMDK/VHD/VHDX 형식)

2. OVA로 컨버팅(필요시)

3. AWS S3로 업로드 

4. AWS AMI 로 컨버팅 

 

이번 테스트의 경우 VMware의 vShere 의 이미지를 내보낸 후 AWS의 AMI에 등록하는것을 목표로 진행하였습니다  

 

1. 내보내기 (Export)

처음에 별생각 없이 사용 중인 VM을 그대로 내보낸 후 AWS에 올려보니, 다양한 에러가 발생하였습니다. 문서를 찾아보니 다른플랫폼의 VM을 가져오는 것이기 때문에  어느 정도 후처리를 필수로 진행해 줘야 합니다. Windows 기준으로 여러 가지 있지만, 몇 가지 적어보자면.. 

 

* VMtools 제거 

* 생성된 모든 계정에 패스워드 설정 

* CDROM 디바이스 제거 

*Net Framework 4.5이상 설치 

* DHCP Client,  RDP 허용 설정 

 

개인적으로는 VM Tools가 가장 문제가 되는것 같았습니다. 단순히 프로그램 제거를 통해 제거를 할 경우 완벽하게 지워지지 않는 경우가 있기 때문에 꼭 확인해 보아야 합니다. 

 

2. OVA 컨버팅 

제 경우에는 vSphere에서 OVF  형식으로 이미지를 내보낸 후 OVA Tools로 컨버팅을 진행하였습니다. 

#예시 
ovftool.exe [OVF 및 구성파일저장위치] [생성될 OVA 파일 위치]

 

3. S3 업로드 

AMI를 등록할 계정의 S3에 OVA파일을 업로드 합니다. 

 

4. AWS AMI 로 컨버팅

AWS CLI를 통해 S3에 저장된 OVA를 AMI로 컨버팅 하면 되는데... 

적절한 IAM 역할과 정책을생성 후 할당하지 않으면 권한문제로 컨버팅이 되지 않는다.

 

a. 역할 생성 - VM import Role (JSON)

# vmimport할 수 있는 역할을 생성한다
# CLI나 UI를 통해서 생성한다. 

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:Externalid": "vmimport"
            }
         }
      }
   ]
}

 

b. 정책 생성 (JSON) 

# OVA 가 저장된 S3에 대한 정책을 생성한다. 
# AWS CLI나 UI를 통해 생성한다.

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:getObject"
        ],
        "Resource": [
            "arn:aws:s3:::[S3 이름]",
            "arn:aws:s3:::[S3 이름]/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
        ],
        "Resource": "*"
    }
]
}

 

c. 변환 설정 

역할 및 정책 설정이 완료되었다면, 커버팅을 위한 json파일을 생성합니다.

[
  {
    "Description": "ova에 대한 디스크립션 입력",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "s3 이름 및 입력",
        "S3Key": "ova 파일명 입력(ex) test.ova"
    }
  }
]

 

생성한 JSON을 통하여 CLI를 통해 작업을 요청합니다.

#예시 
aws ec2 import-image --description "설명" --disk-containers "file://[JSON파일의 경로]"

 

변환 진행사항은 ImportTaskId를 통해 검색이 가능합니다.

#예시
aws ec2 describe-import-image-tasks --import-task-ids "[ImportTaskId 값]"

 

Status가 Completed가 되면 AMI에서 확인이 가능하며, 바로 사용이 가능합니다. 

개인적으로는, V2V 마이그레이션과 같이 상이한 플랫폼간의 드라이버 충돌이슈가 조금많은 편이였습니다.

(부팅은 되나, 시스템이 꺠져 UI가 작동을 안한다던지 하는..) 

진행하실때, 최대한 불필요한 드라이버나 유틸을 제거 후 컨버팅을 진행하는편이 안전하다고 생각됩니다. 

 

그럼 다음에 뵙겠습니다.

읽어주셔서 감사합니다. 

반응형

'VMware' 카테고리의 다른 글

[VMware] VMworld 2021 개최!  (0) 2021.09.25