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

Azure Blob 存储生命周期管理策略结构

可以使用生命周期管理策略根据 Blob 的使用模式将 Blob 转换为经济高效的访问层。 还可以在 Blob 生命周期结束时完全删除这些 Blob。 策略可以针对当前版本、以前的版本和快照运行,但策略不会在系统容器(如 $logs$web 容器)中的 Blob 上运行。 有关常规信息,请参阅 Azure Blob 存储生命周期管理概述

本文介绍生命周期管理策略的元素。 有关策略示例,请参阅以下文章:

小窍门

虽然生命周期管理有助于优化单个帐户的成本,但您可以使用 Azure 存储操作 在大规模下跨多个帐户执行多种数据操作。

规则

生命周期管理策略是 JSON 文档中的规则集合。 下方的 JSON 示例显示了完整的规则定义:

{
  "rules": [
    {
      "name": "rule1",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {...}
    },
    {
      "name": "rule2",
      "type": "Lifecycle",
      "definition": {...}
    }
  ]
}
参数名称 参数类型 注释
规则 规则对象的数组 一个策略至少需要包含一个规则。 最多可在一个策略中定义 100 个规则。

策略中的每个规则都拥有多个参数,如下表所述:

参数名称 类型 注释 必选
名字 字符串 规则名称最多只能包含 256 个字母数字字符。 规则名称区分大小写。 该名称必须在策略中唯一。 是的
启用 布尔型 一个允许暂时禁用规则的可选布尔值。 默认值为真。
类型 枚举值 当前的有效类型为 Lifecycle 是的
定义 定义生命周期规则的对象 每个定义均由筛选器集和操作集组成。 是的

过滤 器

筛选器将操作限制为存储帐户中的 Blob子集。 可以使用筛选器指定要包含的 Blob 对象。 筛选器不提供指定要排除的 Blob 的方法。 如果定义了多个筛选器,则逻辑 AND 将应用于所有筛选器。 下表描述了每个参数。

