封存 Blob

歸檔層是離線層,用來儲存很少被存取的 blob 資料。 歸檔層提供最低的儲存成本,但資料擷取成本與延遲相較於線上層級(熱層與冷層)較高。 資料必須保留在封存層中至少 180 天,否則須支付提早刪除費用。 欲了解更多關於檔案存取層的資訊,請參見 檔案存取層。

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

Caution

封存層中的 blob 處於離線狀態。 也就是說,在解除凍結之前,無法讀取或修改它。 補水過程可能需要數小時,且有相關費用。 在將資料移到歸檔層之前,請考慮將 blob 資料下線是否會影響你的工作流程。

你可以使用 Azure 入口網站、PowerShell、Azure CLI,或是 Azure 儲存體 的客戶端函式庫來管理資料歸檔。

上傳時將 Blob 歸檔

如果要在上傳時存檔一個或更多的 blob,請直接在歸檔層建立該 blob。

要在從 Azure 入口網站上傳時歸檔一個或一組 blob,請遵循以下步驟:

  1. 瀏覽至目標容器。

  2. 選取上傳按鈕。

  3. 選取要上傳的檔案。

  4. 展開 進階 區塊,並將 存取層 級設為 「歸檔」。

  5. 選取上傳按鈕。

    顯示如何在 Azure 入口網站中將 Blob 上傳至封存層的螢幕擷取畫面。

封存現有的 Blob

你可以用兩種方式之一將現有的 blob 移到 archive tier:

  • 你可以用 設定 Blob 層 級操作來更改 blob 的層級。 Set Blob Tier(設定 Blob Tier )會將單一 blob 從一個層移動到另一個層級。

    請記得,當你用 Set Blob 層級把 blob 移到 archive tier 時,除非你重新讓 blob 水化,否則你無法讀取或修改 blob 的資料。 如果你可能需要在早期刪除間隔結束前讀取或修改 blob 的資料,可以考慮使用 Copy Blob 操作,在歸檔層建立 blob 的複製。

  • 你可以用 複製 Blob 操作,將線上層級的 blob 複製到 archive 層級。 你可以呼叫 複製 Blob 操作,將 Blob 從線上層級(熱或冷層)複製到 archive 層級。 原始資料塊仍停留在線上層級,你可以繼續在線上層級讀取或修改其資料。

透過變更層級來封存現有 Blob

使用 Set Blob Tier 操作,將 Blob 從 Hot 或 cool 層移到 archive 層。 Set Blob Tier 操作最適合在早期刪除間隔結束前不需要存取歸檔資料的情況。

Set Blob Tier 操作會改變單一 blob 的層級。 為了將一組 blob 移至最佳效能的歸檔層,Microsoft 建議執行批量歸檔操作。 大容量歸檔操作會在單一交易中向服務發送一批 Set Blob Tier 呼叫。 如需詳細資訊,請參閱大量封存。

要將現有的 blob 移至 Azure 入口網站的歸檔層級,請依照以下步驟操作:

  1. 導覽至 Blob 的容器。

  2. 選取要封存的 Blob。

  3. 選擇 「變更分級 」按鈕。

  4. 從存取層級下拉式選單中選取「歸檔」。

  5. 選取 [儲存]。

    截圖顯示如何在 Azure 入口網站中將 blob 的層級設定為 Archive

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

使用 複製 Blob 操作,將 Hot 或 cool 層的 blob 複製到 archive 層。 來源 blob 會保留在熱層或冷層,而目的 blob 則是在歸檔層建立。

Copy Blob 作業最適用於這類情境:在提前刪除期限屆滿之前,您可能需要讀取或修改已封存的資料。 您可以在不需要解除凍結封存的 Blob 的情況下存取來源 Blob 的資料。

不適用

大量封存

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

不適用

當大量 blob 移至 archive 層時,請使用批次操作以達到最佳效能。 批次作業會透過單一要求,將多個 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 資料的成本。 設定生命週期管理政策後,Azure 儲存體 每天執行一次。 欲了解更多生命週期管理政策,請參閱「 透過自動管理資料生命週期來優化成本」。

你可以使用 Azure 入口網站、PowerShell、Azure CLI 或 Azure Resource Manager 範本來建立生命週期管理政策。 為了簡化起見,本節僅展示如何在 Azure 入口網站建立生命週期管理政策。 欲了解更多如何建立生命週期管理政策的範例,請參見 「設定生命週期管理政策」。

Caution

在使用生命週期管理政策將資料移至歸檔層級前,請確認該資料至少 180 天內不需要刪除或移至其他層級。 在180天期限內被刪除或移至不同層級的資料,將須繳付提前刪除費用。

另外要記得,歸檔層的資料必須先重新水化,才能讀取或修改。 從封存層解除凍結一個 blob 可能需要好幾個小時,且有相關成本。

若要在 Azure 入口網站中建立用於將 Blob 封存的生命週期管理原則,請依照下列步驟操作:

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

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

  2. 在 資料管理中,找到 生命週期管理 設定。

  3. 選擇 「新增規則 」按鈕。

  4. 在 「細節 」標籤中,指定規則名稱。

  5. 指定規則範圍:要麼對你儲存帳號中的所有 blob 套用規則,要麼用過濾器限制 blobs。

  6. 選擇規則要適用的 blob 類型,並指定是否包含 blob 快照或版本。

    展示如何設定生命週期管理政策的截圖 - 詳細資料標籤。

步驟二:加入規則條件

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

    • 物件最後一次修改是在幾天前。
    • 物件是在幾天前被創造出來的。
    • 物件最後一次被存取是在幾天前。

    對於每個規則,這些條件中只能套用其中一個,才能將特定類型的物件移至封存層級。 例如,如果你定義了一個動作,將已 90 天未修改的基底 Blob 封存,那麼你也不能同時定義另一個動作,將已 90 天未被存取的基底 Blob 封存。 同樣地,你可以用以下任一條件定義每個規則一個動作來歸檔先前版本,另一個動作用來歸檔快照。

  2. 接著,指定物件被修改或存取後需經過的天數。

  3. 指定物件在該間隔過後將移至封存層級。

    顯示如何設定生命週期管理原則的螢幕擷取畫面 - Base blob 索引標籤。

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

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

如果您藉由變更 blob 的層級將其重新水合,當上次修改時間、建立時間或上次存取時間早於原則所設定的門檻時,此規則會將該 blob 移回封存層。

如果您選取了上次修改時間規則條件,則可藉由選取跳過在過去這段期間內已解除凍結的 Blob,再輸入您希望解除凍結的 Blob 從此規則中排除的天數,以避免發生這種情況。

螢幕擷取畫面顯示在上一設定中被解除凍結的跳過 Blob。

Note

此選項僅在您選擇 「最後修改 規則」條件時出現。

選擇 新增 按鈕以將規則加入政策中。

查看政策 JSON

建立生命週期管理政策後,你可以透過從清單檢視切換到程式碼檢視,在生命週期管理頁面上查看該政策的 JSON。

以下是上圖中建立的簡單生命週期管理政策的 JSON:

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

另請參閱