将 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. 选择上载按钮。

    演示如何在 Azure 门户中将 Blob 上传到存档层的屏幕截图。

将现有的 Blob 存档

可以通过以下两种方式之一将现有 Blob 移到存档层:

  • 可以使用 “设置 Blob 层”操作更改 Blob 的层设置 Blob 层 可将单个 Blob 从一个层移到另一个层。

    请记住,当你使用 Set Blob Tier 将 Blob 移动到存档层级时,在将 Blob 重新水化之前,无法读取或修改 Blob 的数据。 如果需要在提前删除间隔过之前读取或修改 Blob 的数据,请考虑使用 复制 Blob 操作在存档层中创建 Blob 的副本。

  • 可以使用 复制 Blob 操作将联机层中的 Blob 复制到存档层。 可以调用 复制 Blob 操作,将 Blob 从联机层(热层或冷层)复制到存档层。 源 Blob 保留在联机层中,你可以继续读取或修改联机层中的数据。

通过更改现有 Blob 层来存档现有 Blob

使用 “设置 Blob 层” 操作将 Blob 从热层或冷层移动到存档层。 “设置 Blob 层”操作最适合在提前删除间隔过前无需访问存档数据的情况。

设置 Blob 层操作更改单个 Blob 的层。 若要将一组 Blob 移到具有最佳性能的存档层,Azure建议执行批量存档操作。 批量存档操作在单个事务中向服务发送一批 “设置 Blob 层 ”调用。 有关详细信息,请参阅 批量存档

若要将现有 Blob 移到 Azure 门户中的存档层,请执行以下步骤:

  1. 转到 Blob 所在的容器。

  2. 选择要存档的Blob。

  3. 选择 “更改层 ”按钮。

  4. “访问层”下拉列表中选择“存档”。

  5. 选择“保存”

    显示如何在 Azure 门户中将 Blob 层设置为存档的屏幕截图

通过复制操作将现有 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.chinacloudapi.cn/{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 资源管理器模板来创建生命周期管理策略。 为简单起见,本部分介绍如何仅在Azure门户中创建生命周期管理策略。 有关如何创建生命周期管理策略的更多示例,请参阅 “配置生命周期管理策略”。

注意

在使用生命周期管理策略将数据移动到存档层之前,请确认该数据在至少 180 天内不需要删除或移动到另一层。 在 180 天时间段过前删除或移动到其他层的数据将受到提前删除费用。

另请记住,存档层中的数据必须先解除冻结,然后才能读取或修改数据。 将存档层中的 Blob 重新水化可能需要数小时,并会产生相关费用。

若要在 Azure 门户中创建用于存档 blob 的生命周期管理策略,请执行以下步骤:

步骤 1:创建规则并指定 Blob 类型

  1. 在门户中导航到存储帐户。

  2. “数据管理”下,找到 生命周期管理 设置。

  3. 选择 “添加规则 ”按钮。

  4. 在“ 详细信息 ”选项卡上,指定规则的名称。

  5. 指定规则范围: 将规则应用于存储帐户中的所有 Blob,或者 使用筛选器限制 Blob

  6. 选择要应用规则的 blob 类型,并指定是包含 Blob 快照还是版本。

    显示如何配置生命周期管理策略 - 详细信息选项卡的屏幕截图。

步骤 2:添加规则条件

  1. 根据你的选择,你可以为基础 Blob(当前版本)、先前版本或 Blob 快照配置规则。 指定要检查的两个条件之一:

    • 这些对象上次修改是在几天前。
    • 对象是在几天前创建的。
    • 这些对象上次被访问是在几天前。

    只能应用其中一个条件将特定类型的对象移动到每个规则的存档层。 例如,如果你定义了一项操作,将 90 天内未被修改的基本 Blob 存档,那么你就不能再定义另一项操作,将 90 天内未被访问的基本 Blob 存档。 同样,可以为每个规则定义一个操作,其中任一条件用于存档以前的版本,一个用于存档快照。

  2. 接下来,指定修改或访问对象后要经过的天数。

  3. 指定在间隔过后将对象移动到存档层。

    显示如何配置生命周期管理策略 - 基本 Blob 选项卡的屏幕截图。

  4. 如果您选择通过筛选器限制受该规则影响的 Blob 对象,则可以使用 Blob 前缀或 Blob 索引匹配来指定筛选器。

步骤 3:确保规则排除解除冻结的 Blob

如果通过更改 Blob 层来解除冻结 Blob,则如果上次修改时间、创建时间或上次访问时间超出策略设置的阈值,此规则会将 Blob 移回存档层。

如果选择 了“上次修改 的规则条件”,则可以通过选择 “跳过上次解除冻结的 blob”,然后输入希望从此规则中排除解除冻结 blob 的天数来防止这种情况发生。

显示上一设置中已解除冻结的跳过 blob 的屏幕截图。

注释

仅当选择了 上次修改 的规则条件时,才会显示此选项。

选择 “添加 ”按钮,将规则添加到策略。

查看策略 JSON

创建生命周期管理策略后,可以通过从列表视图切换到代码视图,在生命周期管理页上查看策略的 JSON。

下面是在上面所示的映像中创建的简单生命周期管理策略的 JSON:

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

另见