创建 S3 生命周期配置
您可以创建 S3 生命周期配置来控制何时从StorageGRID系统中删除特定对象。
本节中的简单示例说明了 S3 生命周期配置如何控制何时从特定 S3 存储桶中删除(过期)某些对象。本节中的示例仅用于说明目的。有关创建 S3 生命周期配置的完整详细信息,请参阅 "Amazon Simple Storage Service 用户指南:对象生命周期管理"。请注意, StorageGRID仅支持 Expiration 操作;它不支持 Transition 操作。
什么是生命周期配置
生命周期配置是一组应用于特定 S3 存储桶中的对象的规则。每条规则指定哪些对象会受到影响以及这些对象何时过期(在特定日期或几天后)。
StorageGRID在生命周期配置中支持最多 1,000 条生命周期规则。每个规则可以包含以下 XML 元素:
-
过期:从对象被摄取时开始,当达到指定日期或指定天数时删除对象。
-
NoncurrentVersionExpiration:从对象变为非当前版本开始,当达到指定的天数时删除该对象。
-
过滤器(前缀、标签)
-
状态
-
ID
每个对象都遵循 S3 存储桶生命周期或 ILM 策略的保留设置。配置 S3 存储桶生命周期后,生命周期到期操作将覆盖与存储桶生命周期过滤器匹配的对象的 ILM 策略。与存储桶生命周期过滤器不匹配的对象使用 ILM 策略的保留设置。如果对象与存储桶生命周期过滤器匹配,并且未明确指定到期操作,则不使用 ILM 策略的保留设置,这意味着对象版本将永远保留。看"S3 存储桶生命周期和 ILM 策略的示例优先级" 。
因此,即使 ILM 规则中的放置说明仍然适用于该对象,该对象也可能会从网格中移除。或者,即使对象的任何 ILM 放置指令已经失效,该对象仍可能保留在网格上。有关详细信息,请参阅"ILM 如何在对象的整个生命周期中运作" 。
|
存储桶生命周期配置可与启用了 S3 对象锁的存储桶一起使用,但旧版兼容存储桶不支持存储桶生命周期配置。 |
StorageGRID支持使用以下存储桶操作来管理生命周期配置:
-
DeleteBucket生命周期
-
获取BucketLifecycleConfiguration
-
PutBucket生命周期配置
创建生命周期配置
作为创建生命周期配置的第一步,您需要创建一个包含一个或多个规则的 JSON 文件。例如,此 JSON 文件包含三条规则,如下所示:
-
规则 1 仅适用于与前缀匹配的对象
category1
/ 并且有一个key2`的价值 `tag2
。这 `Expiration`参数指定与过滤器匹配的对象将于 2020 年 8 月 22 日午夜到期。 -
规则 2 仅适用于与前缀匹配的对象
category2
/。这 `Expiration`参数指定与过滤器匹配的对象将在被摄取后 100 天过期。指定天数的规则与对象被摄取的时间有关。如果当前日期超过摄取日期加上天数,则应用生命周期配置后,某些对象可能会从存储桶中删除。 -
规则 3 仅适用于与前缀匹配的对象
category3
/。这 `Expiration`参数指定匹配对象的任何非当前版本将在成为非当前版本后 50 天过期。
{ "Rules": [ { "ID": "rule1", "Filter": { "And": { "Prefix": "category1/", "Tags": [ { "Key": "key2", "Value": "tag2" } ] } }, "Expiration": { "Date": "2020-08-22T00:00:00Z" }, "Status": "Enabled" }, { "ID": "rule2", "Filter": { "Prefix": "category2/" }, "Expiration": { "Days": 100 }, "Status": "Enabled" }, { "ID": "rule3", "Filter": { "Prefix": "category3/" }, "NoncurrentVersionExpiration": { "NoncurrentDays": 50 }, "Status": "Enabled" } ] }
将生命周期配置应用于存储桶
创建生命周期配置文件后,您可以通过发出 PutBucketLifecycleConfiguration 请求将其应用到存储桶。
此请求将示例文件中的生命周期配置应用于名为 testbucket
。
aws s3api --endpoint-url <StorageGRID endpoint> put-bucket-lifecycle-configuration --bucket testbucket --lifecycle-configuration file://bktjson.json
要验证生命周期配置是否已成功应用于存储桶,请发出 GetBucketLifecycleConfiguration 请求。例如:
aws s3api --endpoint-url <StorageGRID endpoint> get-bucket-lifecycle-configuration --bucket testbucket
成功的响应列出了您刚刚应用的生命周期配置。
验证存储桶生命周期到期是否适用于对象
您可以在发出 PutObject、HeadObject 或 GetObject 请求时确定生命周期配置中的过期规则是否适用于特定对象。如果适用规则,则响应包括 `Expiration`指示对象何时过期以及匹配哪个过期规则的参数。
|
由于 bucket 生命周期覆盖 ILM, `expiry-date`显示的是对象被删除的实际日期。有关详细信息,请参阅"如何确定对象保留" 。 |
例如,此 PutObject 请求于 2020 年 6 月 22 日发出,并将一个对象放入 `testbucket`桶。
aws s3api --endpoint-url <StorageGRID endpoint> put-object --bucket testbucket --key obj2test2 --body bktjson.json
成功响应表明该对象将在 100 天后(2020 年 10 月 1 日)过期,并且符合生命周期配置的规则 2。
{ *"Expiration": "expiry-date=\"Thu, 01 Oct 2020 09:07:49 GMT\", rule-id=\"rule2\"", "ETag": "\"9762f8a803bc34f5340579d4446076f7\"" }
例如,此 HeadObject 请求用于获取 testbucket 存储桶中同一对象的元数据。
aws s3api --endpoint-url <StorageGRID endpoint> head-object --bucket testbucket --key obj2test2
成功响应包括对象的元数据,并表明该对象将在 100 天后过期,并且符合规则 2。
{ "AcceptRanges": "bytes", *"Expiration": "expiry-date=\"Thu, 01 Oct 2020 09:07:48 GMT\", rule-id=\"rule2\"", "LastModified": "2020-06-23T09:07:48+00:00", "ContentLength": 921, "ETag": "\"9762f8a803bc34f5340579d4446076f7\"" "ContentType": "binary/octet-stream", "Metadata": {} }
|
对于启用版本控制的存储桶, `x-amz-expiration`响应头仅适用于对象的当前版本。 |