가상 디스크 가져오기


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

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

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

시작하기 전에

지원되는 운영체제

부팅 가능한 디스크와 부팅할 수 없는 디스크를 모두 가져올 수 있습니다. Compute Engine에서 가상 디스크를 부팅하려면 지원되는 운영체제 중 하나를 실행해야 합니다.

BYOL 및 BYOS 지원

자체 소프트웨어 라이선스 또는 구독을 사용하려는 경우 라이선스를 통해 가상 디스크를 가져올 수 있습니다. BYOL 또는 BYOS를 지원하는 운영체제에 대한 자세한 내용은 운영체제 세부정보를 참조하세요.

gcloud compute instances import 명령어--byol 플래그와 함께 사용하여 기존 라이선스가 있는 이미지를 가져올 수 있습니다.

제한사항

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

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

  • 여러 디스크에서 논리 볼륨 관리자(LVM)는 지원되지 않습니다. 가져오기가 작동하려면 루트 파일 시스템이 가져오는 디스크에 위치해야 합니다.

  • Linux 가상 디스크에서는 grub를 부트로더로 사용해야 합니다.

  • Linux 가상 디스크는 Virtio-SCSI 스토리지 컨트롤러 기기 지원을 포함하여 커스텀 이미지와 동일한 요구사항을 충족해야 합니다.

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

  • Windows 가상 디스크에 설치하면 Carbon Black의 CB Protection과 같은 애플리케이션 허용 소프트웨어로 인해 가져오기 프로세스가 실패할 수 있습니다. 가져오기 전에 이러한 소프트웨어를 제거해야 할 수도 있습니다.

  • Windows 기반 VM에서 Microsoft KM-TEST 루프백 어댑터는 메타데이터 서버에 대한 네트워크 액세스를 차단하며 가져오기 전에 이를 사용 중지하거나 삭제해야 합니다.

권한

이미지를 가져올 때 원활한 환경을 제공하려면 필요한 IAM 역할을 계정, Cloud Build 서비스 계정, Compute Engine 서비스 계정에 부여했는지 확인합니다. 자세한 내용은 필요한 IAM 역할 부여를 참조하세요.

호환성 확인

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

가상 디스크 가져오기

Google Cloud Console, gcloud 명령줄 도구 또는 Cloud Build API를 사용하여 가상 디스크를 가져올 수 있습니다.

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

부팅 가능한 디스크의 경우 가져오기 도구가 운영체제를 자동으로 감지하여 필요한 드라이버와 패키지를 결정하므로 운영체제를 지정할 필요가 없습니다. 그러나 감지된 운영체제를 재정의해야 하는 경우 --os 플래그 또는 -os 매개변수를 지정할 수 있습니다. 지원되는 값 목록은 --os 플래그를 참조하세요.

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에서 사용자 라이선스 사용 방법에 대한 자세한 내용은 Bring Your Own License(사용자 라이선스 사용)를 참조하세요.

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

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

gcloud

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

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

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

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

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE

다음을 바꿉니다.

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

기존 라이선스가 있는 이미지를 가져오는 경우 다음과 같이 --byol 플래그를 지정합니다.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE --byol

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

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

명령어 샘플

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

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

선택적 매개변수

기본적으로 가져온 모든 부팅 디스크 이미지에 게스트 환경 패키지가 추가됩니다. 이 패키지를 사용하지 않으려면 가져오기 명령어에 --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",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 가져올 이미지의 이름입니다.
    • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.

    제공할 수 있는 추가 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=7000s",
          "-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/cloud-build/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 이미지를 만듭니다. 가상 디스크에 부팅 가능한 운영체제가 설치되어 있지 않으면 --data-disk 플래그를 지정합니다. 이렇게 하면 드라이버와 게스트 환경 패키지를 설치하는 단계를 건너뛰므로 Compute Engine에서 이미지가 부팅 가능하게 됩니다.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --data-disk

