使用S3 Lifecycle policy将标准层存储转换为INT智能分层以降低存储成本

一、背景

在过往的博客中,有几篇是S3成本优化相关,可参考如下:

在开启了S3 Storage Lens的Dashboard后,可以看到所有存储桶的使用的存储类型。如果看到有大量的Standard分类,且平均大小是在1MB或者以上,那么就很适合开启INT智能分层来优化存储成本。

注意:S3 INT智能分层对于小于128KB的对象无效。即使开启了INT智能分层,小于128KB的文件将使用保存在S3 Standard标准层、且计费也是按照标准层。因此对象平均大小是决定是否使用S3智能分层的关键。

基于以上几篇的信息,本文介绍来介绍S3服务的生命周期转换功能。

二、如何选择S3 INT智能分层的适用范围

1、常见S3存储层分类、及英文缩写介绍

S3存储类的调用方式有两种,一种是同步调用,适合正常业务使用;一种是异步调用,仅用于取回归档数据。从应用无感的体验来讲,必须使用同步调用。此外,S3官方承诺使用立刻可取归档(GAIA)分层是无损性能的,因此这是正常使用INT智能分层存储降低归档费用的最佳选择。对于两种异步调用的类型,由于异步取回的时间在数分钟到数小时,因此如果您的应用不是专门为异步取回数据而设计,不建议使用。

由于本文出现大量英文缩写,因此这里汇总如下:

调用方式英文全称中文功能简写计费账单中容量计费账单中请求次数/数据取回
同步S3 Standard标准层STDTimedStorage-SIA-ByteHrsRequests
同步Intelligent-Tiering智能分层INTTimedStorage-INT-FA-ByteHrs
TimedStorage-INT-IA-ByteHrs
TimedStorage-INT-AIA-ByteHrs
Requests-INT 
Monitoring-Automation-INT
同步S3 Standard-Infrequent Access不频繁访问IA或SIATimedStorage-SIA-ByteHrsRequests-SIA
Retrieval-SIA 
TimedStorage-SIA-SmObjects 
EarlyDelete-SIA 
EarlyDelete-SIA-SmObjects
同步S3 Glacier Instant Retrieval立刻可取归档AIA或GIRTimedStorage-GIR-ByteHrsRequests-GIR 
Retrieval-GIR
异步S3 Glacier Flexible Retrieval灵活归档S3 GlacierTimedStorage-GlacierByteHrsRequests-GLACIER
CopyObject
RestoreObject
异步S3 Glacier Deep Archive深度归档Deep ArchiveRequests-GDA

注:计费账单中的缩写APS是表示亚太区的新加坡ap-southeast-1,缩写APS1。同理,如果是中国北京cn-north-1,缩写就是CNN1。

2、确认是否开启了文件版本管理的影响

S3服务提供了文件版本管理功能,这允许您不改变对象目标的文件名,而保留多个历史版本。在上传时候看起来文件名相同是覆盖了,其实是有历史版本。历史版本还可以用于反删除。被错误删除的对象,如果是在一个打开了历史版本的存储桶,那么是可以反删除。当然如果历史版本都被删除了,那么这个删除的文件就彻底无法找回了。

是否打开历史版本功能,对于配置S3存储桶的费用会有显著影响,当您的文件被删除时候(不是彻底删除,只是删除),开启版本管理后,文件会被加上Delete Marker删除标识符,然后之前的文件会保留成为历史版本。删除标识符的体积是0,不会占用空间,但是历史版本将会继续占用空间。直到所有历史版本被彻底删除,空间占用才会降低。因此,如果没有特别的业务需要,可以关闭版本管理功能,来节省费用。

对生命周期策略的步骤会有所区别。有历史版本的时候,历史版本和当前版本可以分别在不同的存储层,这样也让手工进行S3存储分层管理相对复杂化。不过S3智能分层会自动移动文件,因此使用智能分层的时候,如果存储桶开启了版本管理,那么主要的配置差异就是生命周期策略的配置时候选项稍有区别。

三、没有使用文件历史版本时候的生命周期设置

1、确认本存储桶没有开启历史版本

首先确认本存储桶没有开启历史版本管理。

