0

我正在编写这个 S3 存储桶生命周期规则:

 lifecycle_rules = [
    {
      id      = "log"
      enabled = true
      prefix  = "log/"

      tags = {
        "rule"      = "log"
        "autoclean" = "true"
      }
      expiration = {
        days = 365
      }
    }
  ]

下面提供了存储桶的 ASCII 模拟图: 日志每天在此存储桶中动态写入。一些在文件夹logs/中,一些在子文件夹中,一些在failed_logs/存储桶的根文件夹中。

BUCKET/
|
  nonlogfile.exe
  log_file_that_i_DONT_wanna_delete.log
  logs/ 
      |
       file1     (Created 2021-01-01)
       file2     (Created 2021-01-02)
       failed_logs/
                  |
                   file3 (Created 2021-01-03) 
                   file4 (Created 2021-01-04)

log/我的目标是使文件夹中的每个文件(及其子文件夹failed_logs在 365 天后过期。

`file1` would expire at 2022-01-01
`file2` would expire at 2022-01-02
`file3` would expire at 2022-01-03
`file4` would expire at 2022-01-04

然而

nonlogfile.exe
log_file_that_i_DONT_wanna_delete.log

永远不会过期。

Terraform 的aws_s3_bucket 文档指出:

lifecycle_rule对象支持以下内容:

prefix- (可选)标识规则应用的一个或多个对象的对象键前缀。

tags- (可选)指定对象标签键和值。

  • 没看懂prefix属性
  • 我的文件没有标记

我如何根据它们在存储桶上的位置来定位它们,如上所述?

4

1 回答 1

1

S3 结构解释

前缀属性只是您的 s3 对象的路径减去存储桶名称。如果您有以下 S3“目录” s3://ec-integration-files/logs/,则前缀值将只是logs/.

该属性被命名为前缀而不是路径,因为虽然 s3 在技术上看起来像一个目录树结构,但它是平面存储。但是,管理控制台将对象显示为好像它们存储在目录结构中一样,并且它使用前缀来执行此操作。

还有一点要澄清,您可以在根(或任何深度)有两个对象,命名为logsand logs/。其中一个将在管理控制台中显示为目录,另一个显示为文件对象,但它们实际上只是两个名称不同的对象

于 2021-11-17T23:17:17.183 回答