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

1 分钟阅读
0

我在 Amazon Simple Storage Service(Amazon S3)桶上设置了生命周期配置规则,以便将对象转换成另一种存储类或使对象过期。但是,这些对象并未根据此规则进行更改。

解决方法

在满足生命周期规则与完成此规则的操作时间之间存在延迟时,就会发生这种情况。当生命周期规则得到满足时,即使操作未完成,也会发生账单变更。

示例:

  • 如果您有针对对象过期的生命周期规则,则在过期时间之后不会向您收取存储费用。即使该对象没有立即过期,也会收取费用。
  • 在对象转换时间过后,将对象转换为 GLACIER 存储类的生命周期规则会收取 Amazon S3 Glacier 存储费率。即使对象没有立即转换为 GLACIER 存储类,也会收取费用。
    **注意:**如果您将生命周期设置为转换为 INTELLIGENT_TIERING 存储类,则在对象转换为 INTELLIGENT_TIERING 存储类之前,账单不会发生变化。这是例外情况。

S3 生命周期每天仅运行一次。此外,Amazon S3 会将对象的转换日期或过期日期四舍五入到次日午夜(世界标准时间)。例如,您在 2020 年 1 月 1 日 10:30(世界标准时间)创建了一个对象,其生命周期规则是在 3 天后转换此对象。对于此对象,转换日期为 2020 年 1 月 5 日 00:00(世界标准时间)。在检查是否满足生命周期规则之前,请务必确定已经过了足够的时间。

如果已经过了足够的时间并且未满足您的生命周期规则,请检查您是否在生命周期规则中为对象正确设置了前缀筛选器。

重要事项:

  • 如果您未在生命周期规则中指定前缀筛选器,则该规则将应用于桶中的所有对象。
  • 如果您将前缀筛选器指定为 images/,则生命周期规则将应用于前缀为 images/ 的所有对象。
    **注意:**请务必在前缀筛选器的末尾指定 / 字符。如果您在前缀筛选器的开头指定 / 字符,则无法正确评估生命周期规则。

您可以使用 HeadObject API 或 Amazon S3 控制台来查看当前版本的对象预计何时会过期。

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

运行以下 AWS CLI 命令以了解对象何时过期:

$ aws s3api head-object --bucket bucketname --key file.txt

输出类似于以下内容:

 {  
 "AcceptRanges": "bytes",  
 "Expiration": "expiry-date=\"Wed, 15 Mar 2023 00:00:00 GMT\", rule-id=\"MyExpirationRule\"",  
 "LastModified": "2023-02-22T17:20:34+00:00",  
 "ContentLength": 6,  
 "ETag": "\"edae42exa0d2b93b123346740107dacf\"",  
 "VersionId": "SoshCRUrlabc1v4ZzYEA123PvWcaeF6F",  
 "ContentType": "text/plain",  
 "ServerSideEncryption": “AES256”,  
 "Metadata": {}  
}

Expiration 响应标头提供 expiry-daterule-id 字段。expiry-date 字段表示 Amazon S3 将对象排队等待删除和异步删除对象的日期。rule-id 字段表示应用于该对象的生命周期规则。

要使用 Amazon S3 控制台查看对象的过期日期,请完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 列表中,选择您的桶的名称。
  3. 选择要查看的对象的名称。
  4. 选择属性选项卡。
  5. 对象管理概述部分的管理配置下,查看过期规则过期日期字段。

过期日期字段表示 Amazon S3 将对象排队等待删除和异步删除对象的日期。过期规则字段表示应用于该对象的生命周期规则。

**注意:**只有当前版本的对象可针对 HEAD 或 GET 请求返回 Expiration 响应标头。以前的版本和删除标记不会返回此响应标头。此外,您针对符合转换条件的对象不会获得响应标头。

您可以使用 S3 Storage Lens 控制面板监控当前使用的生命周期规则的进度以及生命周期规则所做的更新。

相关信息

在桶上设置生命周期配置

AWS 官方
AWS 官方已更新 1 年前