將範本新增為複合類型

本頁面說明如何透過 Deployment Manager 建立複合類型。建立複合類型之後,您可以在設定中呼叫該類型並建立部署作業。

複合類型是設為搭配使用的一或多個範本,並已永久新增至 Deployment Manager。您將這些範本加入後,就可以像使用 Google 擁有的類型一樣來使用複合類型。如要進一步瞭解類型,請參閱類型總覽

舉例來說,您可以建立一組範本並用來部署網路負載平衡的代管執行個體群組,接著將這些範本加入 Deployment Manager 做為複合類型。在日後的設定中,您就可以像其他類型的使用方式一般來運用該範本。

您或許也會對「跨專案共用類型」感興趣,請參閱這篇文章來進一步瞭解。

事前準備

複合類型的元件

如要建立複合類型,您必須具備 Jinja 或 Python 的頂層範本,不過可以選擇是否使用一組最終會解析為基礎類型的支援檔案。複合類型可以由本身為其他複合類型的資源組成。Deployment Manager 會在部署期間以遞迴方式展開這些類型。

複合類型由下列項目組成:

  • 頂層範本:在您呼叫類型之後,系統在展開類型時執行的頂層 Jinja 或 Python 範本
  • 結構定義JSON 結構定義檔案,提供頂層範本和任何已定義子匯入項目的相關資訊。
  • 已匯入的檔案:執行作業所需的任何其他檔案,例如輔助檔案子範本,以及子範本的任何相關結構定義 (如有)。不過您可以自行選擇是否要使用檔案,複合類型也能只包含單一頂層範本。

建立複合類型

您可以註冊設定的頂層範本、相關聯的匯入項目和結構定義,藉此建立複合類型。您可以使用 gcloud 或 API 建立複合類型。

您或許也會對「說明如何建立和呼叫複合類型的範例」感興趣,請參閱這篇文章來進一步瞭解。

gcloud

如要執行這個指令,您必須位於儲存頂層範本和子範本的目錄,而且頂層範本與子範本必須隸屬於這個複合類型。

使用 gcloud CLI 發出 types create 要求,並指定頂層範本和所需的類型名稱,以呼叫此複合類型。在含有範本檔案的本機目錄中執行下列指令。

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

其中:

  • [TYPE_NAME] 是您要呼叫的類型名稱。
  • [TOP_LEVEL_TEMPLATE] 是說明這個類型的頂層範本相對路徑。

API

透過 API 發出含有 compositename 欄位的 POST 要求。在 composite 欄位中定義:

  • 頂層結構定義
  • 匯入範本的內容
  • 頂層範本的內容

API 要求內文的結構如下:

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

如需如何建立這些要求的範例,請參閱建立自動調度資源的代管執行個體群組複合類型。詳情請參閱 insert 方法的說明文件。

部署複合類型

類型是每項專案獨有的資源,可透過存取權控管說明文件所述的權限進行存取,如下所示:

  • 專案編輯者、專案檢視者和類型編輯者可以建立及使用該專案可用的類型。
  • 類型檢視者可以取得類型清單,以及使用該項專案的可用類型。

您也可以新增其他專案來當做類型檢視者,讓這些專案存取您的類型。請參閱跨專案共用類型

註冊複合類型之後,您可以採用呼叫 Google 代管類型的方式部署該類型:

types: [PROJECT_ID]/composite:[TYPE_NAME]

例如:

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

使用指令列工具直接部署複合類型

Deployment Manager 能讓您使用 Google Cloud CLI 直接部署複合類型。gcloud CLI 並不會建立頂層設定檔,而是自動為您產生頂層設定。

舉例來說,下列指令會部署名為 autoscaled-igm 的複合類型:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

您也可以使用 --properties 旗標設定複合類型的屬性:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a

請注意下列事項:

  • 系統會將所有值剖析為 YAML 值,例如 version: 3 會以整數的形式傳入。如要將值指定為字串,請在值的前後加上逸出單引號,即 version: \'3\'

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

  • 您必須傳入複合類型定義的所有必要屬性。您不能只提供屬性的子集。如果某些屬性具有預設值,則可以從指令列中省略該屬性。

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

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

在您執行這項指令之後,Deployment Manager 會使用您提供的複合類型來建立部署作業。您可以透過 Google Cloud 控制台或 gcloud CLI 確認是否已建立部署。如要瞭解如何查看部署作業,請參閱查看資訊清單

範例:建立複合類型

Deployment Manager 提供許多 Deployment Manager GitHub 存放區的範例設定,可讓您做為複合類型使用。在本範例中,您會透過複合類型將負載平衡的高可用性服務部署到單一地區中的多個區域。詳情請參閱完整範例

在本範例中,頂層設定檔是 ha-service.py 檔案。所有子範本均已匯入結構定義檔案中。

  1. 從 GitHub 目錄下載 Python 和結構定義檔案。省略子目錄中的任何檔案和任何圖表檔案。
  2. 在含有所有下載檔案的本機目錄中執行下列指令,藉此新建名為 ha-service-example 的複合類型:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. 取得類型清單,確認已成功建立該類型:

    gcloud beta deployment-manager types list --provider composite
    
  4. 說明您的新類型:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. 建立可部署類型的新設定。請將 [PROJECT_ID] 替換為您的專案 ID:

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    將該項設定儲存為 example-config.yaml。請注意,您無須在設定中匯入任何範本。

  6. 部署新的複合類型:

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    API 會傳回一份清單,其中列出該類型建立的資源:

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

恭喜,您已成功建立第一個複合類型!

後續步驟