템플릿 속성 정의

템플릿을 사용할 때의 장점 중 하나는 커스텀 템플릿 속성을 만들고 정의할 수 있다는 것입니다. 템플릿 속성은 템플릿 파일에 정의하는 임의 변수입니다. 문제의 템플릿을 사용하는 모든 구성 파일 또는 템플릿 파일은 템플릿을 직접 변경하지 않고 템플릿 속성 값을 제공할 수 있습니다. 이렇게 하면 속성을 추상화하여 기본 템플릿을 업데이트하지 않고도 각각의 고유 구성에 대해 속성 값을 변경할 수 있습니다.

예를 들어 다음 줄은 머신 유형의 URL에서 템플릿 속성을 지정합니다.

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

이 템플릿을 사용하는 구성에서는 템플릿의 properties 섹션에 있는 zone 값을 설정할 수 있습니다.

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager는 기본 템플릿에 zone 값을 전달한다는 것을 인식합니다.

시작하기 전에

템플릿 속성 만들기

템플릿 속성을 만들려면 다음 안내를 따르세요.

Jinja

Jinja에서는 다음 구문을 사용하여 속성을 정의합니다.

{{ properties["PROJECT_NAME"] }}

예를 들면 다음과 같습니다.

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/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에서는 다음 구문을 사용하여 속성을 정의합니다.

  context.properties["PROPERTY_NAME"]

예를 들면 다음과 같습니다.

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/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:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

템플릿의 모든 템플릿 속성에 값을 설정해야 합니다. 예를 들어 템플릿에 템플릿 속성 zone, image, network가 있으면 최상위 구성에서 이러한 속성 값을 모두 정의해야 합니다.

특정 템플릿 속성에 기본값이 포함된 경우, schemas를 사용하여 이러한 기본값을 설정할 수 있습니다. 기본값이 있는 템플릿 속성은 해당 기본값이 배포에 적합한 경우, 최상위 구성에서 생략할 수 있습니다.

명령줄에서 템플릿 속성 값 설정

템플릿을 가져오는 상위 파일에 템플릿 속성 값을 지정하는 대신 Deployment Manager는 Google Cloud CLI에서 직접 이러한 값을 설정할 수 있습니다. 최상위 YAML 파일 만들기를 건너뛸 수 있습니다. Deployment Manager는 요청에 있는 정보를 기준으로 배포의 최상위 구성을 자동으로 생성합니다.

예를 들어 다음 템플릿에 zone이라는 템플릿 속성이 있다고 가정합니다.

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/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

Google Cloud CLI를 사용하여 이 템플릿 파일을 직접 전달하고 명령줄에서 템플릿 속성 값을 지정할 수 있습니다. 예를 들어 다음 요청은 템플릿을 전달하고 명령줄에서 직접 zone 속성을 지정합니다.

gcloud deployment-manager deployments create a-single-vm --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 불리언 또는 gcloud CLI를 사용하여 만든 배포를 확인할 수 있습니다. 배포 보기에 대한 자세한 내용은 매니페스트 보기를 참조하세요.

다음 단계