建立基本範本

以簡易型工作負載來說,基本的設定檔可能已經足夠,但針對較複雜的架構或您希望重複使用的設定,您可以將一項設定拆分為多個範本。

範本是一個獨立檔案,可匯入並做為設定中的類型。您可以在設定中使用任意數量的範本,Deployment Manager 會以遞迴方式展開任何匯入的範本以建立完整的設定。

範本可讓您將設定分成不同的部分,讓您可以在不同的部署作業中使用和重複使用這些部分。您可以根據需要製作一般或特定的範本。使用範本時,您也可以利用範本屬性、環境變數、模組和其他範本功能來建立動態設定和範本檔案。

如需部署作業的可用範本範例,請前往 Deployment Manager GitHub 存放區

事前準備

範本語法

您可以使用 Jinja 2.8Python 2.7 編寫範本。Jinja 可以更緊密地對應至 YAML 語法,因此如果您較熟悉 YAML,使用 Jinja 編寫範本可能會較為輕鬆。

您也可以使用 Python 編寫範本檔案,並利用 Python 來透過程式產生範本的各個部分。例如,您可以使用 Python 程式庫將範本定義格式化。如果您熟悉 Python,這可能是較佳的格式。

Deployment Manager 接受 Jinja 和 Python 檔案,因此要使用何種語法純屬個人偏好問題。此外,您也可以混和使用不同的範本,以及選擇使用 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-9
    networkInterfaces:
    - network: global/networks/default

這項設定有效,但您可以將不同部分拆分為可以重複使用的個別範本檔案,藉此進一步簡化設定。如要依據上述設定建立範本,請擷取相關的資源區段,並建立新的 Jinja 或 Python 檔案。

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-9
    networkInterfaces:
    - network: global/networks/default

Python

Python 範本只有兩項規定:

  • 範本必須定義名為 GenerateConfig()generate_config() 的方法。如果您在一個範本中同時使用這兩個方法名稱,系統會優先採用 generate_config() 方法。
  • 該方法必須傳回有效的 YAML 設定。

除此之外,您可以決定是否產生範本的內容。

範例

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-9'
            }
        }],
        '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 可讓您直接在 gcloud 指令列工具中部署範本,而非建立頂層設定檔。

舉例來說,下列要求會部署名為 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\'

  • 布林值不區分大小寫,因此系統會將 TRUEtrueTrue 視為相同的值。

  • 您必須傳入範本定義的所有必要屬性。您不能只提供屬性的子集。如果某項屬性含有預設值,您可以在指令列中省略該項屬性。

如要指定多項屬性,請提供以逗號分隔的鍵:值組合。指定組合的順序並不影響結果。例如:

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 Platform Console 或 gcloud 工具確認是否已建立部署作業。如要瞭解如何查看部署作業,請參閱查看資訊清單

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Deployment Manager 說明文件