建構虛擬機器 (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」(VM 執行個體) 選單中,按一下要清除的執行個體名稱,然後按一下「Edit」(編輯)

    2. 向下捲動並取消勾選「刪除執行個體時一併刪除開機磁碟」核取方塊,然後按一下「儲存」。您可以使用磁碟建立映像檔。

    3. 刪除 VM 但保留磁碟。系統會提示您確認是否要刪除。請勿選取「Also delete boot disk」(一併刪除開機磁碟)

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

    5. 在「disk」(磁碟) 底下,連結先前執行個體的磁碟做為額外的資料磁碟使用。確認「When deleting instance」(刪除執行個體時) 的選項是指定為「Keep 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」(VM 授權) 下方,記下名稱。您會在下一個步驟建立映像檔時用到這個授權名稱。

  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,並視映像檔支援的 CPU 架構,將 architecture 替換為 Armx86_64。每次更新產品圖片時,都必須使用新的不重複名稱。

    • PUBLIC_PROJECT_NAME:Cloud Marketplace 公開專案的專案 ID。您必須具備這個專案的Compute Storage 管理員角色 (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 產品,且未使用 Marketplace 擁有的映像檔,您必須將映像檔設為可供公開使用,這樣客戶才能將映像檔部署到各自的 Compute Engine 執行個體。如要將映像檔設為公開,請使用Google Cloud 控制台或 Google Cloud CLI:

控制台

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

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

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

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

  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

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