在專案之間複製 VM


本文說明如何將 VM 複製到其他專案。

事前準備

  • 請參閱 永久磁碟快照的最佳做法,為開機磁碟建立快照做好準備。
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:
    1. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    2. Set a default region and zone.

必要的角色

如要取得在專案之間複製 VM 所需的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備在專案之間複製 VM 所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要在專案之間複製 VM,必須具備下列權限:

  • 專案的 compute.instances.create
  • 如要使用自訂映像檔建立 VM: compute.images.useReadOnly 在映像檔上
  • 如要使用快照建立 VM: compute.snapshots.useReadOnly 快照
  • 如要使用執行個體範本建立 VM,請按照下列步驟操作: compute.instanceTemplates.useReadOnly 在執行個體範本上
  • 如要將舊版網路指派給 VM,請按照下列步驟操作: compute.networks.use 專案
  • 如要為 VM 指定靜態 IP 位址: 專案的 compute.addresses.use
  • 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中設定 compute.networks.useExternalIp
  • 如要為 VM 指定子網路,請在專案或所選子網路上授予 compute.subnetworks.use 權限。
  • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上取得 compute.subnetworks.useExternalIp 權限。
  • 如要為 VM 設定 VM 執行個體中繼資料,請在專案中執行下列指令: compute.instances.setMetadata
  • 如要為 VM 設定標記,請按照下列步驟操作: compute.instances.setTags 在 VM 上
  • 如要為 VM 設定標籤,請按照下列步驟操作: compute.instances.setLabels 在 VM 上
  • 如要設定 VM 使用的服務帳戶: compute.instances.setServiceAccount 在 VM 上
  • 為 VM 建立新磁碟: compute.disks.create 專案的
  • 如要以唯讀或讀寫模式附加現有磁碟: 磁碟的 compute.disks.use
  • 如要以唯讀模式連接現有磁碟: compute.disks.useReadOnly 磁碟的

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

將 VM 複製到其他專案

  1. 在來源專案中,使用下列任一指令建立 VM 開機磁碟的快照:

    區域開機磁碟

    如果 VM 具有區域開機磁碟,請使用下列指令建立快照:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --snapshot-type SNAPSHOT_TYPE \
        --source-disk-zone SOURCE_DISK_ZONE
    

    更改下列內容:

    • SNAPSHOT_NAME:快照的名稱。
    • SOURCE_DISK:要用來建立快照的區域永久磁碟磁碟區名稱。
    • SNAPSHOT_TYPE:快照類型,可以是 STANDARDARCHIVE。如果未指定快照類型,系統會建立 STANDARD 快照。選擇「封存」可更有效率地保留資料。
    • SOURCE_DISK_ZONE:您要用來建立快照的區域永久磁碟磁碟區所在區域。

    區域開機磁碟

    如果 VM 具有地區開機磁碟,請使用下列指令建立快照:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-region=SOURCE_DISK_REGION \
        --snapshot-type=SNAPSHOT_TYPE
    

    更改下列內容:

    • SNAPSHOT_NAME:快照的名稱。
    • SOURCE_DISK:要用來建立快照的地區永久磁碟磁碟區名稱。
    • SOURCE_DISK_REGION:要建立快照的地區永久磁碟磁碟區所屬區域。
    • SNAPSHOT_TYPE:快照類型,可以是 STANDARDARCHIVE。如果未指定快照類型,系統會建立 STANDARD 快照。

  2. 使用下列指令,從快照建立自訂映像檔:

    gcloud compute images create IMAGE_NAME \
        --source-snapshot=SOURCE_SNAPSHOT \
        [--storage-location=LOCATION]
    

    更改下列內容:

    • IMAGE_NAME:新映像檔的名稱
    • SOURCE_SNAPSHOT:您要建立映像檔的來源快照
    • LOCATION:選用:旗標,可指定儲存映像檔的地區或多地區。例如,指定 us 會將映像檔儲存在 us 多地區;指定 us-central1 則會儲存在 us-central1 地區。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源位置的多地區。
  3. 選用:與在目標專案中建立 VM 的使用者共用自訂映像檔。如要進一步瞭解如何共用自訂映像檔,請參閱「在機構中共用自訂映像檔」。

  4. 在目標專案中,使用下列指令從自訂映像檔建立 VM:

    gcloud compute instances create VM_NAME \
        --image-project IMAGE_PROJECT \
        IMAGE_FLAG \
        --subnet SUBNET
    

    更改下列內容:

    • VM_NAME:VM 名稱
    • IMAGE_PROJECT:包含圖片的 Google Cloud 專案 ID
    • IMAGE_FLAG:指定下列其中一個值:
      • 使用 --image IMAGE_NAME 旗標指定自訂映像檔。

        例如 --image my-debian-image-v2

      • 如果您將自訂映像檔建立為自訂映像檔系列的一部分,請使用 --image-family IMAGE_FAMILY_NAME 旗標指定該自訂映像檔系列。

        這會使用自訂映像檔系列中未淘汰的最新 OS 映像檔和 OS 版本,建立 VM。舉例來說,如果您指定 --image-family my-debian-family,Compute Engine 會從自訂 my-debian-family 映像檔系列中,使用最新的 OS 映像檔建立 VM。

    • SUBNET:如果子網路和執行個體位於同一個專案中,請將 SUBNET 替換為與執行個體位於相同地區的子網路名稱。

      如要在共用虛擬私有雲網路中指定子網路,請將 SUBNET 替換為下列格式的字串:

              projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
             

      更改下列內容:

      • HOST_PROJECT_ID:共用虛擬私有雲主專案的專案 ID
      • REGION:子網路的區域
      • SUBNET_NAME:子網路名稱

      共用虛擬私有雲網路的子網路區域也必須與包含執行個體的區域相符。

後續步驟