머신 이미지 만들기

머신 이미지를 사용하여 Compute Engine에서 실행되는 VM 인스턴스에 대한 1개 이상의 디스크에 관련된 모든 구성, 메타데이터, 권한, 데이터를 저장합니다. 머신 이미지를 만드는 데 사용하는 VM 인스턴스를 소스 인스턴스라고 합니다.

머신 이미지 사용할 때와 사용 방법에 대한 자세한 내용은 머신 이미지를 참조하세요.

이 페이지에서는 소스 인스턴스에서 머신 이미지를 만드는 단계를 설명합니다.

시작하기 전에

제한 및 제약사항

  • 여러 프로젝트 간에 머신 이미지를 공유할 수는 있지만 공유 VPC 네트워크는 지원되지 않습니다.
  • Cloud Key Management Service(Cloud KMS) 또는 고객 제공 암호화 키(CSEK)를 사용하여 머신 이미지를 보호할 수 있습니다. 암호화 키는 디스크의 콘텐츠를 보호합니다. 그러나 메타데이터는 보호되지 않습니다.
  • CSEK를 사용하여 머신 이미지를 보호하는 경우 머신 이미지 생성 중에 모든 디스크 데이터의 전체 사본이 저장됩니다. 그 외 모든 시나리오에서는 디스크 데이터가 다른 사본에 저장됩니다.

인스턴스에서 머신 이미지 만들기

Google Cloud Console, gcloud 명령줄 도구 또는 Compute Engine API를 사용하여 머신 이미지를 만들 수 있습니다.

머신 이미지를 만들려면 다음 정보가 필요합니다.

  • 만들려는 머신 이미지의 이름
  • 소스 인스턴스의 이름
  • 소스 인스턴스가 위치한 영역
  • 설명(선택사항)
  • storageLocation(선택사항). 위치를 지정하지 않은 경우 기본 스토리지 위치는 소스 인스턴스의 멀티 리전 Cloud Storage 위치입니다.
  • 암호화 키(선택사항). Google 관리 키, Cloud Key Management Service(Cloud KMS) 키 또는 고객 제공 암호화(CSEK) 키 중 한 가지를 선택할 수 있습니다. 암호화 키가 지정되지 않은 경우 머신 이미지는 Google 관리 키를 사용하여 암호화됩니다.
  • 머신 이미지를 인스턴스 클론 및 복제에 사용하려면 인스턴스에서 머신 이미지를 생성하기 전에 인스턴스에 고유한 OS 및 앱 정보를 삭제합니다. 예를 들어 Windows VM 인스턴스의 경우 GCESysprep을 사용해 시스템 복제를 준비합니다.

Console

  1. Google Cloud Console에서 머신 이미지 페이지로 이동합니다.

    머신 이미지 페이지로 이동

  2. 머신 이미지 만들기를 클릭합니다.
  3. 머신 이미지의 이름을 지정합니다.
  4. (선택사항) 설명을 입력합니다.
  5. 소스 VM 인스턴스를 선택합니다.
  6. (선택사항) 머신 이미지를 저장할 위치를 지정합니다. 멀티 리전 또는 리전 스토리지 중 하나를 선택하세요. 위치에 관한 자세한 내용은 머신 이미지 스토리지 위치를 참조하세요.
  7. (선택사항) 암호화 방법을 선택합니다.
  8. 만들기를 클릭합니다.

gcloud

gcloud beta compute machine-images create 명령어를 사용하여 인스턴스에서 머신 이미지를 만듭니다.

gcloud beta compute machine-images create machine-image-name \
    --source-instance source-instance-name

다음을 바꿉니다.

  • machine-image-name: 만들려는 머신 이미지의 이름입니다.
  • source-instance-name: 이미지를 만들 소스 인스턴스의 이름입니다.

예시

예를 들어 다음 gcloud 명령어를 사용하여 my-instance라는 소스 인스턴스에서 my-machine-image라는 머신 이미지를 만들 수 있습니다.

gcloud beta compute machine-images create my-machine-image  \
    --source-instance my-instance

이 프로세스는 몇 분 정도 소요됩니다. 머신 이미지가 생성되면 다음과 비슷한 출력이 표시됩니다.

