Amazon Web Services 한국 블로그

EC2 전용 호스팅으로 자체 라이센스로 윈도 서버 구동하기

얼마전 서울 리전에 Amazon EC2 전용 호스팅(Dedicated Hosting) 기능을 공개 되었습니다. 이 기능은 고객 전용의 EC2 인스턴스 용량을 갖춘 물리적 서버입니다. 전용 호스팅을 사용하면 기존 서버에 한정된 소프트웨어 라이선스를 사용할 수 있으므로 규정 준수 요구 사항을 해결하면서 비용도 절감할 수 있습니다. (자세한 기능 소개를 참고 하시기 바랍니다.)

오늘은 여러분이 기존 회사나 집에 Microsoft Windows 의 라이센스를 가지고 있고, 그대로 AWS 상에서 사용을 하고자 할 경우, 이 때  소켓 혹은 물리적 코어에 한정된 라이센스 약관을 해결할 수 있는 방법으로 Amazon EC2 전용 호스팅 사용 방법을 알아보겠습니다.

기존 소프트웨어 라이선스에 약관에 따르면, Microsoft Windows Server, Microsoft SQL Server, SUSE Linux Enterprise Server, Red Hat Enterprise Linux  등은 소켓당, 코어당 또는 VM 소트프웨어당 라이선스를 사용할 수 있습니다.

여러분이 전용 호스팅 서버를 선택하면 하나의 물리적인 서버가 할당됩니다. 본인의 EC2 인스턴스를 이 전용 호스트에 올려 실행할 수 있습니다. 즉, 특정 물리 서버에 본인이 원하는 사이즈의 인스턴스를 직접 배치함으로써 제어 및 가시성 역시 강화할 수 있습니다. 금융 등 기업 규정 및 규제가 존재하는 곳에서는 그 요구사항을 충족하는 구성이 가능하게 된다는 점에서 중요한 부분이라 할 수 있습니다.

Amazon EC2 전용 호스트 생성
전용 호스팅으로 본인의 라이선스를 그대로 적용하려면 기존에 운영하던 서버를 그대로 옮겨와야 합니다. 여러분이 Microsoft Windows 서버를 가상환경에서 운영을 하고 있는 경우, 온프레미스 환경의 윈도우 서버 이미지를 VM Import 기능을 이용해서 전용 호스트 위로 이동시킬 수 있습니다.

이 문서에서는VM Import기능을 이용해서 여러분의 윈도우 서버를 전용 호스트로 옮기는 방법을 살펴보도록 하겠습니다.

먼저 전용호스트를 생성합니다. 전용 호스트를 만드는 것은 매우 간단합니다. 콘솔의 EC2 에서 좌측 메뉴를 보면 “dedicated host”란 항목이 존재합니다.


[그림 1] dedicated host 메뉴

dedicated host 메뉴를 들어가서 상단에 존재하는 Allocate Dedicate Host 버튼을 눌러 원하는 전용 호스트를 생성합니다. 생성할 때 인스턴스 타입을 선택하게 되는데, 이는 전용 호스트에 올릴 수 있는 인스턴스 타입을 의미합니다.

m4.large 인스턴스 타입을 선택해서 호스트를 생성한 결과가 그림 2입니다. 하단의 정보를 보면 물리적 코어갯수(Physical Cores), 소켓수(Sockets) 등을 확인할 수 있습니다.


[그림 2] 전용 호스트 생성 모습

Windows VM Import 사전준비
여러분이 가상화 환경을 사용한다면 운용중인 서버 이미지를 생성해서 VM Import를 사용해서 AWS로 이동 시킬 수 있습니다. 작업을 하기 전에 먼저 확인을 해야하는 사항들이 존재합니다. 크게 보면 지원하는 O/S종류와 생성하는 이미지 파일의 포맷입니다. (더 자세한 정보는 기술 문서를 참고하시기 바랍니다.)

여기에는 지원하는 각종 O/S 종류와 지원이 안되는 종류(예를 들어 32비트 버전 Microsoft Windows 2012 R2)등이 자세히 기록되어 있습니다. 지원 이미지 형식은 RAW, 정적 혹은 동적 VHD, 스트림 최적화 ESX VMDK, OVA 형식입니다.

여기서는 OVA이미지 형식으로 만들었다고 가정합시다. (이 단계는 각자의 가상화 환경에 따라 다를 수 있으므로 자세한 기술은 피하도록 하겠습니다. 다만 위에 기술되어 있는 지원 가능한 이미지 형식으로 전환하시기를 바랍니다.)

제 경우는 맥 윈도우 환경에서 vmware fusion을 사용하는 환경에서 OVA를 만들어 보았습니다. 이 경우에는 vmware fusion이 메뉴에서 Export 기능을 지원하지 않아 ovftools을 이용해서 만들었습니다. 명령을 실행하기 위해서는 /Applications/VMware Fusion.app/Contents/Library/VMware OVF Tool 디렉토리로 이동해서 다음과 같은 명령을 실행합니다.

