建構虛擬機器 (VM) 映像檔

本頁面將協助您為產品建構能在 Compute Engine 上執行的公開機器映像檔。

映像檔包含啟動載入程序、作業系統,以及啟動執行個體時需要的根檔案系統。您可以為產品設定一組應用程式和服務。客戶可利用該映像檔,在雲端中啟動虛擬機器 (VM) 執行個體。

建議您先在開發專案中建立映像檔,等 Google 合作夥伴工程師驗證該映像檔之後,再將其移到公開專案。

事前準備

  1. 下載 Google Cloud SDK

建立基礎產品 VM

如要為 Cloud Marketplace 建立自訂機器映像檔,您必須完成以下步驟 (後續章節會提供說明):

  • 使用 Google 支援的基本公開映像檔建立 VM,並安裝應用程式專用的套件和設定。

    您可以選擇使用 Arm 處理器或 x86 處理器的映像檔。您也可以在單一 VM 產品中加入多個映像檔,指定不同的機器類型。如要進一步瞭解 CPU 平台和支援這些平台的機器類型,請參閱「CPU 平台」。

  • 如果您打算為客戶提供支援,請安裝指令碼來擷取應用程式使用者憑證。

建立授權的 VM 映像檔

  1. 使用 gcloud 為 Google Cloud CLI 設定預設值:

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. 建立用於安裝軟體的主要執行個體,之後再轉換成在 Cloud Marketplace 上使用的映像檔。如要進一步瞭解如何建立執行個體,請參閱「建立和啟動執行個體」一文。

    gcloud compute instances create ${INSTANCE} --scopes
    https://www.googleapis.com/auth/cloud-platform 
  3. 安裝及自訂軟體。請納入任何必要的開機指令碼,例如用於建立授權憑證的指令碼。

    如要使用安全的隨機密碼建立授權憑證,請按照下一個章節的「建立授權憑證」一節所述步驟操作。

    建立及自訂主要執行個體後,請準備建立 VM 映像檔時需要用到的磁碟。

  4. 清除磁碟。如果直接從您的 VM 建立 VM 映像檔,系統也會將您的使用者目錄和 SSH 金鑰轉移到客戶的 VM,因此您必須在建立 VM 映像檔時清除輸入磁碟。

    清除磁碟的方式如下:

    1. 在 Compute Engine 的「VM Instances」選單中,按一下要清除的執行個體名稱,然後按一下「Edit」

    2. 向下捲動並取消勾選「Delete boot disk when instance is deleted」(刪除執行個體時一併刪除開機磁碟) 核取方塊,然後按一下「Save」(儲存)。您會使用磁碟建立映像檔。

    3. 刪除 VM 但保留磁碟。系統會提示您確認刪除動作。請勿選取「一併刪除開機磁碟」

    4. 接下來,您必須建立新的 VM 執行個體。展開「Management」(管理)、「disk」(磁碟)、「networking」(網路) 和「SSH keys」(安全殼層金鑰組) 選項。

    5. 在「disk」(磁碟) 底下,連結先前執行個體的磁碟做為額外的資料磁碟使用。確認「刪除執行個體時」的選項是指定為「保留磁碟」

      您現在可透過安全殼層進入執行個體,並移除在軟體安裝過程中建立的任何主目錄或其他暫存檔案。您必須先掛接資料磁碟才能存取。如需有關掛接磁碟的詳細資訊,請參閱「新增永久磁碟或調整其大小」一文。

    6. 完成後,請關閉並刪除執行個體,並且保留更新後的資料磁碟。接下來您只要完成以下步驟,即可建立 VM 映像檔。

  5. 請按照下列步驟,在 Producer Portal 中取得 VM 產品的授權名稱:

    1. 在 Google Cloud 控制台中開啟 Producer Portal:

      https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
      

      YOUR_PROJECT_ID 替換為開發或公開專案的 ID。建議您先在開發專案中建立映像檔,等 Google 合作夥伴工程師驗證該映像檔之後,再將其移到公開專案。

    2. 按一下產品名稱。

    3. 前往「部署套件」部分。在「VM license」下方,記下名稱。您會在下一個步驟建立映像檔時使用這個授權名稱。

  6. 執行下列 gcloud 指令,建立授權的映像檔:

    gcloud compute images create CREATE_IMAGE_NAME \
     --project PUBLIC_PROJECT_NAME \
     --source-disk projects/DEV_PROJECT_NAME/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME \
     --licenses LICENSE_NAME \
     --description ADD_DESCRIPTION

    更改下列內容:

    • CREATE_IMAGE_NAME:映像檔名稱和支援的 CPU 架構,格式為 who-vmOS-image-architecture-date,將 architecture 替換為 Armx86_64,取決於映像檔支援的 CPU 架構。每次更新產品圖片時,都必須使用新的不重複名稱。

    • PUBLIC_PROJECT_NAME:Cloud Marketplace 公開專案的專案 ID。您必須具備此專案的 Compute Storage Admin 角色 (roles/compute.storageAdmin)。

    • LICENSE_NAME:您在上一個步驟中記下的 VM 產品授權名稱。

    • DEV_PROJECT_NAME:您為 Cloud Marketplace 開發及測試而建立的專案 ID。您必須具備此專案的 Compute 映像檔使用者角色 (roles/compute.imageUser)。

    • SOURCE_DISK_ZONE:來源磁碟的可用區。

    • SOURCE_DISK_NAME:來源磁碟的名稱。

    • ADD_DESCRIPTION:針對要建立的圖片提供文字說明 (選用)。

