如何创建一个 S3 生命周期策略,将所有内容移动到智能分层,并在 window 的 X 天内维护单个先前版本

How do I create an S3 lifecycle policy that moves everything to intelligent tiering and maintains a single previous version for a window of X days

我正在尝试找出我的用例所需的确切 S3 存储桶生命周期规则。我想我做对了,但我的测试没有定论——从 AWS 的文档来看,在应用规则 should 和实际应用规则之间似乎存在不确定的滞后。他们所保证的只是计费将反映定义的规则。我还发现他们的文档和 S3 中的措辞 UI 令人困惑和模棱两可。

我想要的配置是这样的:

我通过 ruby SDK 设置策略如下:

  s3.put_bucket_lifecycle_configuration(
    bucket: 'my-awesome-bucket',
    lifecycle_configuration: {
      rules: [
        {
          id: 'my-awesome-policy',
          prefix: '',
          status: 'Enabled',
          transitions: [
            {
              storage_class: 'INTELLIGENT_TIERING',
              days: 0
            }
          ],
          noncurrent_version_transitions: [
            {
              storage_class: 'INTELLIGENT_TIERING',
              noncurrent_days: 0
            }
          ],
          noncurrent_version_expiration: {
            noncurrent_days: 90
          } 
        } 
      ] 
    }
  )

这是正确的吗?我知道那里有类似的问题,但近年来这里的选项发生了微妙的变化,我想绝对确定我做对了。

在设计 s3 生命周期策略时,请记住以下几点:

  • 从 S3 Standard 或 S3 Standard-IA 过渡到 S3 Standard-IA 或 S3 One Zone-IA
  • 的最短天数

这意味着在您可以移动任何对象之前,您必须将它们在 S3 标准存储中至少存储 30 天 class。

  • 0 天规则并不像您想象的那样尽快。

此规则意味着对象有资格在创建后 最短存储时间(参见上一点)后的午夜 UTC 进行转换。

  • S3 生命周期配置支持保留任何对象的 1 到 100 个版本。

一个versioning-enabled 存储桶每个对象有一个当前版本和零个或多个非当前版本。所以,在你的情况下,你会使用这样的东西:

<LifecycleConfiguration>
    <Rule>
        ...
        <NoncurrentVersionExpiration>     
            <NewerNoncurrentVersions>1</NewerNoncurrentVersions>
            <NoncurrentDays>90</NoncurrentDays>    
        </NoncurrentVersionExpiration>
    </Rule>
</LifecycleConfiguration>

希望这可以帮助您了解 s3 生命周期策略规则并验证您的规则,同时考虑约束。