筛选器名称 类型 DESCRIPTION 必选
blobTypes 预定义的枚举值数组 blob 的类型( blockblobappendBlob 是的
prefixMatch 字符串数组 这些字符串是要匹配的前缀。
blobIndexMatch 包含字典值的数组 这些值由要匹配的 Blob 索引标记键和值条件组成。

前缀匹配筛选器

如果应用 prefixMatch 筛选器,则每个规则最多可以定义 10 个区分大小写的前缀。 前缀字符串必须以容器名称开头。 例如,如果要匹配路径 https://myaccount.blob.core.windows.net/sample-container/blob1/...下的所有 Blob,请将 prefixMatch 指定为 sample-container/blob1

此筛选器将匹配 sample-container 中名称以 blob1 开头的所有 Blob。 如果未定义前缀匹配,则规则将应用于存储帐户中的所有 Blob。 前缀字符串不支持通配符匹配。 *? 等字符被视为字符串字面量。

Blob 索引匹配筛选器

如果应用 blobIndexMatch 筛选器,则每个规则最多可以定义 10 个 Blob 索引标记条件。 例如,如果要将所有 Blob 与 Project = Contoso 下面 https://myaccount.blob.core.windows.net/匹配,则 blobIndexMatch 筛选器为 {"name": "Project","op": "==","value": "Contoso"}。 如果未为 blobIndexMatch 筛选器定义值,则规则将应用于存储帐户中的所有 Blob。

行动

必须为每个规则至少定义一个动作。 满足运行条件时,操作会应用于筛选后的数据块。 若要了解有关运行条件的详细信息,请参阅本文的 “作运行条件 ”部分。 下表描述了策略定义中可用的每个操作。

行动 DESCRIPTION
TierToCool 将 Blob 设置为冷访问层。

不支持追加 Blob、页 Blob,也不支持高级块 Blob 存储帐户中的 Blob。
TierToCold 将 Blob 设置为寒访问层。

不支持追加 Blob、页 Blob,也不支持高级块 Blob 存储帐户中的 Blob。
TierToArchive 将 Blob 设置为存档访问层。

解冻 Blob 不会更新 Blob 的上次修改或上次访问时间属性。 因此,此操作可能会将解冻的 Blob 移回到存档层。 若要防止发生这种情况,请将 daysAfterLastTierChangeGreaterThan 条件添加到此作。

此操作不支持追加 Blob、页 Blob,也不支持高级块 Blob 存储帐户中的 Blob。 此外,不支持使用加密范围的 Blob,也不支持帐户中配置了区域冗余存储 (ZRS)、异地区域冗余存储 (GZRS)/读取访问异地区域冗余存储 (RA-GZRS) 的 Blob。
enableAutoTierToHotFromCool 如果 Blob 设置为冷层,则当访问 Blob 时,此作会自动将该 Blob 移到热层。

此操作仅在与 daysAfterLastAccessTimeGreaterThan 运行条件一起使用时才可用。

此操作不会对在启用此规则之前已设置为冷层的 Blob 对象产生任何影响。

此操作每 30 天内仅能将数据块从冷迁移到热一次。 此保护措施已到位,防止帐户因提前删除而被收取罚款。

不支持先前的版本或快照。
删除 删除 Blob。

不支持页 Blob,也不支持不可变容器中的 Blob。

如果在同一个 Blob 上定义了多个操作,则生命周期管理会选择成本最低的操作应用于该 Blob。 例如,删除 操作比 tierToArchive 操作便宜,而 tierToArchive 操作又比 tierToCool 操作便宜。

在具有分层命名空间的帐户中删除操作

启用了分层命名空间的帐户中,当执行删除操作时,将删除空目录。 如果目录不为空,则 delete 操作会在第一个生命周期策略执行周期内删除满足策略条件的对象。 如果该操作产生的空目录也满足策略条件,则该目录将在下一个执行周期内被删除,依此类推。

在具有版本和快照的 Blob 上执行删除操作

在删除与该 Blob 关联的任何以前版本或快照之前,生命周期管理策略不会删除 Blob 的当前版本。 如果存储帐户中的 blob 有以前的版本或快照,则在将 delete 操作指定为策略的一部分时,必须包含以前的版本和快照。

动作运行条件

所有运行条件都是基于时间的。 如果已过去的天数超过了为条件指定的天数,则可以执行关联的动作。 策略条件仅在策略运行期间对每个对象进行评估一次。 在某些情况下,对象在运行已评估后可能满足条件。 此类对象在后续运行中进行处理。

为了跟踪陈旧程度,当前版本使用上次修改时间或上次访问时间,旧版本使用版本创建时间,blob 快照使用快照创建时间。

下表描述了每个操作运行条件。

条件名称 类型 DESCRIPTION
daysAfterModificationGreaterThan 整数 自 Blob 上次修改时间起的天数。 适用于对 Blob 的当前版本执行的操作。
daysAfterCreationGreaterThan 整数 自创建时间起的天数。 适用于对 Blob 当前版本、以前版本或 Blob 快照进行的操作。
daysAfterLastAccessTimeGreaterThan 整数 自上次访问时间起的天数;在某些情况下,指自启用策略日期起的天数。 若要了解详细信息,请参阅下面的 “访问时间跟踪 ”部分。 适用于启用访问跟踪后对 Blob 的当前版本执行的操作。
daysAfterLastTierChangeGreaterThan 整数 自上次 Blob 层级更改时间起的天数。 解除冻结的 blob 在返回到存档层之前在热、冷或寒层中保留的最短持续时间(以天为单位)。 仅适用于 tierToArchive 操作。

访问时间跟踪

可以启用访问时间跟踪,以记录上次读取或写入 Blob 的时间,以及作为筛选器来管理 Blob 数据的分层和保留。

启用访问时间跟踪时,读取或写入 Blob 时将更新一个名为 LastAccessTime 的 Blob 属性。 获取 Blob上传 Blob操作是访问操作,并将更新 Blob 的访问时间戳。 但是,获取 Blob 属性获取 Blob 元数据获取 Blob 标记不是访问操作。 这些操作不会更新 blob 的访问时间。

如果将 daysAfterLastAccessTimeGreaterThan 运行条件应用于策略,则 LastAccessTime 用于确定是否满足该条件。

如果将 daysAfterLastAccessTimeGreaterThan 运行条件应用于策略,但未启用访问时间跟踪,则 LastAccessTime 不会使用。 改为使用开启生命周期策略的日期。 事实上,对于 Blob 的 LastAccessTime 属性为 null 值的任何情况,会使用启用生命周期策略的日期。 如果自启用跟踪后未访问 Blob,则即使启用了访问时间跟踪,则也可能发生这种情况。

注释

为了尽量减少对读取访问延迟的影响,只有最近 24 小时的第一次读取会更新最后访问时间。 同一个 24 小时期间内的后续读取不会更新上次访问时间。 如果 Blob 在两次读取之间被修改,则上次访问时间是两个值中的较新值。

若要了解如何启用访问时间跟踪,请参阅 “可选”启用访问时间跟踪

后续步骤