然后确认桶内的文件体积大于128KB,因为小于128KB的文件,智能分层功能不生效。如下截图。

由此准备好了测试数据。

2、确认S3智能分层不包含异步取回的类型

进入存储桶,进入第二个标签Properties,然后向下滚动屏幕。如下截图。

在页面下方找到Intelligent-Tiering Archive configurations,确认这一部分里边没有规则,是空白的。这是因为本文开篇部分介绍过,默认的智能分层只会使用可同步取回数据的存储级别,不会包含异步取回的类型。因此这里确认其为空是为了避免影响调用。如下截图。

3、创建生命周期规则

进入S3存储桶Management的标签页,查看下方Lifecycle rules的位置,点击Create lifecycle rule。如下截图。

在创建生命周期规则的部分,先输入名称convert-to-int,在Choose a rule scope位置,选择Apply to all objects in the bucket,这将对所有本存储桶内的所有文件生效。在下方黄色的提示信息确认部分,选中I acknowledge that this rule will apply to all objects in the bucket.确认操作。然后向下滚动屏幕。如下截图。

将页面向下滚动后,找到规则部分,选中第一项Move current versions of objects between storage classes表示移动当前版本。其他选项不选中,因为其他选项是针对开启了版本管理后的存储卷。然后从下拉框中选择类型是Intelligent-Tiering智能分层,Days after object creation天数这里输入0,表示上传后当天就转换。如下截图。

在页面最下方的部分是Review,可确认配置后,点击右下角的Create rule按钮完成创建。如下截图。

创建成功。如下截图。

4、等待48小时生效后检查效果

规则创建后,如果输入的天数是0,那么规则创建后的24-48小时,即可看到转换生效。

四、使用了使用文件历史版本时候的生命周期设置

1、准备存储桶

创建存储桶时候,打开版本管理功能,并且确认文件体积大于128KB是智能分层生效的范围。如下截图。

此外,如果应用调用都是实时访问,那么不要在智能分层里边打开异步类型。

2、创建生命周期规则

创建生命周期规则时候,除了和前文的步骤输入名称,选择规则使用范围是Apply to all objects in the bucket时候,还要再额外选中几个选项:

  • Move current versions of objects between storage classes,表示当前版本接受生命周期规则的管理,当前版本可被移动到智能分层等级别
  • Move noncurrent versions of objects between storage classes,表示所有历史版本接受生命周期规则的管理,历史版本可被移动到智能分层等级别
  • Delete expired object delete markers or incomplete multipart uploads,表示删除过期的delete markers,并删除不完整的分片上传的文件

选中后,继续向下滚动屏幕。如下截图。

在规则配置位置,分别配置当前版本和历史版本的生命周期规则。Transition current versions of objects between storage classes是当前版本,选择转换为Intelligent-Tiering智能分层,Days after object creation创建后的日期输入0天。在Transition noncurrent versions of objects between storage classes非当前版本也就是历史版本的规则处,选择转换为Intelligent-Tiering智能分层,Days after objects become noncurrent位置输入0,表示一旦成为历史版本,当天就转换到智能分层。最后一个选项Number of newer versions to retain - Optional保留多少个版本位置,这里留空不要输入,零也不要输入,表示一个版本都不保留,全体都按照生命周期规则来转换。如下截图。

将页面向下滚动。在Expired object delete markers位置留空不要选中。在Incomplete multipart uploads位置选中,并输入7,表示分片上传的上传未完成(例如上传失败),则7天后删除。如下截图。

最后将屏幕移动到最下方,点击右下角的创建按钮。

创建完成。如下截图。

4、等待48小时生效后检查效果

规则创建后的24-48小时,即可看到转换生效。

五、参考文档

S3 生命周期配置的示例

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/lifecycle-configuration-examples.html

“为什么即使我在超过一天前应用了 Amazon S3 存储桶的生命周期规则,它仍然不起作用?”

https://repost.aws/zh-Hans/knowledge-center/s3-lifecycle-rule-delay

如何使用生命周期配置规则清空 Amazon S3 桶?

https://repost.aws/zh-Hans/knowledge-center/s3-empty-bucket-lifecycle-rule

全文完。