본문 바로가기
DevOps/AWS

EC2에서 Windows 7/8/10 설치하기 (aka.AWS EC2에서 레거시 VM 운영하기)

by YangsDev 2020. 1. 6.

서비스를 운영 해본 사람들은 다 알겠지만, 가장 힘들고 짜증 나는것은 장애 입니다.
그 중에서도 제일 화가 나는것은 하드웨어적인 장애가 발생 할 경우 운영의 입장에서 정말 답이 안나오기 시작합니다.

<서버를 고치는 엔지니어의 모습>

요즘 기업들은 위에서 이야기한 고질적인 인프라적 문제를 해결 하고 더 효율적인 스케일링과 관리를 위하여,

AWS와 같은 가상화 서비스로 넘어가는 경우가 많습니다.


자세한 내용이 궁금하시면 여기를 클릭해보세요

제가 다니고 있는 회사도, 레거시 AWS로 서비스를 이전하고 있는데
이번 기회에 스케일링과 하드웨어적인 문제가 복합적으로 있지만 중요한 내부 시스템을 AWS 인프라로 옮겨서 운영하자라는 이야기가 나왔고, 당시 AWS 이전을 어느정도 담당하고있던 제가 진행하게 되었습니다.

해당 팀의 요구사항을 정리해보니 아래와 같았습니다.

1. 언제나 가상화 장비는 유연하게 늘어날수있는 인프라 구성 이어야한다.

2. 시스템은 IOPS가 높기 떄문에 하드웨어 퍼포먼스가 어느정도 유지되어야 한다.

3. 최소한 Windows Server 시리즈로 설치 할 수 없고, Windows 7으로 설치 되어야 한다.

 

처음에 이 내용을 듣고, 1~2번 요구사항은 이미 AWS에서 잘 지원을 해주기 때문에 아무런 걱정이 없었으나, 3번이 가장 큰 문제였습니다.

클라이언트 OS를 공식 지원하지 않는 AWS

AWS에서는 현재 Server 계열의 OS이미지들에 대해서만 공식 이미지를 제공하고 있습니다.

<서버 계열만 지원하는 AWS ㅠㅠ>

즉, Windows 7/8/10등의 클라이언트 OS는 공식 이미지를 제공하지 않기때문에 EC2에 설치가 힘든게 현실입니다.

이렇게 AWS로 이전은 안되는것인가, 좌절을 하던중에 AWS 공식 글에서 재미있는 글을 하나 발견하였습니다.

 

https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html

Importing a VM as an Image Using VM Import/Export

docs.aws.amazon.com

 

AWS에서 기존에 사용하던 VM을 AMI(Amazone Machine Image)로 변환 할 수 있도록 지원을 하고 있는것입니다.

<하..AWS는 아직 우리를 버리지 않았습니다>

 

시작하기

자신의 컴퓨터에 가상화 프로그램으로 기본 이미지를 셋팅해봅시다.
수많은 가상화 프로그램이 있지만, 그중에 저는 VirtualBox를 선택하여 셋팅해보도록 하겠습니다.

VM셋팅 및 이미지 셋팅

기존의 설정은 모두 여러분의 입맛에 맞게 설정을 해주시고, 디스크 생성시 VHD (가상 하드 디스크)만 선택해줍니다.
(어짜피, EC2로 가면 셋팅할때 설정으로 다 변경되니 여기서 굳이 고민하거나 하면서 힘은 안빼도 될 것 같습니다)

자 일단 기본적인 설정은 완료 되었습니다. 이 상태에서 그냥 윈도우 설치를 해보도록 합시다.

이럴땐 역시 커피 한잔의 여유를 가지며 조용히 설치가 완료될때까지 기다려 줍니다.

드디어, 기다리고 기다리던 OS 설치가 완료되었습니다.
여기서 한가지 주의 해주셔야 하는 부분은 해주셔도 무관하긴하지만, Virtual Box Tool은 설치하지 않는것을 추천합니다.

설정에서 원격 데스크톱 사용 설정도 해주시고, 절전 모드 해제까지 해주시면 이미지 셋팅은 완료 됩니다.

VM 이미지 업로드

이미지 준비가 완료되면 VBox 폴더 안에 우리가 생성했던 디스크 이미지를 Amazone S3 Storage에 업로드 해보겠습니다.

먼저, VM 이미지를 업로드 할 버킷을 생성합니다.
여기서 주의해야 할 점은 리전을 선택할 때 자신이 AMI 이미지를 생성하고자 하는 리전으로 설정 해주셔야 합니다.

저의 경우에는 “windows-os-image” 라고 생성했습니다.

자 이제 VHD이미지를 S3에 업로드 해야하는데, 여러가지 방법이 있지만 저의 경우에는 AWS CLI Tool을 활용하여 업로드 해보겠습니다.

VM IMPORT 권한 설정

업로드가 진행되는 동한 AMI 이미지 생성을 위한 권한을 설정해보도록 하겠습니다.

policy.json이라는 파일을 생성하고 아래의 json을 생성합니다.

 

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

 

 

그리고 AWS CLI를 통해 AWS에 VM import/export를 할수있는 정책을 생성하는 명령을 내려줍니다.