다음을 바꿉니다.

  • IMAGE_NAME: 대상 이미지의 이름입니다.
  • SOURCE_FILE: 가상 디스크 파일입니다. 이 파일은 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 사용할 수 있습니다. 가상 디스크 파일이 이미 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=7000s",
            "-client_id=api",
            "-data_disk"
          ],
          "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "timeout":"7200s",
      "tags":[
        "gce-daisy",
        "gce-daisy-image-import"
      ]
    }
    

    다음 args 값을 바꿉니다.

    • PROJECT_ID: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 가져올 이미지의 이름입니다.
    • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.

외부 IP 주소를 허용하지 않는 네트워크를 사용하여 디스크 가져오기

외부 IP를 허용하지 않는 네트워크를 사용하여 가상 디스크를 가져오려면 다음 단계를 완료하세요.

  1. 가상 디스크를 Cloud Storage에 추가합니다.

  2. 이미지 가져오기 프로세스를 수행하려면 패키지 관리자가 가상 디스크의 운영체제에 설치되어 있어야 합니다. 이러한 패키지 관리자는 Google Cloud 외부의 패키지 저장소를 요청해야 할 수 있습니다. 이러한 업데이트의 액세스를 허용하려면 Cloud NAT를 구성해야 합니다. 자세한 내용은 Cloud Router를 사용하여 NAT 구성 만들기를 참조하세요.

  3. 비공개 Google 액세스를 구성합니다. 자세한 내용은 비공개 Google 액세스 구성을 참조하세요.

  4. gcloud 명령줄 도구 또는 Cloud Build API를 사용하여 가상 디스크를 가져옵니다.

    가상 디스크를 가져오면 프로젝트에 임시 VM이 만들어집니다. 이러한 임시 VM에 외부 IP 주소가 할당되지 않도록 하려면 추가 플래그 또는 인수를 지정해야 합니다.

    자세한 내용을 보려면 다음 탭을 클릭하세요.

gcloud

gcloud compute images import 명령어--no-address 플래그를 함께 사용하여 가상 디스크를 가져옵니다.

gcloud compute images import IMAGE_NAME \
    --source-file=SOURCE_FILE \
    --zone=ZONE \
    --no-address

다음을 바꿉니다.

  • IMAGE_NAME: 만들려는 디스크 이미지의 이름입니다.
  • SOURCE_FILE: 가상 디스크 파일입니다. 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 제공할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용되는 프로젝트의 Cloud Storage 버킷에 있어야 하며, 파일 전체 경로를 gs://BUCKET_NAME/OBJECT_NAME 형식으로 지정해야 합니다.
  • ZONE: 이미지를 만들 영역입니다. 비워두면 프로젝트의 기본 영역이 사용됩니다.

API

