從即時快照還原磁碟


如要存取即時快照中擷取的資料,您必須從即時快照還原或建立新磁碟。

本頁說明如何從即時快照建立磁碟。建立磁碟後,您可以將磁碟連接至虛擬機器 (VM) 來使用。

事前準備

  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

必要角色和權限

如要取得從即時快照建立磁碟所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色具備從即時快照建立磁碟所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要透過即時快照建立磁碟,必須具備下列權限:

  • 如何建立磁碟:
    • 新磁碟目的地專案的 compute.disks.create
    • 來源即時快照的 compute.instantSnapshots.useReadOnly 權限

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

限制

相關限制如下:

  • 從即時快照建立磁碟時,新磁碟一律會採用與快照來源磁碟相同的類型、儲存位置和加密方式。

  • 您無法直接透過即時快照建立 VM,您必須從即時快照建立磁碟,然後使用新磁碟建立 VM。

  • 如果即時快照的來源磁碟使用客戶自行管理或提供的加密金鑰,您必須在透過即時快照建立新磁碟時,提供相同的加密金鑰。

    請參考以下範例。假設您有一個磁碟 DISK-1,並使用客戶提供的加密金鑰 (CSEK) 進行加密 KEY-1。您也從 DISK-1 建立了即時快照 IS-1。 如要從 IS-1 建立新磁碟,您必須在建立新磁碟時提供相同的金鑰 KEY-1

    如果磁碟是以客戶自行管理的加密金鑰 (CMEK) 加密,只有在使用 REST 或 gcloud CLI 建立磁碟時,才需要提供金鑰。如果您使用Google Cloud 控制台,則不需要指定加密金鑰。

透過即時快照建立磁碟

即時快照會採用與來源磁碟相同的加密方式。 從即時快照建立磁碟的步驟,取決於即時快照來源磁碟的加密方式。

來源磁碟會透過下列其中一種方法加密:

  • Google-owned and Google-managed encryption keys。這是預設設定。
  • 由客戶管理的加密金鑰 (CMEK)
  • 客戶提供的加密金鑰 (CSEK)。

如要瞭解特定磁碟的加密方式,請參閱查看磁碟加密資訊

透過以預設加密方式加密的即時快照建立磁碟

您可以使用 gcloud CLI、 Google Cloud 控制台或 REST,從即時快照建立磁碟。

主控台

  1. 找出要還原的即時快照:

    1. 前往 Google Cloud 控制台的「快照」頁面。

      前往「快照」

    2. 按一下「即時快照」分頁標籤。

    3. 在「Name」(名稱) 欄中,按一下要還原的即時快照名稱。

  2. 按一下 [Create Disk] (建立磁碟)

  3. 在「Name」(名稱) 欄位中,輸入磁碟的新名稱。

  4. 選用:在「說明」欄位中輸入其他詳細資料。

  5. 確認「磁碟來源類型」為「即時快照」

  6. 在「來源即時快照」清單中,選擇即時快照。

  7. 選用:設定磁碟的其他自訂項目。

    • 輸入大小:在「Size」(大小) 欄位中,指定磁碟大小 (以 GB 為單位)。 大小必須等於或大於快照來源磁碟的大小。
    • 排定備份作業:如要讓 Compute Engine 定期為這個新磁碟建立標準快照,請選取「啟用快照排程」核取方塊,然後選擇快照排程。否則請取消勾選核取方塊。
  8. 選用:如要整理專案,請新增一或多個標籤

  9. 如要建立磁碟,請按一下「建立」

gcloud

使用 gcloud compute disks create 指令。您指定的引數取決於要建立區域或地區磁碟。

建立可用區磁碟

使用 --zone 旗標指定可用區:

gcloud compute disks create DISK_NAME --zone=ZONE \
  --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • ZONE:新磁碟的可用區,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

使用 --region 指定區域,並使用 --replica-zones 指定新磁碟的目標複製區域。

gcloud compute disks create DISK_NAME \
 --region=REGION \
 --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
 --replica-zones=ZONE1,ZONE2

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • REGION:地區磁碟所在的地區,例如:europe-west1
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:該地區中這兩個磁碟備用資源所在的區域,例如:europe-west1-b,europe-west1-c

REST

如要從即時快照建立區域或地區磁碟,請使用 disks.insert 方法。新磁碟的類型必須與即時快照來源磁碟的類型相同。舉例來說,您無法從區域磁碟的快照建立區域磁碟。

建立可用區磁碟

發出 POST 要求,並指定來源即時快照。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME"
}

更改下列內容:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的可用區,例如 us-central1-a。磁碟會在這個可用區中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

發出 POST 要求,指定來源即時快照和磁碟應複製到的區域。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/region/SOURCE_REGION/disks/insert

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/regions/SOURCE_REGION/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"replicaZones": [
  "projects/PROJECT/zones/ZONE1",
  "projects/PROJECT/zones/ZONE2"
]
}

