設定 Terraform 部署作業的 VM 映像檔

本文將說明如何使用 Terraform 完成 VM 映像檔的設定,並提交用於部署。

決定如何建立部署套件

建議您使用製作人入口的引導設定選項,直接在 Google Cloud 控制台中建立部署套件。

引導式設定選項支援簡單的 VM 產品,例如具備基本防火牆規則的單一 VM 部署作業,但不支援某些複雜功能,例如具備多 VM 和非運算資源的部署作業。如果您需要引導式設定不支援的功能,可以使用手動設定選項建立部署套件,或是透過新增其他功能來自訂現有套件。

切換為手動設定

如果您使用 Producer Portal 的引導式設定選項,之後想改為手動設定部署套件,請按一下「前往手動設定」

完成引導式設定

如要使用Google Cloud 主控台完成設定並提交簡單的部署套件,請完成下列步驟:

  1. 在 Producer Portal 中,前往「部署套件」部分。

  2. 在「Terraform 設定」下方,點選「Cloud Storage Bucket」標示的輸入欄位旁的「Browse」

    如果您已建立 Cloud Storage 值區,請在此選取該值區。

    如果您沒有 Cloud Storage 值區,請按一下「Create new bucket」圖示。建立新值區時,您可以:

    • 選取值區的名稱。

    • 指定值區儲存資料的區域。

    • 指定資料的儲存空間級別。

    • 決定要為值區資料的 Identity and Access Management (IAM) 權限套用哪個精細程度。

    • 調整選用的進階設定,例如加密或資料保留政策。

  3. 請務必為 Cloud Storage 值區啟用物件版本管理

  4. 如要儲存值區設定並繼續設定部署套件,請按一下「設定」

  5. 在「Choose the machine type」(選擇機器類型) 下方,您必須為 VM 產品指定預設區域最低機器類型預設機器類型,以及開機磁碟的大小和類型。

  6. 在「指定作業系統」下方,您必須指定 VM 映像檔使用的作業系統名稱和版本,以及 VM 映像檔的版本編號。

  7. 您可以選擇在「設定 VM 存取權」下方指定網站和管理員網址,以及使用者在部署後可用來存取 VM 的使用者名稱和密碼。

  8. 您可以選擇在「設定網路」下方指定 IP 轉送設定,並設定 防火牆規則。

  9. 您可以選擇在「定義後續步驟」下方,為產品使用者提供操作說明,引導他們開始使用產品。使用者部署產品後,就會看到這些操作說明。

  10. 完成前述步驟後,請按一下「產生」,建立部署套件。

    如果日後需要對部署套件進行其他變更,您可以按一下「編輯」進行變更,然後按一下「產生」,重新產生套用這些變更的部署套件。

  11. 在 Producer Portal 中驗證部署套件。

  12. 在 Cloud Marketplace 完成部署套件的驗證後,請按一下「發布」,開始測試部署套件。

完成手動設定

本節說明如何使用手動設定選項建立部署套件,並將套件提交審查。

指定要使用預設或自訂 Terraform 模組

您可以選擇讓客戶在部署產品時使用預設或自訂的 Terraform 模組。

如果您選擇使用預設的 Terraform 模組, Google Cloud 會為客戶提供自動產生的 Terraform 程式碼,讓他們用來部署您的產品。

如果您選擇使用自訂 Terraform 模組,就必須向客戶提供自己的 Terraform 範本。您可以選擇以可供客戶使用指令列介面 (CLI) 部署的形式提供這些範本,或是提供額外中繼資料,讓客戶直接從 Cloud Marketplace 部署模組。

如要指定客戶應使用預設 Terraform 模組還是自訂 Terraform 模組,以及如何部署自訂 Terraform 模組,請完成下列步驟:

  1. 在 Producer Portal 中,前往「部署套件」部分。

  2. 在「Terraform 設定」下方的「類型」下方,選取「預設」、「自訂 (CLI 部署)」或「自訂 (UI 部署)」

