你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

存档 blob

存档层是用于存储极少访问的 Blob 数据的脱机层。 与联机层(热层和冷层)相比,存档层的存储成本最低,但数据检索成本和延迟更高。 存档层中的数据必须至少保留 180 天,否则需要支付提前删除费。 有关存档层的详细信息,请参阅存档访问层

当 Blob 位于存档层时,它无法读取或修改。 若要读取或下载存档层中的 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 移动到存档层,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 进行解除冻结。

空值

批量存档

若要将 blob 移动到容器或文件夹中的存档层,请枚举 blob,并在每个 blob 上调用“设置 blob 层”操作。 下面的示例展示了如何执行此操作:

空值

将大量 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 资源管理器模板来创建生命周期管理策略。 为简洁起见,本部分仅演示如何在 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 的天数来阻止这种情况发生。

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"
          ]
        }
      }
    }
  ]
}

另请参阅