API에서 Cloud Build API에 대한 POST 요청을 작성하고 -no-external-ip 인수를 지정합니다.

 POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
 {
   "steps":[
     {
       "args":[
         "-image_name=IMAGE_NAME",
         "-source_file=SOURCE_FILE",
         "-zone=ZONE",
         "-no_external_ip",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
   ],
   "timeout":"7200s",
   "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
   ]
 }
 

다음을 바꿉니다.

  • PROJECT_ID: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
  • IMAGE_NAME: 가져올 이미지의 이름입니다.
  • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들어 gs://my-bucket/my-image.vmdkgcloud compute images import 명령어에 사용됩니다.
  • ZONE: 이미지를 만들 영역입니다. 비워두면 프로젝트의 기본 영역이 사용됩니다.

UEFI 부트로더가 포함된 가상 디스크 가져오기

대부분의 가상 디스크의 경우 Compute Engine은 추가 플래그 없이도 UEFI 부트로더를 사용해 디스크를 감지하고 성공적으로 가져올 수 있습니다.

그러나 다음과 같은 시나리오의 경우 가져오기 중에 UEFI 부팅을 강제 적용해야 할 수 있습니다.

  • 이미지 가져오기 프로세스가 가져오기 중에 UEFI 부트로더를 감지하지 못하는 경우
  • 디스크가 듀얼 부팅 가능하고 hybrid-mbr + UEFI 또는 protective-mbr + UEFI의 조합으로 구성되어 있는 경우. 듀얼 부팅 가능한 디스크의 경우 가져오기는 기본적으로 UEFI 이외의 부팅일 수 있습니다.

가져오기를 강제 적용하여 UEFI 부팅을 사용하려면 Cloud Build API를 사용하고 -uefi_compatible 인수를 지정하면 됩니다. 이렇게 하려면 다음 단계를 완료해야 합니다.

  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",
           "-uefi_compatible",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 가져올 이미지의 이름입니다.
    • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.

공유 VPC를 사용하여 가상 디스크 가져오기

공유 VPC를 사용하는 가상 디스크를 가져오려면 먼저 compute.networkUser 역할을 Cloud Build 서비스 계정에 추가해야 합니다. 자세한 내용은 Cloud Build 서비스 계정에 필요한 역할 부여를 참조하세요.

gcloud

gcloud compute images import 명령어를 사용하여 가상 디스크를 가져옵니다.

gcloud compute images import IMAGE_NAME \
    --source-file SOURCE_FILE \
    --project SERVICE_PROJECT_ID \
    --zone ZONE \
    --network NETWORK \
    --subnet SUBNET

다음을 바꿉니다.

  • IMAGE_NAME: 가져올 이미지의 이름입니다.
  • SOURCE_FILE: 가상 디스크 파일입니다. 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 제공할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용되는 프로젝트의 Cloud Storage 버킷에 있어야 하며, 파일 전체 경로를 gs://BUCKET_NAME/OBJECT_NAME 형식으로 지정해야 합니다.
  • SERVICE_PROJECT_ID: 이미지를 가져올 프로젝트의 ID입니다.
  • ZONE: 이미지를 가져올 영역입니다. 이 영역은 서브넷의 리전과 일치해야 합니다. 예를 들어 SUBNETus-west1인 경우 가져오기 영역은 us-west1-a, us-west1-b, us-west1-c 중 하나여야 합니다.
  • NETWORK: 공유 VPC 네트워크의 전체 경로입니다. 예를 들면 projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME입니다.
  • SUBNET: 공유 VPC 서브네트워크의 전체 경로입니다. 예를 들면 projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME입니다.

    명령어 샘플

    gcloud compute images import example-image \
     --source-file gs://source-bucket/source-file.vmdk \
     --project my-image-project \
     --zone us-west1-c \
     --network projects/my-vpc-project/global/networks/my-shared-vpc \
     --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-shared-subnet
    

API

  1. 가상 디스크를 Cloud Storage에 추가합니다.

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

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "steps":[
       {
         "args":[
           "-image_name=IMAGE_NAME",
           "-source_file=SOURCE_FILE",
           "-zone=ZONE",
           "-network=NETWORK",
           "-subnet=SUBNET",
           "-timeout=7000s",
           "-client_id=api"
         ],
         "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "timeout":"7200s",
     "tags":[
       "gce-daisy",
       "gce-daisy-image-import"
     ]
    }
    

    다음 args 값을 바꿉니다.

    • SERVICE_PROJECT_ID: 이미지를 가져올 프로젝트의 ID입니다.
    • IMAGE_NAME: 가져올 이미지의 이름입니다.
    • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.
    • ZONE: 이미지를 가져올 영역입니다. 이 영역은 서브넷의 리전과 일치해야 합니다. 예를 들어 SUBNETus-west1인 경우 가져오기 영역은 us-west1-a, us-west1-b, us-west1-c 중 하나여야 합니다.
    • NETWORK: 공유 VPC 네트워크의 전체 경로입니다. 예를 들면 projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME입니다.
    • SUBNET: 공유 VPC 서브네트워크의 전체 경로입니다(예: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME).

커스텀 Compute Engine 서비스 계정을 사용하여 가상 디스크 가져오기

이미지를 가져오는 동안 프로젝트에 임시 가상 머신(VM) 인스턴스가 만들어집니다. 이러한 임시 VM의 이미지 가져오기 도구는 인증을 받아야 합니다.

서비스 계정은 VM에 연결된 ID입니다. 서비스 계정 액세스 토큰은 인스턴스 메타데이터 서버를 통해 액세스할 수 있으며 VM에서 이미지 가져오기 도구를 인증하는 데 사용됩니다.

기본적으로 가져오기 프로세스는 프로젝트의 기본 Compute Engine 서비스 에이전트를 사용합니다. 그러나 프로젝트에서 기본 Compute Engine 서비스 계정이 사용 중지된 경우 또는 커스텀 Compute Engine 서비스 계정을 사용하려는 경우 서비스 계정을 만들고 가져오기 프로세스에 지정해야 합니다.

gcloud

  1. 가상 디스크를 Cloud Storage에 추가합니다.

  2. 서비스 계정을 만들고 최소 역할을 할당합니다. 서비스 계정 만들기에 대한 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.

    지정된 Compute Engine 서비스 계정에는 최소한 다음 역할이 할당되어 있어야 합니다.

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

    자세한 내용은 Compute Engine 서비스 계정에 필요한 역할 부여를 참조하세요.

  3. gcloud compute images import를 사용하여 이미지를 가져옵니다.

    gcloud compute images import IMAGE_NAME \
      --source-file SOURCE_FILE \
      --compute-service-account SERVICE_ACCOUNT_EMAIL
    

    다음을 바꿉니다.

    • IMAGE_NAME: 대상 이미지의 이름입니다.
    • SOURCE_FILE: 가상 디스크 파일입니다. 이 파일은 로컬 파일 또는 Cloud Storage에 저장된 파일일 수 있습니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 제공할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용되는 프로젝트의 Cloud Storage 버킷에 있어야 하며, 파일 전체 경로를 gs://BUCKET_NAME/OBJECT_NAME 형식으로 지정해야 합니다.
    • SERVICE_ACCOUNT_EMAIL: 이전 단계에서 만든 Compute Engine 서비스 계정과 연결된 이메일 주소입니다.

    예시

    다음은 이메일 주소가 image-export-service-account@proj-12345.iam.gserviceaccount.com인 서비스 계정을 사용하여 gs://your_gcs_bucket에 저장된 my_server.vmdk라는 부팅 가능한 가상 디스크를 가져오는 예시입니다.

    gcloud compute images import my-imported-image \
      --source-file gs://your_gcs_bucket/my_server.vmdk \
      --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
    

API

  1. 가상 디스크를 Cloud Storage에 추가합니다.

  2. 서비스 계정을 만들고 최소 역할을 할당합니다. 서비스 계정 만들기에 대한 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.

    지정된 Compute Engine 서비스 계정에는 최소한 다음 역할이 할당되어 있어야 합니다.

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

    자세한 내용은 Compute Engine 서비스 계정에 필요한 역할 부여를 참조하세요.

  3. 가상 디스크를 Cloud Storage에 추가합니다.

  4. 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",
         "-compute_service_account=SERVICE_ACCOUNT_EMAIL",
         "-timeout=7000s",
         "-client_id=api"
       ],
       "name":"gcr.io/compute-image-tools/gce_vm_image_import:release",
       "env":[
         "BUILD_ID=$BUILD_ID"
       ]
     }
    ],
    "timeout":"7200s",
    "tags":[
     "gce-daisy",
     "gce-daisy-image-import"
    ]
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지를 가져올 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 가져올 이미지의 이름입니다.
    • SOURCE_FILE: Cloud Storage의 이미지 URI입니다. 예를 들면 gs://my-bucket/my-image.vmdk입니다.
    • SERVICE_ACCOUNT_EMAIL: 이전 단계에서 만든 Compute Engine 서비스 계정과 연결된 이메일 주소입니다.

부팅 가능한 이미지 만들기

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

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

gcloud compute images import IMAGE_NAME \
    --source-image SOURCE_IMAGE_NAME

다음을 바꿉니다.

  • IMAGE_NAME: 대상 이미지의 이름입니다.
  • SOURCE_IMAGE_NAME: 소스 이미지의 이름입니다.

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

명령어 샘플

다음은 my-image라는 Compute Engine 이미지를 my-bootable-image라는 부팅 가능한 이미지로 변환하는 예시입니다. 이 예시에서는 --os ubuntu-1604가 감지된 운영체제를 재정의합니다.

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 플래그 모두에 동일한 이미지 이름을 지정하면 이미지를 자동으로 덮어쓰므로 더 이상 정리하지 않아도 됩니다.

다음 단계