명령의 실행 예는 아래와 같습니다.

$ ./ovftool --acceptAllEulas   /Users/seon/Documents/vmware/win.vmwarevm/win81.vmx /Users/seon/Documents/win81.ova

그 다음은 두 가지를 준비해야 합니다. 생성된 OVA를 Import하기 위한 역할과 이미지가 올라갈 S3 버킷의 설정입니다. 먼저 S3 버킷을 적절히 생성합니다. 여기서는 서울 리전에seon-vmimport-2016 라는 이름으로 생성을 했습니다.

그 다음은 역할을 설정합니다. vmimport라는 역할을 생성합니다. 다음 링크의 json을 이용해서 생성합니다. (더 자세한 것은 기술 문서를 참고하시기 바랍니다.)

명령어는 다음과 같이 실행합니다.

$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

그 다음은 역할에 적용할 정책입니다. Role-policy.json이란 정책을 적용합니다. 이때 중요한 점은 이 정책에서 앞서 생성한 S3 버킷의 이름을 정확히 지정해서 주어야 한다는 점입니다. 다음 소스에서 붉은 색으로 된 부분이 버킷이름입니다.

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

다음 명령으로 위의 정책을 역할에 적용합니다. 설명서에 나와 있는대로 role-policy.json 이라는 json 파일을 이용해서 역할을 생성합니다.

$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

마지막으로 IAM 유저로 작업을 할 경우에는 그에 적절한 권한이 주어져아 하는데, 필요한 권한은 기술 문서를 통해서 확인할 수 있습니다.

VM의 준비
윈도우즈나 리눅스의 경우 해당 이미지를 생성할 때 O/S 내부에서 몇 가지 설정을 바꿔 줄 필요가 있습니다. 예를 들어 윈도우즈의 경우 Vmware tool 을 제거한다든가, RDP 를 활성화 한다던가 하는 작업이 필요합니다. 사전 준비내용은 기술 문서에서 확인할 수 있습니다.

O/S를 이 조건대로 설정한 이후에 이것을 OVA  파일등으로 이미지로 만듭니다. 이후에 앞서 만든 버킷에 업로드를 합니다. 아래 명령을 이용해 앞서 만든 버킷에 올리도록 하겠습니다.

$ aws s3 cp win8.ova s3://seon-vmimport-2016/win8.ova

자 이제 모든 준비가 끝났습니다.

앞서 만든 OVA 파일을 임포트 해보겠습니다. 관련 정보는 기술 문서를 참조하시면 됩니다.

임포트에는 위 올린 버킷의 정보를 기술하는 containter.json을 이용해서 명령을 수행합니다.

[{
  "Description": "First CLI task",
  "Format": "ova",
  "UserBucket": {
  "S3Bucket": "seon-vmimport-2016",
  "S3Key": "win8.ova"
  }
}]

 

명령은 다음과 같습니다.

$ aws ec2 import-image --description "Windows 2008 OVA" --disk-containers file://containers.json

임포트 진행 상태는 다음으로 확인합니다.

$aws ec2 describe-import-image-tasks

응답 예는 다음과 같습니다.

{
"ImportImageTasks": [
  {
    "Status": "active",
    "Description": "Windows 2008 OVA",
    "Progress": "2", 
    "SnapshotDetails": [
      {
        "UserBucket": {
        "S3Bucket": "seon-vmimport-2016",
        "S3Key": "win8.ova"
      },
    "DiskImageSize": 0.0,
    "Format": "OVA"
   }
  ],
  "StatusMessage": "pending",
  "ImportTaskId": "import-ami-fgmj6b"
  }
 ]
}

만약 vmdk 이미지로 여러 파일로 나누어져 있는 형식이라면 container.json 을 다음과 같이 변경하기 바랍니다.

[{
    "Description": "First CLI task",
    "Format": "vmdk",
    "UserBucket": {
       "S3Bucket": "my-import-bucket",
       "S3Key": "my-windows-2008-vm-disk1.vmdk"
    }
},
{
    "Description": "Second CLI task",
    "Format": "vmdk",
    "UserBucket": {
       "S3Bucket": "my-import-bucket",
       "S3Key": "my-windows-2008-vm-disk2.vmdk"
}
}]

status가 completed 로 변경되면, 가져오기가 완료된 것입니다. 완료되면 EC2 콘솔의 전용호스트 메뉴의 “Action”에서 “Launch Instance(s) onto Host” 명령을 실행한후My AMIs 가면 가져오기가 성공한 이미지를 선택해서 런치할 수 있습니다.


[그림 3] 전용 호스트에서 가져온 이미지 런치

vm-import 기능은 한번만 수행해 보면 쉽게 사용할 수 있습니다. 전용 호스트를 사용해서 비용 절감 뿐 아니라 적절한 최적화 인스턴스를 사용하여 성능향상의 혜택까지 누리시길 바랍니다.

본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.