가상 디스크 가져오기

온프레미스 환경에 필요한 소프트웨어 및 구성이 포함된 가상 디스크(경우에 따라 골든 디스크 또는 골든 이미지라고도 함)가 있는 경우 이 가상 디스크를 Compute Engine으로 가져오고 그 결과로 생성된 이미지로 가상 머신을 만들어 시간을 절약할 수 있습니다. 가져오기 도구에는 VMDK와 VHD를 비롯한 대부분의 가상 디스크 파일 형식이 지원됩니다.

Compute Engine에서 디스크를 내보낸 경우 디스크에서 이미지를 만들 수 있습니다.

여러 가상 머신(VM)을 마이그레이션하는 자동화 시스템을 만드는 방법에 대한 자세한 내용은 VM을 Compute Engine으로 마이그레이션을 참조하세요.

시작하기 전에

Cloud Build API 사용 설정

가상 어플라이언스 가져오기 도구는 Cloud Build를 사용합니다.

대부분의 경우 gcloud compute images import는 Cloud Build 서비스 계정에 이러한 권한을 부여하려고 시도합니다. 하지만 이러한 권한을 수동으로 부여하여 필수 권한이 적용되도록 할 수 있습니다.

Console

  1. Cloud Build API를 사용 설정합니다.

    Cloud Build API 사용 설정

    Console에서 Cloud Build API를 사용 설정하면 Cloud Build 서비스가 인스턴스를 Compute Engine으로 가져올 수 있도록 Compute Engine이 Cloud Build 서비스 계정에 다음 역할을 부여합니다.

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    또한 가져오기 도구는 기본 Compute Engine 서비스 계정을 사용합니다. 기본적으로 Compute Engine 서비스 계정에는 Cloud IAM 프로젝트 편집자 역할이 있습니다. 이 역할을 삭제하면 가져오기 프로세스가 실패할 수 있습니다. 서비스 계정에 역할을 다시 추가하려면 액세스 권한 부여를 참조하세요. Compute Engine 기본 서비스 계정에 대한 자세한 내용은 Compute Engine 기본 서비스 계정을 참조하세요.

gcloud

gcloud 명령줄 도구를 사용하여 Cloud Build 서비스를 설정하려면 다음 단계를 따르세요.

  1. Cloud Build를 사용 설정합니다.

    gcloud services enable cloudbuild.googleapis.com

    또한 가져오기 도구는 기본 Compute Engine 서비스 계정을 사용합니다. 기본적으로 Compute Engine 서비스 계정에는 Cloud IAM 프로젝트 편집자 역할이 있습니다. 이 역할을 삭제하면 가져오기 프로세스가 실패할 수 있습니다. 서비스 계정에 역할을 다시 추가하려면 액세스 권한 부여를 참조하세요. Compute Engine 기본 서비스 계정에 대한 자세한 내용은 Compute Engine 기본 서비스 계정을 참조하세요.

  2. Cloud Build API의 서비스 계정에 compute.admin 역할을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Cloud Build API의 서비스 계정에 iam.serviceAccountUser 역할을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Cloud Build API의 서비스 계정에 iam.serviceAccountTokenCreator 역할을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    다음을 바꿉니다.

지원되는 운영체제

Compute Engine에서 가상 디스크를 부팅하려면 다음 운영체제 중 하나를 실행해야 합니다.

  • Linux 운영체제:
    • CentOS 6, CentOS 7, CentOS 8
    • Debian 8, Debian 9
    • Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 7, Red Hat Enterprise Linux 8
    • Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Ubuntu 18.04 LTS
    • SUSE Linux Enterprise Server 12, SUSE Linux Enterprise Server 15, OpenSUSE 15
  • Windows 운영체제:
    • Windows Server 2012, Windows Server 2012 R2, Windows Server 2012 R2 Core
    • Windows Server 2016 및 Windows Server 2016 Core
    • Windows Server 2019 및 Windows Server 2019 Core
    • Windows 7 SP1(32비트 및 64 비트, BYOL만 해당)
    • Windows 8.1(32비트 및 64비트, BYOL만 해당)
    • Windows 10, 버전 1709, 1803, 1903, 1909(32비트 및 64비트, BYOL만 해당)

제한사항

