이 페이지에서는 인스턴스 템플릿을 사용하여 VM 인스턴스를 만드는 방법을 설명합니다. 인스턴스 템플릿은 VM 인스턴스의 속성을 정의하는 API 리소스입니다. 인스턴스 템플릿에서 머신 유형, OS 이미지, 영구 디스크 구성, 메타데이터, 시작 스크립트 등의 속성을 정의한 다음 해당 인스턴스 템플릿을 사용하여 개별 VM 인스턴스 또는 관리형 인스턴스의 그룹을 만들 수 있습니다.
인스턴스 템플릿에서 VM 인스턴스를 만들 때 기본 동작은 VM 인스턴스 이름과 해당 인스턴스가 위치할 영역을 제외하고 템플릿에 지정된 속성과 동일한 VM 인스턴스를 만드는 것입니다. 또는 인스턴스 템플릿의 특정 속성을 특정 용도를 위해 변경하려는 경우 인스턴스를 만드는 도중 특정 필드를 선택적으로 재정의할 수도 있습니다.
이 문서에서는 즉시 사용 가능한 인스턴스 템플릿이 있다고 가정합니다. 인스턴스 템플릿이 없는 경우 안내에 따라 새 인스턴스 템플릿을 만듭니다.
시작하기 전에
- 이 가이드의 명령줄 예시를 사용하려면 우선 다음 작업을 수행해야 합니다.
- gcloud 명령줄 도구를 최신 버전으로 설치하거나 업데이트합니다.
- 기본 리전 및 영역을 설정합니다.
- 이 가이드의 API 예를 사용하려면 API 액세스를 설정합니다.
- 인스턴스 템플릿 문서를 읽어봅니다.
- 인스턴스 템플릿을 만듭니다.
인스턴스 템플릿에서 VM 인스턴스 만들기
인스턴스 템플릿에 설명된 대로 정확히 인스턴스를 만들려면 다음 안내를 따릅니다.
콘솔
- VM 인스턴스 페이지로 이동합니다.
- 인스턴스 만들기를 클릭합니다.
- 템플릿에서 VM 인스턴스 만들기를 클릭합니다.
- 템플릿을 선택하고 계속을 클릭합니다.
- 인스턴스 이름을 지정하고 필요에 따라 추가로 맞춤설정을 수행합니다.
- 만들기를 클릭합니다. 추가적인 설정 세부정보는 인스턴스 만들기를 읽어보세요.
gcloud
gcloud compute
와 동일하게 instances create
명령어를 사용하면 일반 인스턴스를 만들 수 있지만 --source-instance-template
플래그가 추가됩니다.
gcloud compute instances create [INSTANCE_NAME] --source-instance-template [INSTANCE_TEMPLATE_NAME]
각 매개변수는 다음과 같습니다.
API
API에서 인스턴스를 생성하는 일반 요청을 작성하면서 sourceInstanceTemplate
쿼리 매개변수와 인스턴스 템플릿에 대한 정규화된 경로를 차례대로 포함합니다.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?sourceInstanceTemplate=[INSTANCE_TEMPLATE_NAME]
요청 본문에서 VM 인스턴스에 대해 name
을 제공합니다.
{ "name": "example-instance" }
예를 들어 다음 스니펫에는 https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
템플릿에 대한 정규화된 경로가 포함됩니다.
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
{ "name": "example-instance" }
재정의를 사용하여 인스턴스 템플릿에서 VM 인스턴스 만들기
인스턴스 템플릿을 사용하여 VM 인스턴스를 시작하는 경우 기본 동작은 인스턴스 이름과 영역을 제외하고는 인스턴스 템플릿에 설명된 대로 정확히 VM 인스턴스를 만드는 것입니다.
기본적으로 인스턴스 템플릿을 기반으로 인스턴스를 만들지만 몇가지 변경 사항을 포함하려는 경우 재정의 동작을 사용할 수 있습니다. 재정의 동작을 사용하려면 인스턴스를 만들 때 속성을 전달하여 기존 인스턴스 템플릿을 재정의합니다.
gcloud
gcloud
도구를 사용하여 --source-instance-template
플래그가 포함된 인스턴스를 만드는 요청을 하고 해당 gcloud
플래그와 함께 원하는 속성을 재정의합니다. 적용 가능한 플래그 목록을 보려면 gcloud
참조를 검토하세요.
예를 들어 머신 유형, 메타데이터, 운영체제, 부팅 영구 디스크, 인스턴스 템플릿의 보조 디스크를 재정의하려면 다음 플래그를 제공합니다.
gcloud compute instances create example-instance --source-instance-template example-instance \
--machine-type e2-standard-2 --image-family debian-8 --image-project debian-cloud \
--metadata bread=butter --disk=boot=no,name=my-override-disk
API
API에서 sourceInstanceTemplate
쿼리 매개변수를 사용하고인스턴스를 생성하도록 일반 요청을 작성할 때 요청 본문에 재정의할 모든 필드를 제공합니다.
API의 재정의 동작은 RFC 7396에서 설명하는 JSON 병합 패치 규칙을 따릅니다.
구체적으로는 다음과 같습니다.
- 기본 필드를 재정의하면 인스턴스 템플릿의 해당 기본 필드가 요청의 기본 필드 값으로 바뀝니다. 기본 필드에는
machineType
,sourceImage
,name
등이 포함됩니다. - 반복되는 필드를 재정의하면 해당 속성의 반복되는 모든 값이 요청에 제공된 해당 값으로 바뀝니다.
반복되는 필드는 일반적으로
list
유형의 속성입니다. 예를 들어disks
및networkInterfaces
는 반복되는 필드입니다. nested object
를 재정의하면 인스턴스 템플릿의 객체가 요청의 해당 객체 사양과 병합됩니다. 중첩된 객체가 반복되는 필드 내에 있는 경우 해당 필드는 반복되는 필드의 규칙에 따라 처리됩니다. 라벨은 이 규칙의 예외이며object
유형이더라도 반복되는 필드로 간주됩니다.
예를 들어 2개의 비부팅 디스크가 포함된 인스턴스 템플릿이 있으나 그중 하나의 디스크를 재정의하고자 한다고 가정해 보겠습니다. 유지할 모든 디스크를 포함하여 요청에 전체 disks
사양을 제공해야 합니다.
이 요청의 URL은 다음과 같습니다.
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
요청 본문은 다음과 같습니다.
{
"disks": [
{
# Since you are overriding the repeated disk property, you must
# specify a boot disk in the request, even if it is already
# specified in the instance template
"autoDelete": true,
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-8"
},
"mode": "READ_WRITE",
"type": "PERSISTENT"
},
{
# New disk you want to use
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-override-disk",
"type": "PERSISTENT"
},
{
# Assume this disk is already specified in instance template, but
# you must specify it again since you are overriding the disks
# property
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-other-disk-to-keep",
"type": "PERSISTENT"
}
],
"machineType": "zones/us-central1-f/machineTypes/e2-standard-2",
"name": "example-instance"
}
다음 단계
- 선점형 VM 인스턴스 문서를 읽어보세요.
- 종료 스크립트에 대해 알아보세요.
- 선점형 인스턴스 가격 책정 참조
- 인스턴스에 연결