Share via


封存 blob

封存層是一個離線層,用於儲存極少存取的 Blob 資料。 封存層提供最低的儲存成本,但資料擷取成本和延遲則高於線上層 (經常性存取層和非經常性存取層)。 資料必須保留在封存層中至少 180 天,否則須支付提早刪除費用。 如需封存層的詳細資訊,請參閱封存存取層

當 Blob 位於封存層時,無法加以讀取或修改。 若要讀取或下載封存層中的 Blob,您必須先將其解除凍結至線上層 (經常性存取層或非經常性存取層)。 視您針對解除凍結作業指定的優先順序而定,封存層中的資料最多可能需要 15 小時才能解除凍結。 如需 Blob 解除凍結的詳細資訊,請參閱從封存層將 Blob 解除凍結的概觀

警告

封存層中的 Blob 是離線的。 亦即在解除凍結前無法讀取或修改。 解除凍結程序可能需要數小時的時間,而且會產生相關成本。 將資料移至封存層之前,請考慮讓 Blob 資料離線是否會影響您的工作流程。

您可以使用 Azure 入口網站、PowerShell、Azure CLI 或其中一個 Azure 儲存體用戶端程式庫來管理資料封存。

上傳時封存 blob

若要在上傳時封存一或多個 Blob,請直接在封存層中建立 Blob。

若要在 Azure 入口網站上傳一個 blob 或一組 blob 時加以封存,請遵循下列步驟:

  1. 瀏覽至目標容器。

  2. 選取上傳按鈕。

  3. 選取要上傳的檔案。

  4. 展開 [進階] 區段,並將 [存取層] 設定為 [封存]

  5. 選取上傳按鈕。

    Screenshot showing how to upload blobs to the archive tier in the Azure portal.

封存現有的 blob

您可以使用下列兩種方式之一,將現有的 Blob 移至封存層:

  • 您可以使用設定 Blob 層作業變更 blob 層。 設定 Blob 層會將單一 blob 從某一層移至另一層。

    請記住,當您使用設定 Blob 層將 Blob 移至封存層時,您將無法讀取或修改 Blob 資料,直到解除凍結 Blob 為止。 如果您在到達提前刪除間隔之前需要讀取或修改 Blob 資料,請考慮使用複製 Blob 作業,在封存層中建立 Blob 的複本。

  • 您可以使用複製 Blob 作業,將線上層的 Blob 複製到封存層。 您可以呼叫複製 Blob 作業,將 Blob 從線上層 (經常性存取層或非經常性存取層) 複製到封存層。 來源 blob 會留在線上層,您可以繼續在線上層讀取或修改其資料。

藉由變更 blob 層的方式來封存現有的 blob

使用設定 Blob 層作業,將 Blob 從經常性存取層或非經常性存取層移至封存層。 設定 Blob 層作業最適合在屆滿提前刪除間隔前,不需要存取封存資料的情況。

設定 Blob 層作業會變更單一 Blob 的層級。 為了在最佳效能的情況下將一組 Blob 移至封存層,Microsoft 建議執行大量封存作業。 大量封存作業會在單一交易中,將一批設定 Blob 層呼叫傳送至服務。 如需詳細資訊,請參閱大量封存

若要在 Azure 入口網站中將現有的 Blob 移至封存層,請遵循下列步驟:

  1. 瀏覽至 blob 的容器。

  2. 選取要封存的 blob。

  3. 選取 [變更階層] 按鈕。

  4. 從 [存取層] 下拉清單選取 [封存]

  5. 選取 [儲存]。

    Screenshot showing how to set a blob's tier to Archive in the Azure portal

使用複製作業封存現有的 blob

使用複製 Blob 作業,將 Blob 從經常性存取層或非經常性存取層複製到封存層。 來源 Blob 會留在經常性存取層或非經常性存取層,同時在封存層建立目的地 Blob。

複製 Blob 作業最適合在到達提前刪除間隔前需要讀取或修改封存資料的情況。 您可以存取來源 blob 資料,而不需要解除凍結封存的 blob。

N/A

大量封存

若要將 Blob 移至容器或資料夾中的封存層,請列舉 Blob,並對每個 Blob 呼叫「設定 Blob 層」作業。 下列範例示範如何執行這項作業:

N/A

將大量 Blob 移至封存層時,請使用批次作業以獲得最佳效能。 批次作業會透過單一要求,將多個 API 呼叫傳送至服務。 Blob 批次作業支援的子作業包括刪除 Blob設定 Blob 層

若要使用批次作業封存 blob,請使用其中一個 Azure 儲存體用戶端程式庫。 下列程式碼範例示範如何使用 .NET 用戶端程式庫來執行基本批次作業:

