對簡單的工作負載而言,基本的設定檔可能已經足夠,但對於較複雜的架構或您打算重複使用的設定而言,您可以將設定拆分為範本。
範本是一個獨立檔案,可匯入並做為設定中的類型。您可以在設定中使用任意數量的範本。
範本可讓您將設定分成不同的部分,讓您可以在不同的部署作業中使用和重複使用這些部分。您可以根據需要製作一般或特定的範本。使用範本時,您還可以利用範本屬性、環境變數、模組和其他範本功能,以便建立動態設定和範本檔案。
如需可用在您部署的範本範例,請參閱 Deployment Manager GitHub 存放區。
事前準備
- 如要使用本指南提供的指令列範例,請安裝 `gcloud` 指令列工具。
- 如要使用本指南提供的 API 範例,請設定 API 存取權。
- 瞭解如何建立基本設定。
範本語法
您可以使用 Jinja 2.10.x 或 Python 3.x 編寫範本。Jinja 可以更緊密地對應至 YAML 語法,因此如果您較熟悉 YAML,使用 Jinja 編寫範本可能會較為輕鬆。
您也可以使用 Python 編寫範本檔案,並利用 Python 來透過程式產生範本的各個部分。例如,您可以使用 Python 程式庫將範本定義格式化。如果您熟悉 Python,這可能是較佳的格式。
Deployment Manager 接受 Jinja 和 Python 範本。您可以在同一項設定中匯入這兩種語言的範本。
建立基本範本
範本是您使用 Jinja 或 Python 編寫所建立的檔案。舉例來說,請參考下列設定檔:
這項設定有效,但您可以將不同部分拆分為可以重複使用的個別範本檔案,藉此進一步簡化設定。如要依據上述設定建立範本,請擷取相關的資源區段,並建立新的 Jinja 或 Python 檔案。
下列程式碼片段顯示範本的各個部分,可簡化部署作業。如要查看完整範本,請按一下「在 GitHub 上查看」。
Jinja
Python
Python 範本必須符合下列規定:
範本必須定義名為
GenerateConfig(context)
或generate_config(context)
的方法。如果您在同一個範本中同時使用這兩個方法名稱,系統會優先採用generate_config()
方法。context
物件包含部署作業和環境的中繼資料,例如部署作業的名稱、目前的專案等。進一步瞭解如何使用部署作業專屬的環境變數。該方法必須傳回 Python 字典。
除此之外,您可以決定是否產生範本的內容。
示例
如需完整的 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
Python
如果您未為範本提供名稱,請使用範本路徑來呼叫範本:
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 控制台或 gcloud CLI 確認是否已建立部署。如要瞭解如何查看部署作業,請參閱查看資訊清單。
後續步驟
- 如需可在實作環境中使用的範本範例,請參閱 GitHub 中的 Cloud Foundation Toolkit 範例。
- 使用範本屬性進一步擷取內容。
- 使用環境變數填入專案和部署作業的相關資訊。
- 將範本永久加入專案做為複合類型。