自訂 Terraform 模組的相關規定

如果您選擇使用自訂 Terraform 模組,自訂模組必須符合下列規定:

  • 您的自訂模組必須包含 Cloud Marketplace 可用來驗證是否符合規定的模組。詳情請參閱「測試模組是否通過驗證」。

  • 您的模組必須包含名為 project_id 的變數,用來儲存客戶用於部署模組的專案 ID。

  • 您必須將映像檔名稱的參照項目指定為 Terraform 變數,格式為 projects/PROJECT_NAME/global/images/IMAGE_NAMEdefault 的值必須設為 VM 映像檔的名稱,這樣在 VM 產品發布時,Cloud Marketplace 擁有的映像檔副本就能取代模組。

  • 您的模組不得依附未與模組一併封裝的外部模組。

  • 您的模組只能使用下列核准的供應者:

    • archive
    • cloud-init
    • dns
    • google
    • google-beta
    • http
    • null
    • random
    • time
    • tls

如需符合這些規定的自訂模組範例,請參閱自訂 Terraform 模組範例

針對 UI 部署作業的自訂 Terraform 模組,適用其他規定

如果自訂模組支援 UI 部署作業,則必須符合下列額外要求:

  • 您的模組必須包含名為 goog_cm_deployment_name 的變數。Cloud Marketplace 會使用這個變數,在客戶的部署頁面中為部署命名。您應使用這個變數,避免在單一專案中,多個部署作業之間發生資源命名衝突。如需範例,請參閱自訂 Terraform 模組範例中的 goog_cm_deployment_name

  • metadata.display.yaml 檔案中,您必須將 ET_GCE_DISK_IMAGE 指定為所有圖片變數的 xGoogleProperty 類型。如需範例,請參閱自訂 Terraform 模組範例中的 metadata.display.yaml

  • 如果您的產品包含多個 VM 映像檔,或支援多個 CPU 架構的映像檔,您必須新增 enumValueLabels,讓客戶選取要使用的 VM 映像檔。如需範例,請參閱自訂 Terraform 模組範例

  • 您的模組不得依賴 Terraform 佈建工具的支援。

自訂 Terraform 模組的其他步驟

如果您選擇使用自訂 Terraform 模組,則必須完成下列額外步驟,設定要部署的 VM 映像檔:

  1. 在 Producer Portal 中,前往「部署套件」部分。

  2. 在「Terraform 設定」下方的「圖片變數」下方,點選「新增變數」

    如要啟用產品的 Terraform 部署作業,您必須啟用 Marketplace 擁有的映像檔使用權。當客戶部署您的產品時,Cloud Marketplace 會使用您在此處新增的變數,在市集擁有的 VM 映像檔版本中進行切換。

  3. 在「圖片變數」文字欄位中輸入變數名稱,例如「image」。

  4. 在自訂的 Terraform 模組中,將先前步驟中建立的變數預設值設為產品的 VM 映像檔名稱,格式為 projects/YOUR_PROJECT/global/images/YOUR_IMAGE

  5. 在「指定您的 GCS 物件位置」下方,按一下「瀏覽」

    如果您已建立 Cloud Storage 值區,請在此處選取該值區。

    如果您沒有 Cloud Storage 值區,請按一下「Create new bucket」圖示。建立新值區時,您可以:

    • 選取值區的名稱。

    • 指定值區儲存資料的區域。

    • 指定資料的儲存空間級別。

    • 決定要為值區資料的 Identity and Access Management (IAM) 權限套用哪個精細程度。

    • 設定選用的進階設定,例如加密或資料保留政策。

  6. 請確認 Cloud Storage 值區已啟用物件版本管理功能

  7. 如要儲存 bucket 設定並繼續設定部署套件,請按一下「設定」

  8. 在「必要角色」下方,指定客戶必須具備哪些 IAM 角色才能部署您的產品。