Created [https://www.googleapis.com/compute/beta/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

API

API에서 machineimages.insert 메서드에 대한 POST 요청을 작성합니다. 요청 본문에 다음 POST 요청을 포함합니다.

POST https://www.googleapis.com/compute/beta/projects/project-id/global/machineImages

{
  "name": "machine-image-name",
  "sourceInstance": "source-instance-url"
}

다음을 바꿉니다.

  • project-id: 프로젝트 ID입니다.
  • machine-image-name: 만들려는 머신 이미지의 이름입니다.
  • source-instance-url: 머신 이미지를 만드는 데 사용할 소스 인스턴스의 전체 또는 부분 URL입니다. 예를 들어 myProject라는 프로젝트에 my-instance라는 소스 인스턴스가 있는 경우 유효한 URL은 다음과 같습니다.

    • https://www.googleapis.com/compute/v1/projects/myProject/global/global/instances/my-instance
    • projects/myProject/global/global/instances/my-instance
    • global/instances/my-instance

가상 어플라이언스에서 머신 이미지 만들기

gcloud 명령줄 도구 또는 Compute Engine API를 사용하여 가상 어플라이언스에서 머신 이미지를 만들 수 있습니다.

가상 어플라이언스를 가져오려면 먼저 다음 단계를 완료해야 합니다.

  1. Cloud Build API를 사용 설정합니다.
  2. Compute Engine에서 가상 어플라이언스를 가져오기 위한 요구사항지원되는 운영체제를 각각 검토합니다.

gcloud

gcloud beta compute machine-images import 명령어를 사용하여 가상 어플라이언스에서 머신 이미지를 만듭니다.

gcloud beta compute machine-images import machine-image-name \
    --source-uri=gs:path-to-virtual-appliance-file
    --os=os

다음을 바꿉니다.

  • machine-image-name: 만들려는 머신 이미지의 이름입니다.
  • path-to-virtual-appliance-file: Cloud Storage의 OVA 또는 OVF 파일 경로입니다.
  • os: OVA 파일의 운영체제입니다. 이 플래그는 기본적으로 선택사항이지만 일부 경우에는 필수사항입니다. 이 플래그를 제공하는 것이 좋습니다.

예시

예를 들어 다음 gcloud 명령어를 사용하면 gs://my-bucket 디렉터리에 저장되고 centos-7을 실행하는 my-ova라는 소스 OVA 파일에서 my-machine-image라는 머신 이미지를 만들 수 있습니다.

gcloud beta compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

API

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

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

    POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds
    {
     "timeout":"timeout",
     "steps":[
       {
         "args":[
           "-machine-image-name=machine-image-name",
           "-ovf-gcs-path=source-uri",
           "-os=os",
           "-client-id=api",
           "-timeout=timeout"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    다음을 바꿉니다.

    • project-id: OVA 파일을 가져올 프로젝트의 프로젝트 ID입니다.
    • timeout: 빌드가 실패하여 TIMEOUT 메시지가 나타나기 전에 빌드가 지속되는 최대 시간입니다. API에서 시간을 초 단위로 지정해야 합니다. 7200s의 제한 시간 값은 대부분의 상황에 적합합니다.
    • machine-image-name: 만들려는 머신 이미지의 이름입니다. 예를 들면 my-machine-image입니다.
    • source-uri: Cloud Storage에 저장된 OVF 패키지를 포함하는 디렉터리 또는 OVA 파일의 URI입니다. 예를 들면 gs://my-bucket/my-instance.ova입니다.
    • os: OVA 파일의 운영체제입니다. 예를 들면 ubuntu-1604입니다. 이 플래그는 기본적으로 선택사항이지만 일부 경우에는 필수사항입니다. 이 플래그를 제공하는 것이 좋습니다.

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

OVF 재정의로 머신 이미지 만들기

커스텀 CPU 및 메모리

gcloud

OVF 파일에 지정된 CPU 또는 메모리 구성을 재정의하려면 gcloud 명령줄 도구 단계에 따라 가상 어플라이언스에서 머신 이미지 만들기를 진행하고 --custom-cpu--custom-memory 플래그를 지정합니다.

예시

예를 들어 OVF 파일의 설정에 다음과 같은 재정의가 적용된 my-machine-image라는 이름의 머신 이미지를 만들 수 있습니다.

  • 운영체제: Ubuntu 1404
  • CPU: 2 CPUs
  • 메모리: 2048 MB

다음 명령어를 실행합니다.

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

API

OVF 파일에 지정된 CPU 또는 메모리 구성을 재정의하려면 Compute Engine API 단계에 따라 가상 어플라이언스에서 머신 이미지 만들기를 진행하고 -machine-type 인수를 지정합니다. 이 -machine-type은 사용할 사전 정의된 머신 유형 또는 커스텀 머신 유형을 나타냅니다.

예시

예를 들어 OVF 파일의 설정에 다음과 같은 재정의가 적용된 my-machine-image라는 이름의 머신 이미지를 만들 수 있습니다.

  • 운영체제: Ubuntu 1404
  • CPU: 2 CPUs
  • 메모리: 2048 MB

Compute Engine API에 다음과 같이 요청합니다. project-id는 프로젝트 ID로 바꿉니다.

{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

커스텀 네트워크

gcloud

커스텀 네트워크를 설정하려면 gcloud 명령줄 도구 단계를 따라 가상 어플라이언스에서 머신 이미지 만들기를 진행하고 --network 플래그를 지정합니다. 네트워크가 커스텀 서브넷 모드로 구성된 경우 --subnet--zone 플래그도 지정해야 합니다.

예시

예를 들어 OVF 파일의 설정에 다음과 같은 재정의가 적용된 my-machine-image라는 이름의 머신 이미지를 만들 수 있습니다.

  • 운영체제: Ubuntu 1404
  • 네트워크: custom-vpc-network
  • 서브넷: company-vpc-us-east1-c
  • 영역: us-east1-c

다음 명령어를 실행합니다.

gcloud compute machine-images import my-machine-image \
    --os ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

API

커스텀 네트워크를 사용하려면 Compute Engine API 단계에 따라 가상 어플라이언스에서 머신 이미지 만들기를 진행하고 -network 인수를 지정합니다. 네트워크가 커스텀 서브넷 모드로 구성되어 있으면 -subnet-zone 인수도 지정해야 합니다.

예시

예를 들어 OVF 파일의 설정에 다음과 같은 재정의가 적용된 my-machine-image라는 이름의 머신 이미지를 만들 수 있습니다.

  • 운영체제: Ubuntu 1404
  • 네트워크: custom-vpc-network
  • 서브넷: company-vpc-us-east1-c
  • 영역: us-central1-c

Compute Engine API에 다음과 같이 요청합니다. project-id는 프로젝트 ID로 바꿉니다.

POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

다음 단계