static async Task BulkArchiveContainerContents(string accountName, string containerName)
{
    string containerUri = string.Format("https://{0}.blob.core.windows.net/{1}",
                                    accountName,
                                    containerName);

    // Get container client, using Azure AD credentials.
    BlobUriBuilder containerUriBuilder = new BlobUriBuilder(new Uri(containerUri));
    BlobContainerClient blobContainerClient = new BlobContainerClient(containerUriBuilder.ToUri(), 
                                                                      new DefaultAzureCredential());

    // Get URIs for blobs in this container and add to stack.
    var uris = new Stack<Uri>();
    await foreach (var item in blobContainerClient.GetBlobsAsync())
    {
        uris.Push(blobContainerClient.GetBlobClient(item.Name).Uri);
    }

    // Get the blob batch client.
    BlobBatchClient blobBatchClient = blobContainerClient.GetBlobBatchClient();

    try
    {
        // Perform the bulk operation to archive blobs.
        await blobBatchClient.SetBlobsAccessTierAsync(blobUris: uris, accessTier: AccessTier.Archive);
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
    }
}

如需深入解析的範例應用程式示範如何使用批次作業變更階層,請參閱 AzBulkSetBlobTier

使用生命週期管理原則來封存 Blob

您可以藉由建立生命週期管理原則,將很少存取的 Blob 資料成本最佳化,以在 Blob 未經存取或修改並持續特定一段時間後,自動將 Blob 移至封存層。 設定生命週期管理原則之後,Azure 儲存體會每天執行一次。 如需生命週期管理原則的詳細資訊,請參閱透過自動管理資料生命週期將成本最佳化

您可以使用 Azure 入口網站、PowerShell、Azure CLI 或 Azure Resource Manager 範本來建立生命週期管理原則。 為了簡單起見,本節說明如何僅在 Azure 入口網站中建立生命週期管理原則。 如需示範如何建立生命週期管理原則的更多範例,請參閱設定生命週期管理原則

警告

使用生命週期管理原則將資料移至封存層之前,請確認資料在至少 180 天內不需要刪除或移至另一層。 針對在 180 天期間經過之前已刪除或移至不同層的資料,需要支付提前刪除費用。

此外請記住,必須先解除凍結封存層中的資料,才能讀取或修改資料。 從封存層解除凍結 Blob 可能需要數小時且具有相關聯的成本。

若要建立生命週期管理原則以在 Azure 入口網站中封存 Blob,請遵循下列步驟:

步驟 1:建立規則並指定 Blob 類型

  1. 在入口網站中瀏覽至您的儲存體帳戶。

  2. 在 [資料管理] 底下,找出 [生命週期管理] 設定。

  3. 選取 [新增規則] 按鈕。

  4. 在 [詳細資料] 索引標籤上,指定規則的名稱。

  5. 指定規則範圍:將規則套用至儲存體帳戶中的所有 Blob,或 限制具有篩選條件的 Blob

  6. 選取要套用規則的 Blob 類型,並指定要包含 Blob 快照集或版本。

    Screenshot showing how to configure a lifecycle management policy - Details tab.

步驟 2:新增規則條件

  1. 根據您的選取項目,您可以為基底 Blob (目前版本)、舊版或 Blob 快照集設定規則。 指定要檢查的兩個條件之一:

    • 物件上次修改於數天前。
    • 物件建立於數天前。
    • 物件上次存取於數天前。

    每個規則只能套用其中一個條件,以將特定類型的物件移至封存層。 例如,如果您定義的動作是封存 90 天內未經修改的基底 Blob,則無法同時定義另一個動作,封存 90 天內未經存取的基底 Blob。 同樣地,您可以為每個規則定義一個動作,其中一個條件可封存舊版,另一個用於封存快照集。

  2. 接下來,指定修改或存取物件之後要經過的天數。

  3. 指定在間隔經過之後,將物件移至封存層。

    Screenshot showing how to configure a lifecycle management policy - Base blob tab.

  4. 如果您選擇使用篩選條件來限制受規則影響的 Blob,則可以使用 Blob 前置詞或 Blob 索引比對來指定篩選條件。

步驟 3:確定規則排除解除凍結的 Blob

如果您是透過變更 Blob 層來解除凍結 Blob,則若上次修改時間、建立時間或上次存取時間超過原則設定的閾值,此規則會將 Blob 移回封存層。

如果選取 [上次修改時間] 的規則條件,您可以選取 [跳過在最後時間解除凍結的 Blob],然後輸入要在此規則中排除之已解除凍結 Blob 的天數,防止這種情況發生。

Screenshot showing the skip blobs that have been rehydrated in the last setting.

注意

只有在您選取 [上次修改時間] 的規則條件時,才會顯示此選項。

選取 [新增] 按鈕,將規則新增至原則。

檢視原則 JSON

建立生命週期管理原則之後,您可以在 [生命週期管理] 頁面上檢視原則的 JSON,方法是從 [清單] 檢視切換為 [程式碼檢視]

以下是在上述映像中所建立簡單生命週期管理原則的 JSON:

{
  "rules": [
    {
      "enabled": true,
      "name": "sample-archive-rule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "tierToArchive": {
              "daysAfterLastAccessTimeGreaterThan": 90,
              "daysAfterLastTierChangeGreaterThan": 7
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ]
        }
      }
    }
  ]
}

另請參閱