머신 이미지 만들기

머신 이미지를 사용하여 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://compute.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/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

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

Cloud Build API 사용 설정

대부분의 경우 gcloud beta compute machine-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 서비스 계정에는 IAM 프로젝트 편집자 역할이 있습니다. 이 역할을 삭제하면 가져오기 프로세스가 실패할 수 있습니다. 서비스 계정에 역할을 다시 추가하려면 액세스 권한 부여를 참조하세요. Compute Engine 기본 서비스 계정에 대한 자세한 내용은 Compute Engine 기본 서비스 계정을 참조하세요.

gcloud

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

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

    gcloud services enable cloudbuild.googleapis.com

    또한 가져오기 도구는 기본 Compute Engine 서비스 계정을 사용합니다. 기본적으로 Compute Engine 서비스 계정에는 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
    

    다음을 바꿉니다.

요구사항

  • 운영체제 지원을 검토합니다. 운영체제별 기능 지원을 참조하세요.
  • 가상 어플라이언스 및 소스 VM 요구사항을 검토합니다. Compute Engine의 가상 어플라이언스 가져오기 주제의 요구사항을 참조하세요.
  • 머신 이미지를 만들려는 프로젝트에 신뢰할 수 있는 이미지 정책이 정의되어 있으면 허용된 게시자 목록에 projects/compute-image-tools를 추가합니다.

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

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

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 beta 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 beta 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"
}

다음 단계