更改下列內容:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_REGION:即時快照所在的區域。 磁碟是在這個區域中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:兩個磁碟副本所在的區域,例如 europe-west1-beurope-west1-c

API 要求回應

如果 POST 要求成功,回應主體會是物件,您可以輪詢該物件,取得磁碟建立狀態。詳情請參閱「處理 API 回應」。

透過以 CMEK 或 CSEK 加密的即時快照建立磁碟

主控台

如果即時快照使用 Google 預設或 CMEK 加密,當您從即時快照建立磁碟時, Google Cloud 控制台會自動提供加密金鑰。否則,如果即時快照經過 CSEK 加密,您必須提供加密金鑰才能建立磁碟。

請按照「Google 代管的加密」一節中的步驟操作,並按照下列操作說明指定加密金鑰:

  1. 在「解密」部分,於「加密金鑰」欄位中輸入加密金鑰。
  2. 如果金鑰已使用公開 RSA 金鑰包裝,請選取「經過包裝的金鑰」

gcloud

使用 gcloud compute disks create 指令

如果來源磁碟經過 CMEK 加密,請使用 --kms-key 參數提供金鑰名稱。

如果來源磁碟經過 CSEK 加密,請使用 --csek-key-file 參數指定來源磁碟的加密金鑰。

CMEK

如要從 CMEK 加密即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --kms-key=projects/KMS_PROJECT_NAME/locations/KEYRING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區域,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT_NAME:包含金鑰的專案。
  • KEYRING_LOCATION:金鑰所屬金鑰環的位置。 如果金鑰環是全域,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING_NAME:包含金鑰的金鑰環名稱,例如 key-ring-1
  • KEY_NAME:用於加密磁碟的金鑰名稱。

CSEK

如要從 CSEK 加密的即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --csek-key-file=PATH_TO_CSEK_JSON_FILE
 

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區域,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • CSEK_JSON_FILE:包含金鑰的 JSON 檔案路徑。請參閱 CSEK 檔案格式範例

如要建立地區磁碟,請將上述範例中的 --zone 標記替換為下列標記:

  • --region:新磁碟的區域
  • --replica-zones:該地區中這兩個磁碟備用資源所在的區域。

REST

如要從以 CMEK 或 CSEK 加密的即時快照建立區域或地區磁碟,請使用「Google 管理的加密」一節中列出的屬性,向 disks.insert 方法提出 POST 要求。

此外,請在 diskEncryptionKey 欄位中提供來源磁碟的加密金鑰。diskEncryptionKey 欄位的屬性取決於磁碟是否經過 CMEK 或 CSEK 加密。

下列範例說明如何為每種加密類型建立新的區域磁碟。

CMEK

在要求主體中,使用 diskEncryptionKey.kmsKeyName 屬性指定金鑰名稱:

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"diskEncryptionKey": {
      "kmsKeyName": "projects/KMS_PROJECT/locations/LOCATION/keyRings/KEYRING_LOCATION/cryptoKeys/KEY_NAME"
  }
}

更改下列內容:

  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的可用區,例如 us-central1-a。磁碟會在這個可用區中建立。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT:包含金鑰的專案。
  • LOCATION:金鑰所屬金鑰環的位置。如果金鑰環是全域,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING:包含金鑰的金鑰環名稱,例如 key-ring-1
  • KEY:用於加密磁碟的金鑰名稱。

CSEK

要求主體取決於用於加密即時快照的 CSEK 是否經過 RSA 加密。

如要使用原始 (非 RSA 加密) 金鑰,請在要求主體的 diskEncryptionKey.rawKey 屬性中指定金鑰:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
  "name": "NEW_DISK_NAME",
  "sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/INSTANT_SNAPSHOT_NAME,
  "diskEncryptionKey": {
      "rawKey": "RAW_ENCRYPTION_KEY"
  }
}

將下列項目替換為對應的值:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的可用區,例如 us-central1-a。磁碟會在這個可用區中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • RAW_ENCRYPTION_KEY:用於加密即時快照及其來源磁碟的金鑰,例如 SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

如要使用 RSA 加密金鑰,請按照下列方式修改上述範例:

  • disks.insert 方法發出 POST 要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/insert
    

  • 在要求主體的 diskEncryptionKey.rsaEncryptedKey 屬性中指定金鑰:

    "diskEncryptionKey": {
     "rsaEncryptedKey": "RSA_ENCRYPTED_KEY"
    }
    

RSA_ENCRYPTED_KEY 替換為加密金鑰。

API 要求回應

如果 POST 要求成功,回應主體會是物件,您可以輪詢該物件,取得磁碟建立狀態。詳情請參閱「處理 API 回應」。