aws iam create-role --role-name vmimport --assume-role-policy-document file://경로

그리고 이제 S3와 EC2 시스템간의 권한을 생성 해보도록 하겠습니다.

먼저 아래의 정책 Json을 생성해줍니다.
저는 policy_import.json이라고 생성하였습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::windows-os-image"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::windows-os-image/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifySnapshotAttribute",
                "ec2:CopySnapshot",
                "ec2:RegisterImage",
                "ec2:Describe*"
            ],
            "Resource": "*"
        }
    ]
}

해당 룰 파일과 아까 생성한 vmimport 정책을 연결 해줍시다.

aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://경로

자, 이제 VM을 Import 할 준비가 완료 되었습니다.

IAM 이미지 생성

제가 위에서 말씀드린 모든 절차를 성공하셨다면, 여러분들이 로컬에서 만든 VM을 EC2에서 Import 할 준비는 모두 완료되었습니다.

이제 AWS에게 “내가 만든 이미지를 기반으로 VM을 생성해!” 라는 명령을 내려보도록 하겠습니다.

먼저 명령을 정의한 json 파일을 생성하겠습니다.

[
    {
        "Description": "Windows 7 Public Image ",
        "Format": "vhd",
        "UserBucket": {
            "S3Bucket": "windows-os-image",
            "S3Key": "win7.vhd"
        }
    }
]

AWS CLI를 통해 AWS서버에 명령을 내려보도록 하겠습니다.

aws ec2 import-image --license-type BYOL --disk-containers file://파일경로

자 이렇게 작업에 대한 내용이 AWS에서 반환되어 돌아오면 AWS에서 자동적으로 여러분들이 만든 VM Image를 AMI로 생성합니다.

이제 완료가 될 때까지 기다리기만 하면 EC2에서 Windows 7을 실행할 수 있습니다.

VM Import Task 상태 확인

위에서 기다리기만 하면 된다고 이야기 했지만,
얼마나 기다려야 할지도 모르겠고 택배로 치면 옥천에 들어간 기분을 느낄 수 있습니다.
내가 넣은 Task가 완료되었는지 알아보도록 하겠습니다.

아까 import를 완료 하고나서 나온 Json을 보면

{
    "Status": "active",
    "LicenseType": "BYOL",
    "SnapshotDetails": [
        {
            "UserBucket": {
                "S3Bucket": "windows-os-image",
                "S3Key": "win7.vhd"
            },
            "DiskImageSize": 0.0,
            "Format": "VHD"
        }
    ],
    "Progress": "2",
    "StatusMessage": "pending",
    "ImportTaskId": "import-ami-fgok8m2q"
}

“ImportTaskId”라는 Key가 존재합니다.
이 Key는 Task에 대한 고유한 키이고, 이 키를 통해서 상태를 조회할 수 있습니다.

AWS CLI에 아래와 같은 명령을 내려봅시다.

aws ec2 describe-import-image-tasks --import-task-ids [위에서 나온 ImportTaskId]

저의 작업은 아직 완료가 안되었네요.

이 글을 적기 전에 제가 테스트를 해본 결과로는 거의 30분 ~ 40분 정도 걸리는 작업 이더라구요.
제발 에러가 나지 말아달라고 기도하면서 잠시 기다리시면 될 것 같습니다.

VM시작하기

드디어 모든 작업이 완료되고 생성한 이미지를 통해 EC2 VM을 생성해보도록 하겠습니다.

일반적으로 VM 생성할때 처럼 Launch Instanse를 선택해주시고, 왼쪽 서브 메뉴에 My AMIs 메뉴를 선택해줍니다.

우리가 힘들게 만든 IAM 이미지가 저기 보입니다. 해당 이미지를 선택 합니다.

그리고 자신의 자금 상황에 맞는 Instance를 선택해주시고 Review & Launch를 눌러줍니다.

방금 생성한 인스턴스가 Running 상태로 바뀌고 나면 원격 데스크탑을 통해 접속 해봅시다.

짜잔 드디어 설치가 완료되었습니다.

마치며

이 방법이 가능한것은 AWS에 Xen 시스템을 기반으로 가상화 시스템이 동작하고 있기 때문에 가능한것이라고 생각됩니다.

레거시 VM을 AWS로 옮기는 작업 역시 제가 했던 방법 그대로 이전이 가능하기때문에,
레거시 VM을 그대로 운영하지만 하드웨어적인 관리를 줄이고, Auto Scaling로 서비스 운영이 필요 하다면 이 방법을 통해 추천하긴합니다만..

다만, 굳이 Windows Client OS를 쓰지 않는 경우라면 AWS에서 최적화된 Server OS Image를 사용하시는것을 추천합니다.

처음 적어보는 글이라, 두서가 없지만 끝까지 읽어주셔서 감사합니다.

부록. Amazon WorkSpaces

그리고 사실 AWS에는 Amazon WorkSpaces라는 VDI같은 서비스를 제공합니다.
단순하게 Windows만 필요하다 라는 분은 Amazon WorkSpaces가 조금 더 적합하지 않을까 싶습니다.

댓글0