이 기능에는 다음과 같은 제한사항이 있습니다.

  • Linux 가상 디스크에서는 grub를 부트로더로 사용해야 합니다.
  • UEFI 부트로더는 Windows 또는 Linux에서 지원되지 않습니다.
  • Linux 가상 디스크는 Virtio-SCSI 스토리지 컨트롤러 기기 지원을 포함하여 커스텀 이미지와 동일한 요구사항을 충족해야 합니다.
  • Windows 가상 디스크에 설치하면 Carbon Black의 Cb Protection과 같은 애플리케이션 허용 소프트웨어로 인해 가져오기 프로세스가 실패할 수 있습니다. 가져오기 전에 이러한 소프트웨어를 제거해야 할 수도 있습니다.
  • RHEL이 실행 중인 가상 디스크를 가져올 경우 가져오기 전에 가상 디스크에 python-boto 패키지가 설치된 경우에만 BYOL(Bring Your Own License)이 지원됩니다.
  • 가상 디스크의 운영체제가 ACPI를 지원해야 합니다.

권한

이미지 가져오기 도구는 몇 단계를 거쳐 가상 디스크 파일을 가져옵니다. 단계에는 파일을 Cloud Storage에 업로드, 필요한 경우 새 버킷 만들기, Compute Engine에 파일 다운로드, 디스크 파일로부터 Compute Engine에 이미지 만들기 등이 포함됩니다. 이 프로세스는 자동으로 진행됩니다. 이 기능을 사용할 때 환경을 원활하게 사용하려면 계정에 다음 역할이 있는 것이 좋습니다.

  • roles/storage.admin
  • roles/viewer
  • roles/resourcemanager.projectIamAdmin

가져오기 프로세스는 워크플로의 일부로 기본 Compute Engine 서비스 계정을 사용합니다. 기본적으로 이 계정에는 프로세스에 충분한 roles/editor 권한이 있습니다. 그러나 Compute Engine 서비스 계정의 기본 역할 및 권한을 수정한 경우 서비스 계정에 다음 역할이 여전히 적용되어 있는지 확인합니다.

  • roles/compute.storageAdmin
  • roles/storage.objectViewer

가상 디스크 가져오기

호환성 확인

VM용 디스크를 가져오기 전에 VM에 사전 확인 도구를 다운로드하고 실행합니다. 사전 확인 도구는 가져오기 프로세스 실패나 Compute Engine에서 디스크 오작동의 원인이 되는 호환성 문제를 검사합니다.

부팅 가능한 가상 디스크 가져오기

Console

  1. Google Cloud Console에서 가상 디스크 파일을 Cloud Storage에 업로드합니다.
  2. 이미지 만들기 페이지로 이동합니다.

    이미지 만들기 페이지로 이동

  3. 이미지의 이름을 지정합니다.
  4. 소스에서 가상 디스크(VMDK, VHD 등)를 선택합니다.
  5. Cloud Storage 파일의 스토리지 위치를 탐색하거나 수동으로 입력합니다.
  6. 가져온 디스크에서 사용할 수 있는 운영체제를 선택합니다. 다음을 변경할 수도 있습니다.

    • 게스트 패키지 설치를 선택합니다. 게스트 환경을 설치하는 것이 좋습니다. 게스트 환경에 대한 자세한 내용은 게스트 환경을 참조하세요.

    • Windows 또는 Red Hat Enterprise Linux(RHEL) 운영체제의 경우 라이선스 옵션도 선택할 수 있습니다. Compute Engine에서 라이선스를 제공하도록 허용하거나 사용자 라이선스를 사용할 수 있습니다. Windows에서 사용자 라이선스 사용 방법에 대한 자세한 내용은 사용자 라이선스 사용을 참조하세요.

  7. (선택사항) 이미지의 추가 속성을 지정합니다. 예를 들어 이 이미지를 이미지 계열의 일부로 구성할 수 있습니다.

  8. 만들기를 클릭하여 이미지를 가져옵니다.

gcloud

gcloud compute images import 명령어를 사용하여 부팅 가능한 Compute Engine 이미지를 만듭니다. Compute Engine에서는 대부분의 부팅 디스크 이미지를 부팅할 수 있지만, import 명령어를 실행하면 인스턴스를 시작하고 SSH 또는 RDP를 통해 연결하는 데 필요한 필수 드라이버와 최신 게스트 환경 패키지가 디스크에 포함됩니다.

Cloud Storage 버킷이나 로컬 워크스테이션에서 가상 디스크 파일을 가져올 수 있습니다.

워크스테이션에서 가상 디스크 파일을 가져올 경우 가져오기 도구는 파일을 자동으로 Cloud Storage 버킷에 업로드합니다.

원하는 경우 가져오기 프로세스를 시작하기 전에 직접 가상 디스크 파일을 Cloud Storage에 업로드할 수 있지만 가져오기 프로세스에 사용할 프로젝트와 동일한 프로젝트의 스토리지 버킷에 파일을 업로드해야 합니다.

