기본 템플릿 만들기

기본 구성 파일은 간단한 워크로드에 충분할 수 있지만 복잡한 아키텍처 또는 재사용하려는 구성에서는 구성을 템플릿으로 세분화할 수 있습니다.

템플릿은 구성에서 하나의 유형으로 가져와서 사용되는 개별 파일입니다. 구성에서 원하는 만큼 템플릿을 사용할 수 있습니다.

템플릿을 사용하면 여러 배포에서 사용 및 재사용할 수 있는 여러 조각으로 구성으로 분할할 수 있습니다. 템플릿은 요구에 따라 일반화하거나 특정화할 수 있습니다. 또한 템플릿을 사용하면 템플릿 속성, 환경 변수, 모듈과 같은 기능과 기타 템플릿 기능을 활용하여 동적 구성 및 템플릿 파일을 만들 수 있습니다.

자체 배포에 사용할 수 있는 템플릿 예시는 Deployment Manager GitHub 저장소를 참조하세요.

시작하기 전에

템플릿 구문

Jinja 2.10.x 또는 Python 3.x로 템플릿을 작성할 수 있습니다. Jinja는 YAML 구문과 더 밀접하게 연결되므로, YAML에 익숙한 경우에는 Jinja로 템플릿을 작성하는 것이 더 쉬울 수 있습니다.

또한 Python으로 템플릿 파일을 작성하고 Python을 활용해서 템플릿의 일부를 프로그래매틱 방식으로 생성할 수 있습니다. 예를 들어 Python 라이브러리를 사용하여 템플릿 정의 형식을 지정할 수 있습니다. Python에 익숙한 경우 이 형식이 더 적합할 수 있습니다.

Deployment Manager에서는 Jinja 및 Python 템플릿을 모두 사용할 수 있습니다. 동일한 구성에서 두 언어로 템플릿을 가져올 수 있습니다.

기본 템플릿 만들기

템플릿은 Jinja 또는 Python으로 작성된 개발자가 생성하는 파일입니다. 다음 구성 파일을 예시로 들어 보겠습니다.

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

이 구성도 유효하지만, 여러 파트를 재사용 가능한 개별 템플릿 파일로 세분화하여 구성을 더 단순화할 수 있습니다. 위 구성을 기준으로 템플릿을 만들려면, 문제의 리소스 섹션을 꺼내서 새로운 Jinja 또는 Python 파일로 만듭니다.

다음 스니펫은 배포를 간소화할 수 있는 템플릿 섹션을 보여줍니다. 템플릿을 모두 보려면 GitHub에서 보기를 클릭하세요.

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

Python 템플릿은 다음과 같은 요구사항을 충족해야 합니다.

  • 템플릿에서 GenerateConfig(context) 또는 generate_config(context)라는 메서드를 정의해야 합니다. 동일한 템플릿에서 두 메서드 이름을 모두 사용하면 generate_config() 메서드가 우선 시 됩니다.

    context 객체에는 배포에 대한 메타데이터와 배포 이름, 현재 프로젝트 등의 환경이 포함됩니다. 배포 관련 환경 변수 사용 자세히 알아보기

  • 메서드가 Python 사전을 반환해야 합니다.

그 외에는 템플릿 콘텐츠를 생성하는 개발자의 몫입니다.

예시

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/machineTypes/n1-standard-1',
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }
})

전체 Python 예는 Deployment Manager GitHub 저장소를 참조하세요.

템플릿 가져오기

템플릿을 만든 후 사용하려면 구성 파일로 가져옵니다. 템플릿을 가져오려면 현재 디렉터리의 상대 또는 절대 경로로 이어지는 구성에 imports 섹션을 추가합니다. 예를 들어 구성 맨 위에 다음 줄을 추가하여 이전 단계의 가상 머신 템플릿을 가져올 수 있습니다.

imports:
  - path: path/to/my_vm_template.jinja

파일 경로가 길면 파일 별칭으로 선택적인 name 속성을 제공할 수 있습니다. 이 이름을 사용하면 나중에 템플릿을 참조할 수 있습니다. 이름을 제공하지 않으면 path를 사용하여 템플릿을 참조할 수 있습니다.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja

템플릿이 Jinja 또는 Python인지 여부에 관계없이 여러 템플릿의 가져오기를 혼합하여 사용할 수 있습니다.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja
  - path: special_vm.py

템플릿이 다른 템플릿을 종속 항목으로 사용할 경우, 구성에서 종속 템플릿도 가져옵니다.

imports:
  - path: path/to/my_vm_template.jinja
  - path: special_vm.py
  - path: base_vm.jinja

또한 콘텐츠를 인라인하기 위해 텍스트 파일을 가져올 수도 있습니다. 예를 들어 다음 문자열로 resource_type.txt라는 파일을 만들 수 있습니다.

compute.v1.instance

이를 구성으로 가져와서 다음과 같이 콘텐츠 인라인을 제공합니다.

imports:
- path: resource_type.txt

resources:
- name: my-vm
  type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance"
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

템플릿 배포

템플릿을 가져온 후에는 이를 구성에서 유형으로 사용합니다.

Jinja

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

템플릿 이름을 제공하지 않은 경우, 템플릿 경로를 사용하여 템플릿을 호출합니다.

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

명령줄 도구를 사용하여 직접 템플릿 배포

최상위 구성 파일을 만드는 대신 Deployment Manager는 Google Cloud CLI에서 직접 템플릿을 배포할 수 있습니다.

예를 들어 다음 요청은 vm-template.jinja라는 템플릿을 배포합니다.

gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja

템플릿에 템플릿 속성이 있으면 명령줄에서 --properties 플래그를 사용하여 이러한 속성을 설정할 수도 있습니다.

gcloud deployment-manager deployments create my-igm \
    --template vm-template.jinja \
    --properties zone:us-central1-a

다음 사항에 유의하세요.

  • 모든 값은 YAML 값으로 파싱됩니다. 예를 들어 version: 3은 정수로 전달됩니다. 문자열로 지정하려면 version: \'3\' 값을 이스케이프 처리된 작은 따옴표로 묶습니다.

  • 부울 값은 대소문자를 구분하지 않으므로 TRUE, true, True는 모두 동일하게 취급됩니다.

  • 템플릿으로 정의된 모든 필수 속성을 전달해야 합니다. 속성의 하위 집합만 제공할 수는 없습니다. 특정 속성에 기본값이 포함된 경우, 명령줄에서 해당 속성을 생략할 수 있습니다.

여러 속성을 지정하려면 쉼표로 구분된 키:값 쌍을 제공합니다. 쌍을 지정하는 순서는 중요하지 않습니다. 예를 들면 다음과 같습니다.

gcloud deployment-manager deployments create my-igm 
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

이 명령어를 실행하면 Deployment Manager는 개발자가 제공한 템플릿을 사용하여 배포를 만듭니다. Google Cloud Console 또는 gcloud CLI를 사용하여 만든 배포를 확인할 수 있습니다. 배포 보기에 대한 자세한 내용은 매니페스트 보기를 참조하세요.

다음 단계