本文說明如何使用 REST API 來還原 Azure Backup 中的blobs。 您也可以 使用 Azure 入口網站、 Azure PowerShell、 Azure CLI,透過 Azure 備份來還原 Azure Blob。
重要
繼續使用 Azure 備份還原 Azure Blob 之前,請先參閱重點。
必要條件
本文會考慮您已針對一或多個儲存體帳戶設定備份。 了解如何設定區塊 Blob 資料的備份 (部分機器翻譯),若未設定。
為了說明本文中的還原步驟,我們將參考資源群組 msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d 下,以現有備份保存庫 TestBkpVault 所保護的儲存體帳戶中名為 testBkpVaultRG 的 Blob。
準備 Azure Blob 還原
您現在可以針對 Azure Blob 的作業備份和保存庫備份執行還原作業。
選擇備份階層:
擷取有效的還原時間範圍
因為 Blob 備份作業是連續的,所以沒有不同的還原點。 所以我們需要擷取有效的時間範圍,以將 Blob 還原至任何時間點。 在此範例中,讓我們檢查過去 30 天內的有效還原時間範圍。
您可以使用尋找可還原的時間範圍 API 來列出可還原的時間範圍。 其是一種 POST API,會觸發作業來計算儲存體帳戶中 Blob 的連續備份範圍。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/findRestorableTimeRanges?api-version=2021-01-01
針對我們的範例,這會轉譯為
POST https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d/findRestorableTimeRanges?api-version=2021-01-01
建立要求本文以擷取有效的還原時間範圍
若要觸發作業以計算有效的時間範圍,下列為要求本文的元件。
| 名稱 | 類型 | 說明 |
|---|---|---|
| 來源資料儲存類型 | 回復來源資料存儲類型 | 包含要還原之資料的資料存放區 |
| 開始時間 | 繩子 | 列出還原範圍要求的開始時間。 ISO 8601 格式。 |
| 結束時間 | 繩子 | 列出還原範圍要求的結束時間。 ISO 8601 格式。 |
擷取有效時間範圍的要求本文範例
下列要求本文會定義擷取可還原的連續資料時間範圍所需的屬性。 由於 Blob 備份位於儲存體帳戶中,因此資料存放區為「可運作」。 您可以提供開始和結束時間來協助縮小搜尋程序的範圍,並傳回可用的時間範圍。
{
"sourceDataStoreType": "OperationalStore",
"startTime": "",
"endTime": ""
}
擷取有效時間範圍的回應
提交 POST 要求後,回應會是 200 (OK),並帶有在要求的指定開始和結束時間內,可用於還原的範圍開始和結束時間。
| 名稱 | 類型 | 說明 |
|---|---|---|
| 200(確定) | AzureBackupFindRestorableTimeRangesResponseResource (部分內容可能是機器或 AI 翻譯) | 確定 |
| 其他狀態碼 | CloudError | 說明作業為何失敗的錯誤回應。 |
擷取有效時間範圍的範例回應
HTTP/1.1 200 OK
Content-Length: 379
Content-Type: application/json
Expires: -1
Pragma: no-cache
X-Content-Type-Options: nosniff
x-ms-request-id:
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: a2b7c2d9-01f5-499a-b521-55da4862c79a
x-ms-routing-request-id: CENTRALUSEUAP:20210708T184646Z:4996a2bf-2df8-48a7-9b53-a552466a27f7
Cache-Control: no-cache
Date: Thu, 08 Jul 2021 18:46:45 GMT
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
{
"id": "msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d",
"type": "Microsoft.DataProtection/backupVaults/backupInstances/findRestorableTimeRanges",
"properties": {
"restorableTimeRanges": [
{
"startTime": "2021-07-06T18:46:45.947728Z",
"endTime": "2021-07-08T18:46:45.9932408Z",
"objectType": "RestorableTimeRange"
}
],
"objectType": "AzureBackupFindRestorableTimeRangesResponse"
}
}
一旦將還原至相同儲存體帳戶的時間點是固定的,就有多個可還原的選項。
選項 1:將所有 Blob 還原至某個時間點
使用此選項可將 Blob 回復至選取的時間點,以還原儲存體帳戶中的所有區塊 Blob。 若儲存體帳戶包含大量資料或發生過大量流失,所需的還原時間可能較長。
針對所有 Blob 的時間點還原來建立要求本文
在此情節中,要記住的重點是:
- 還原發生在相同的儲存體帳戶,這表示還原的目標物件與來源資料來源相同。 這會反映在下面的還原目標資訊一節中。
- 這些是連續的備份,因此還原時間是時間點,而不是不同的復原點。
- 所有 Blob 都會還原
- 來源資料存放區 (備份所在的位置) 是相同的儲存體帳戶。 因此,來源資料存放區是「可運作的」資料存放區。
{
"restoreRequestObject": {
"objectType": "AzureBackupRecoveryTimeBasedRestoreRequest",
"restoreTargetInfo": {
"objectType": "RestoreTargetInfo",
"recoveryOption": "FailIfExists",
"restoreLocation": "westus",
"datasourceInfo": {
"datasourceType": "Microsoft.Storage/storageAccounts/blobServices",
"objectType": "Datasource",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"resourceLocation": "westus",
"resourceName": "msblobbackup",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceUri": ""
}
},
"sourceDataStoreType": "OperationalStore",
"recoveryPointTime": "2021-07-08T00:00:00.0000000Z"
}
}
選項 2:將少數容器還原至某個時間點
使用這個選項可讓您選取最多 10 個容器,以使用前置詞比對來還原 Blob 的子集。 您可以在單一容器內或跨多個容器,指定最多 10 個字典式的 Blob 範圍,讓這些 Blob 回復到過去的指定時間點狀態。 使用前置詞時,以下是一些要牢記在心的事項:
- 您可以使用正斜線 (/) 在 Blob 前置詞中劃定容器名稱
- 指定範圍的開頭包含在內,但指定的範圍為獨佔。
深入了解如何使用前置詞還原 Blob 範圍。
針對所選容器或少數 Blob 的時間點還原來建立要求本文
在此情節中,要記住的重點是:
- 還原發生在相同的儲存體帳戶,這表示還原的目標物件與來源資料來源相同。 這會反映在下面的還原目標資訊一節中。
- 這些是連續的備份,因此還原時間是時間點,而不是不同的復原點。
- 系統會還原儲存體帳戶內的少數項目。 其可以是具有前置詞模式的容器或 Blob。
- 來源資料存放區 (也就是備份所在的位置) 是相同的儲存體帳戶。 因此,來源資料存放區是「可運作的」資料存放區。
{
"restoreRequestObject": {
"objectType": "AzureBackupRecoveryTimeBasedRestoreRequest",
"restoreTargetInfo": {
"objectType": "ItemLevelRestoreTargetInfo",
"recoveryOption": "FailIfExists",
"restoreLocation": "westus",
"restoreCriteria": [
{
"objectType": "RangeBasedItemLevelRestoreCriteria",
"minMatchingValue": "Container1",
"maxMatchingValue": "Container10-0"
}
],
"datasourceInfo": {
"datasourceType": "Microsoft.Storage/storageAccounts/blobServices",
"objectType": "Datasource",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"resourceLocation": "westus",
"resourceName": "msblobbackup",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceUri": ""
}
},
"sourceDataStoreType": "OperationalStore",
"recoveryPointTime": "2021-07-08T00:00:00.0000000Z"
}
}
驗證還原要求
準備要求本文後,請使用還原 API 的驗證執行驗證。 這和備份 API 的驗證一樣,是 POST 作業。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/validateRestore?api-version=2021-01-01
針對我們的範例,這會轉譯為:
POST "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d/validateRestore?api-version=2021-01-01"
此處詳述此 POST API 的要求本文。 在上一節中,我們已針對所有 Blob 還原和少數項目還原情節,建立了相同的結構。 我們將使用相同的項目來觸發驗證作業。
驗證還原要求的回應
驗證還原要求是非同步作業。 這表示此作業會建立另一項需要個別追蹤的作業。
其會傳回兩個回應:在建立另一項作業時傳回 202 (已接受),並在該作業完成時傳回 200 (確定)。
| 名稱 | 類型 | 描述 |
|---|---|---|
| 200 確定 | 驗證要求的狀態 | |
| 202 已接受 | 已接受 |
還原驗證要求的範例回應
提交 POST 作業後,初始回應將會是 202 Accepted 並帶有 Azure-asyncOperation 標頭。
HTTP/1.1 202 Accepted
Content-Length: 0
Expires: -1
Pragma: no-cache
Retry-After: 10
Azure-AsyncOperation: https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExOzVlNzMxZDBiLTQ3MDQtNDkzNS1hYmNjLWY4YWEzY2UzNTk1ZQ==?api-version=2021-01-01
X-Content-Type-Options: nosniff
x-ms-request-id:
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: bae60c92-669d-45a4-aed9-8392cca7cc8d
x-ms-routing-request-id: CENTRALUSEUAP:20210708T205935Z:f51db7a4-9826-4084-aa3b-ae640dc78af6
Cache-Control: no-cache
Date: Thu, 08 Jul 2021 20:59:35 GMT
Location: https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationResults/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExOzVlNzMxZDBiLTQ3MDQtNDkzNS1hYmNjLWY4YWEzY2UzNTk1ZQ==?api-version=2021-01-01
X-Powered-By: ASP.NET
使用簡單的 GET 要求來追蹤 Azure-AsyncOperation 標頭。 要求成功時會傳回 200 (OK) 及成功狀態回應。
GET https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExOzVlNzMxZDBiLTQ3MDQtNDkzNS1hYmNjLWY4YWEzY2UzNTk1ZQ==?api-version=2021-01-01
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExOzVlNzMxZDBiLTQ3MDQtNDkzNS1hYmNjLWY4YWEzY2UzNTk1ZQ==",
"name": "ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExOzVlNzMxZDBiLTQ3MDQtNDkzNS1hYmNjLWY4YWEzY2UzNTk1ZQ==",
"status": "Succeeded",
"startTime": "2021-07-08T20:59:35.0060264Z",
"endTime": "2021-07-08T20:59:57Z"
}
觸發還原要求
觸發還原作業是 POST API。 觸發還原作業的所有詳細資料都記錄於此處。
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/restore?api-version=2021-01-01
針對我們的範例,這會轉譯為:
POST "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d/restore?api-version=2021-01-01"
建立還原作業的要求本文
驗證要求後,就可以使用相同的要求本文觸發包含次要變更的還原要求。
所有 Blob 還原的要求本文範例
驗證還原要求本文的唯一變更是在開始時移除 "restoreRequest" 物件。
{
"objectType": "AzureBackupRecoveryTimeBasedRestoreRequest",
"restoreTargetInfo": {
"objectType": "RestoreTargetInfo",
"recoveryOption": "FailIfExists",
"restoreLocation": "westus",
"datasourceInfo": {
"datasourceType": "Microsoft.Storage/storageAccounts/blobServices",
"objectType": "Datasource",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"resourceLocation": "westus",
"resourceName": "msblobbackup",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceUri": ""
}
},
"sourceDataStoreType": "OperationalStore",
"recoveryPointTime": "2021-07-08T00:00:00Z"
}
項目或少數 Blob 還原的範例要求本文
驗證還原要求本文的唯一變更是在開始時移除 "restoreRequest" 物件。
{
"objectType": "AzureBackupRecoveryTimeBasedRestoreRequest",
"restoreTargetInfo": {
"objectType": "ItemLevelRestoreTargetInfo",
"recoveryOption": "FailIfExists",
"restoreLocation": "westus",
"restoreCriteria": [
{
"objectType": "RangeBasedItemLevelRestoreCriteria",
"minMatchingValue": "Container1",
"maxMatchingValue": "Container2"
}
],
"datasourceInfo": {
"datasourceType": "Microsoft.Storage/storageAccounts/blobServices",
"objectType": "Datasource",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"resourceLocation": "westus",
"resourceName": "msblobbackup",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceUri": ""
}
},
"sourceDataStoreType": "OperationalStore",
"recoveryPointTime": "2021-07-08T00:00:00.0000000Z"
}
觸發還原要求的回應
觸發還原要求是非同步作業。 這表示此作業會建立另一項需要個別追蹤的作業。
其會傳回兩個回應:在建立另一項作業時傳回 202 (已接受),並在該作業完成時傳回 200 (確定)。
| 名稱 | 類型 | 描述 |
|---|---|---|
| 200 確定 | 還原要求的狀態 | |
| 202 已接受 | 已接受 |
觸發還原要求的範例回應
提交 POST 作業後,初始回應將會是 202 Accepted 並帶有 Azure-asyncOperation 標頭。
HTTP/1.1 202 Accepted
Content-Length: 0
Expires: -1
Pragma: no-cache
Retry-After: 30
Azure-AsyncOperation: https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExO2Q1NDIzY2VjLTczYjYtNDY5ZC1hYmRjLTc1N2Q0ZTJmOGM5OQ==?api-version=2021-01-01
X-Content-Type-Options: nosniff
x-ms-request-id:
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1197
x-ms-correlation-request-id: 8661209c-5b6a-44fe-b676-4e2b9c296593
x-ms-routing-request-id: CENTRALUSEUAP:20210708T204652Z:69e3fa4b-c5d9-4601-9410-598006ada187
Cache-Control: no-cache
Date: Thu, 08 Jul 2021 20:46:52 GMT
Location: https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationResults/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExO2Q1NDIzY2VjLTczYjYtNDY5ZC1hYmRjLTc1N2Q0ZTJmOGM5OQ==?api-version=2021-01-01
X-Powered-By: ASP.NET
使用簡單的 GET 要求來追蹤 Azure-AsyncOperation 標頭。 要求成功後,即會傳回 200 (OK) 並帶有進一步追蹤完成還原要求的作業識別碼。
GET https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExO2Q1NDIzY2VjLTczYjYtNDY5ZC1hYmRjLTc1N2Q0ZTJmOGM5OQ==?api-version=2021-01-01
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/providers/Microsoft.DataProtection/locations/westus/operationStatus/ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExO2Q1NDIzY2VjLTczYjYtNDY5ZC1hYmRjLTc1N2Q0ZTJmOGM5OQ==",
"name": "ZmMzNDFmYWMtZWJlMS00NGJhLWE4YTgtMDNjYjI4Y2M5OTExO2Q1NDIzY2VjLTczYjYtNDY5ZC1hYmRjLTc1N2Q0ZTJmOGM5OQ==",
"status": "Succeeded",
"startTime": "2021-07-08T20:46:52.4110868Z",
"endTime": "2021-07-08T20:46:56Z",
"properties": {
"jobId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupJobs/c4bd49a1-0645-4eec-b207-feb818962852",
"objectType": "OperationJobExtendedInfo"
}
}
追蹤作業
觸發程式還原要求會啟動還原作業,並使用 GET Jobs API (部分機器翻譯) 來追蹤產生的作業識別碼。
使用簡單的 GET 命令,追蹤上述觸發還原回應中提供的 JobId。
GET /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupJobs/c4bd49a1-0645-4eec-b207-feb818962852?api-version=2021-01-01
{
"properties": {
"activityID": "4195ca6c-e02d-11eb-b0b1-70bc105e2242",
"subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
"backupInstanceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/msblobbackup-f2df34eb-5628-4570-87b2-0331d797c67d",
"policyId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupPolicies/BlobBackup-Policy",
"dataSourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"vaultName": "BV-JPE-GRS",
"backupInstanceFriendlyName": "msblobbackup",
"policyName": "BlobBackup-Policy",
"sourceResourceGroup": "RG-BlobBackup",
"dataSourceName": "msblobbackup",
"progressEnabled": false,
"etag": "W/\"datetime'2021-07-08T20%3A48%3A36.6999667Z'\"",
"sourceSubscriptionID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
"dataSourceLocation": "westus",
"startTime": "2021-07-08T20:44:19.5467125Z",
"endTime": "2021-07-08T20:48:35.8297312Z",
"dataSourceType": "Microsoft.Storage/storageAccounts/blobServices",
"operationCategory": "Restore",
"operation": "Restore",
"status": "Completed",
"isUserTriggered": true,
"supportedActions": [
""
],
"duration": "PT4M16.2830187S",
"extendedInfo": {
"sourceRecoverPoint": {
"recoveryPointTime": "2021-07-08T00:00:00Z"
},
"recoveryDestination": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/RG-BlobBackup/providers/Microsoft.Storage/storageAccounts/msblobbackup",
"subTasks": [
{
"taskId": 1,
"taskName": "Trigger Restore",
"taskStatus": "Completed"
}
]
}
},
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/TestBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupJobs/c4bd49a1-0645-4eec-b207-feb818962852",
"name": "c4bd49a1-0645-4eec-b207-feb818962852",
"type": "Microsoft.DataProtection/BackupVaults/backupJobs"
}
上述作業狀態表示還原作業已完成,而且所有 Blob 都已復原到指定的時間點。
下一步
如需 Azure 備份 REST API 的詳細資訊,請參閱下列文件:
- Azure 資料保護提供者 REST API
- Get started with Azure REST API (開始使用 Azure REST API)
- 管理備份和還原作業