gcloud compute images import image-name \
    --source-file source-file \
    --os os

다음을 바꿉니다.

  • image-name: 대상 이미지의 이름입니다.
  • source-file: 가상 디스크 파일입니다. 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 제공할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용된 프로젝트의 스토리지 버킷에 있어야 하며, 파일 전체 경로를 gs://bucket-name/object-name 형식으로 지정해야 합니다.
  • os: --source-file의 운영체제이며, 지원되는 값 목록은 gcloud compute images import 명령어의 --os 플래그 옵션을 참조하세요.

    기존 라이선스가 포함된 이미지를 Google Cloud로 가져오는 방법은 Bring Your Own License(사용자 라이선스 사용)를 참조하세요.

로컬 파일을 지정하면 가상 디스크의 크기와 네트워크 연결 속도에 따라 업로드 작업에 시간이 오래 걸릴 수 있습니다. 디스크 크기에 따라 가져오기 작업을 실행하는 데 수십 분이 걸릴 수 있습니다.

명령어 샘플

다음은 gs://your_gcs_bucket에 저장된 my_server.vmdk라는 debian-9 가상 디스크를 가져오는 예시입니다.

gcloud compute images import my-imported-image \
    --source-file gs://your_gcs_bucket/my_server.vmdk \
    --os debian-9

선택적 매개변수

기본적으로 가져온 모든 부팅 디스크 이미지에 게스트 환경 패키지가 추가됩니다. 이 패키지를 사용하지 않으려면 가져오기 명령어에 --no-guest-environment 플래그를 추가합니다.

API

  1. 가상 어플라이언스를 Cloud Storage에 추가합니다.

  2. API에서 Cloud Build API에 대한 POST 요청을 만듭니다.

    POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=image-name",
           "-source_file=source-file",
           "-os=os",
           "-timeout=timeout",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"timeout",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    다음을 바꿉니다.

    • project-id: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • image-name: 가져올 이미지의 이름입니다.
    • timeout: 빌드가 실패하여 TIMEOUT 메시지가 나타나기 전에 빌드가 지속되는 최대 시간입니다. API에서 시간을 초 단위로 지정해야 합니다. 7200s의 제한 시간 값은 대부분의 상황에 적합합니다.
    • source-file: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.
    • os: 이미지의 운영체제입니다.

    제공할 수 있는 추가 args 값은 VM 이미지 가져오기 GitHub 페이지의 선택적 플래그 섹션을 참조하세요.

    응답 예시

    다음은 반환되는 출력과 비슷한 샘플 응답입니다.

    {
     "name": "operations/build/myproject-12345/operation-1578608233418",
     "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
       "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
       "status": "QUEUED",
       "createTime": "2019-09-20T15:55:29.353258929Z",
       "steps": [
        {
         "name": "gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env": [
          "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
         ],
         "args": [
          "-timeout=7056s",
          "-image_name=my-image",
          "-client_id=api",
          "-data-disk",
          "-source_file=gs://my-bucket/my-image.vmdk"
         ]
        }
       ],
       "timeout": "7200s",
       "projectId": "myproject-12345",
       "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com",
       "options": {
        "logging": "LEGACY"
       },
       "logUrl": "https://console.cloud.google.com/gcr/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456"
      }
    }
    

    빌드를 모니터링하는 몇 가지 방법은 다음과 같습니다.

    • 반환된 build-id를 사용하여 projects.builds.get 요청을 실행합니다.
    • 제공된 logUrl에서 호스팅된 로그를 검토합니다.

부팅할 수 없는 가상 디스크 가져오기

Console

  1. Google Cloud Console에서 가상 디스크 파일을 Cloud Storage에 업로드합니다.
  2. 이미지 만들기 페이지로 이동합니다.

    이미지 만들기 페이지로 이동

  3. 이미지의 이름을 지정합니다.
  4. 소스에서 가상 디스크(VMDK, VHD 등)를 선택합니다.
  5. Cloud Storage 파일의 스토리지 위치를 탐색하거나 수동으로 입력합니다.
  6. 운영체제에서 운영체제가 없습니다. 데이터만 있습니다를 선택합니다.
  7. (선택사항) 이미지의 추가 속성을 지정합니다. 예를 들어 이 이미지를 이미지 계열의 일부로 구성할 수 있습니다.
  8. 만들기를 클릭하여 이미지를 가져옵니다.

gcloud