(僅限 UI 部署) 為自訂 Terraform 模組建立中繼資料

如要讓自訂模組支援 UI 部署作業,您必須建立並新增 Cloud Marketplace 用於正確剖析模組,並在 UI 中為客戶算繪模組的中繼資料。

如要建立及新增這類中繼資料,您可以使用開放原始碼 CFT CLI 工具。如要使用 CFT 建立自訂模組並新增中繼資料,請完成下列步驟:

  1. 安裝 CFT CLI 工具。詳情請參閱 CFT CLI 說明文件。建議您將 VERSION 的值設為 latest,並將 PLATFORM 設為下列其中一個值:

    • linux

    • windows

    • darwin

  2. 執行下列指令:

     cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false
    

    在前述指令中,-p 標記會為 Terraform 套件提供路徑,-q 標記會產生不需要遠端存放區資訊的結構描述,-d 標記會產生 metadata.display.yaml 檔案,而 --nested=false 標記會產生根模組的結構描述,並略過 modules/ 資料夾中的任何模組。

完成前述步驟後,CFT CLI 工具會產生兩個新檔案:metadata.yamlmetadata.display.yaml

自訂 Terraform 模組的中繼資料

Cloud Marketplace 會使用 metadata.display.yaml 檔案自訂表單,讓客戶透過使用者介面部署您的產品。如果您想自訂這份表單,請在建立中繼資料後,變更 metadata.display.yaml 中的欄位值。如要進一步瞭解可用的自訂選項,請參閱開放原始碼的 BlueprintUI 說明文件,或查看 BlueprintUI 結構定義

建議您使用擴充功能 GooglePropertyExtensions 來變更中繼資料。GooglePropertyExtensions 可讓您使用Google Cloud專屬的驗證機制,例如強制要求客戶只能選取專案中已存在的虛擬私有雲 (VPC) 網路。如需範例,請參閱自訂 Terraform 模組範例

驗證自訂模組的中繼資料

如要驗證自訂模組的中繼資料,請執行下列指令:

cft blueprint metadata -p TF_PACKAGE_PATH -v

在上一個指令中,-p 旗標會為 Terraform 套件提供路徑,而 -v 旗標會根據 BlueprintMetadata 結構定義驗證提供路徑下的所有中繼資料檔案。

測試模組是否通過驗證

如果下列指令順利執行,自訂模組就會通過驗證:

terraform plan -var project_id=YOUR_PROJECT -var-file marketplace_test.tfvars

在上述指令中,marketplace_test.tfvars 是只有 Cloud Marketplace 使用的 Terraform 變數檔案,專門用於驗證模組。如果範本宣告的變數沒有預設值,且您未為這些變數設定值,則指令無法順利執行。為確保指令順利執行,您可以建立 marketplace_test.tfvars 檔案,為範本宣告的變數設定值。如需 marketplace_test.tfvars 檔案範例,請參閱自訂 Terraform 模組範例

(選用) (僅限 CLI 部署) 納入測試模組

您可以選擇在自訂模組支援 CLI 部署時,加入名為 examples/marketplace_test 的資料夾。如果產品需要包含獨立的測試模組來驗證其功能,建議您這麼做。如果您納入這個資料夾,則模組必須成功執行下列指令,才能通過驗證:

terraform -chdir=examples/marketplace_test plan -var project_id=YOUR_PROJECT

驗證及測試部署作業

建立及設定部署套件後,您必須進行驗證及測試,才能讓 Cloud Marketplace 團隊審查及核准。

  1. 在 Producer Portal 中,前往「部署套件」部分。

  2. 按一下「驗證」。驗證程序最多可能需要兩小時才能完成,您可以在驗證程序執行期間離開螢幕。

  3. 驗證成功後,請點選「部署預覽」,測試部署作業。

後續步驟

成功驗證及測試部署作業後,您可以按一下「發布」,將整體產品提交至 Cloud Marketplace 進行審查及發布。詳情請參閱「提交產品」。