將映像檔設為公開

如果是未使用市集擁有的映像檔的非 Terraform 產品,您必須將映像檔設為可供公開使用,這樣客戶才能將映像檔部署到各自的 Compute Engine 執行個體。如要將映像檔設為公開,請使用Google Cloud 控制台或 Google Cloud CLI:

控制台

  1. 在公開專案中的 Compute Engine 底下,前往「Images」(映像檔) 頁面。

    前往「Images」(映像檔) 頁面

  2. 選取您的映像檔,如下所示:

  3. 如果右上角未顯示資訊面板,請按一下「Show Info Panel」

  4. 在資訊面板的「Add Members」(新增成員) 欄位中輸入 allAuthenticatedUsers,然後從「Select a role」(選取角色) 選單中選取「Compute Image User」(Compute 映像檔使用者)

  5. 按一下 [Add] (新增),將映像檔設為公開。

指令列

Cloud Shell 或本機電腦上使用下列 gcloud 指令:

gcloud compute images add-iam-policy-binding IMAGE_NAME --member=allAuthenticatedUsers --role=roles/compute.imageUser

建立授權憑證

如果您的產品是單一 VM 執行個體的簡單部署作業,且具備基本防火牆規則,您可以在直接設定部署套件時,自動加入安全的隨機密碼。

如果您打算使用開放原始碼 mpdev 工具建立部署套件 (我們建議在大多數情況下使用這項工具),則可以使用 mpdev 自動加入多個安全的隨機密碼。

如要瞭解如何建立授權憑證,請參閱「建立部署套件」一文。

產品部署完成後,如要取得您建立的所有密碼值,請在 VM 執行個體中使用下列指令:

curl -H "Metadata-Flavor: Google" \
http://metadata/computeMetadata/v1/instance/attributes/PASSWORD_NAME

測試 VM 映像檔

以新建的映像檔建立 VM 執行個體,並驗證功能。

此外,如要驗證授權 ID,請透過 SSH 進入執行個體並確認已連結有效授權。

curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/licenses/?recursive=true

確認是否已安裝 Python 2.6 以上版本:

python -V

確認已安裝下列套件:

gcloud --version
ssh -V
ps aux | grep sshd
curl -V
ps aux | grep dhcp

請進行檢查,確認執行個體上只有您的使用者目錄,而沒有安裝其他使用者目錄;且除了您的使用者目錄和憑證外,不存在其餘任何使用者的目錄和憑證。