gcloud compute images import 명령어를 사용하여 부팅할 수 없는 Compute Engine 이미지를 만듭니다. 가상 디스크에 부팅 가능한 운영체제가 설치되어 있지 않으면 --os 플래그 대신 --data-disk 플래그를 사용하여 가져올 수 있습니다. 이렇게 하면 드라이버와 게스트 환경 패키지를 설치하는 단계를 건너뛰므로 Compute Engine에서 이미지가 부팅 가능하게 됩니다.

gcloud compute images import image-name \
    --source-file source-file \
    --data-disk

다음을 바꿉니다.

  • image-name: 대상 이미지의 이름입니다.
  • source-file: 가상 디스크 파일입니다. 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 사용할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용된 프로젝트의 스토리지 버킷에 있어야 하며, 파일 전체 경로를 gs://bucket-name/object-name 형식으로 지정해야 합니다.

명령어 샘플

다음은 gs://my-gcs-bucket/에 저장된 my-disk.vmdk라는 가상 디스크를 가져오는 예시입니다.

gcloud compute images import my-imported-image \
    --source-file gs://my-gcs-bucket/my-disk.vmdk \
    --data-disk

API

  1. 가상 어플라이언스를 Cloud Storage에 추가합니다.

  2. API에서 Cloud Build API에 대한 POST 요청을 만듭니다.

    POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds
    {
      "steps":[
        {
          "args":[
            "-image_name=image-name",
            "-source_file=source-file",
            "-timeout=timeout",
            "-client_id=api",
            "-data_disk"
          ],
          "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "timeout":"timeout",
      "tags":[
        "gce-daisy",
        "gce-daisy-image-import"
      ]
    }
    

    다음 args 값을 바꿉니다.

    • project-id: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • image-name: 가져올 이미지의 이름입니다.
    • source-file: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.
    • timeout: 빌드가 실패하여 TIMEOUT 메시지가 나타나기 전에 빌드가 지속되는 최대 시간입니다. API에서 시간을 초 단위로 지정해야 합니다. 7200s의 제한 시간 값은 대부분의 상황에 적합합니다.

부팅 가능한 이미지 만들기

부팅 가능한 운영체제가 있지만 필요한 Compute Engine 드라이버나 게스트 환경 패키지가 없는 Compute Engine 커스텀 이미지가 있는 경우 이미지 가져오기 도구를 사용하여 이 이미지를 Compute Engine에서 부팅 가능한 이미지로 만들 수 있습니다.

가져올 새 디스크를 지정하는 --source-file 플래그를 사용하는 대신 --source-image 플래그를 사용하여 커스텀 이미지를 부팅 가능한 이미지로 만듭니다.

gcloud compute images import image-name \
    --source-image source-image-name \
    --os os

다음을 바꿉니다.

  • image-name: 대상 이미지의 이름입니다.
  • source-image-name: 소스 이미지 이름입니다.
  • os: --source-image의 운영체제이며, 지원되는 값 목록은 gcloud compute images import 명령어의 --os 플래그 옵션을 참조하세요.

    기존 라이선스가 포함된 이미지를 Google Cloud로 가져오는 방법은 Bring Your Own License(사용자 라이선스 사용)를 참조하세요.

명령어 샘플

다음은 my-image라는 Compute Engine 이미지를 my-bootable-image라는 부팅 가능한 이미지로 변환하는 예시입니다. 이 예시에서 이미지에 설치된 운영체제는 Ubuntu 16.04입니다.

gcloud compute images import
my-bootable-image --source-image=my-image --os=ubuntu-1604

리소스 정리

Cloud Storage에 저장된 파일과 Compute Engine의 이미지에는 요금이 부과됩니다. 가져오기 도구는 Cloud Storage에 가상 디스크 파일을 가져오고 Compute Engine 커스텀 이미지 하나를 만듭니다.

이미지를 올바르게 가져오고 Compute Engine 인스턴스로 올바르게 부팅되었는지 확인한 후 Cloud Storage에서 가상 디스크 파일을 삭제할 수 있습니다. 이 도구는 파일을 Cloud Storage에 업로드할 때 파일의 URI를 인쇄합니다. 이 URI의 형식은 gs://bucket-name/tmpimage/image-name입니다.

--data-disk 플래그를 사용하여 이미지를 가져온 후 --source-image 플래그로 import 도구를 두 번째로 실행하여 이미지를 부팅 가능한 이미지로 만들면 첫 번째 이미지가 계속 존재합니다. 필요하지 않으면 이미지를 삭제하는 것이 좋습니다. --image 플래그와 --source-image 플래그 모두에 동일한 이미지 이름을 지정하면 이미지를 자동으로 덮어쓰므로 더 이상 정리하지 않아도 됩니다.

다음 단계