【问题标题】:Empty AWS S3 bucket with lifecyle具有生命周期的空 AWS S3 存储桶
【发布时间】:2020-04-12 03:22:12
【问题描述】:

我正在创建一个将上传许多文件的 AWS S3 存储桶。

由于我不希望这些文件永远存在,我想每个月清空存储桶。

我正在使用 Terraform 来执行此操作。

我有以下文档https://www.terraform.io/docs/providers/aws/r/s3_bucket.html

以及以下 Terraform 配置:

resource "aws_s3_bucket" "garbage" {
  bucket = "garbage-${terraform.workspace}"
  acl    = "private"

  lifecycle {
    prevent_destroy = false
  }

  lifecycle {
    prevent_destroy = false
  }

  lifecycle_rule {
    id = tmp
    prefix= "tmp/"
    enabled = true

    expiration {
      days = 1
    }
  }

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
}

即使有文档,我也很难找到如何表明我希望每个月都删除此存储桶中的文件。

【问题讨论】:

  • 您没有包含expiration 政策。另外,我不知道您可以使用生命周期策略清空存储桶。您通常会将对象配置为在创建后 30 天过期。您可能会设置一个日期,例如2019 年 12 月 31 日,但您必须在每个新月初更新该政策。
  • 您可以指定对象在被删除或转换(例如到 Glacier)之前的生存时间。这不是在设定日期类型的事情上清空存储桶,但它实现了同样的事情 - 不会将每个对象保留超过 x 天。 @RobertReynolds 您是否尝试过使用 lifecycle_rule 参数?如果你这样做了,你会得到什么错误?如果您没有收到错误消息,您看到的行为与您的预期有何不同?
  • 我不知道在 lifecyle_rule 中放入什么来实现您所说的:“在设定日期类型的事情上,但它实现了同样的事情 - 不将每个对象保留超过 x 天。”
  • @ydaestcoR 我已经编辑了我的帖子以添加 lifecylce_rule,我不确定它会做什么并且很难测试,据我了解它会删除 tmp 文件夹中的文件权利?
  • 根据您添加的规则,前缀为 tmp/ 的对象将在 1 天后过期并排队等待删除。请注意,AWS 会定期评估生命周期规则(afaik 每天一次)并将过期对象排队等待删除。移除将在此之后的一段时间内进行。从到期之日起,您无需支付存储费用。

标签: amazon-web-services amazon-s3 terraform


【解决方案1】:

您没有包含过期政策。

您通常会将对象配置为在创建 N 天后过期。您无法创建实施“在月底清空此存储桶”的生命周期策略。您可能会设置一个日期,例如2019 年 12 月 31 日,所有对象都将到期,但您必须更新该政策以反映随后的到期日期。

这是一个例子:

lifecycle_rule {
    id = "trash"
    prefix= "trash/"
    enabled = true

    expiration {
        days = 30
    }
}

这表示前缀为 trash/ 的对象将在 30 天后过期并排队等待删除。请注意,AWS 会定期评估生命周期规则(afaik 每天一次)并将过期对象排队等待删除。移除将在此之后的一段时间内进行。从对象过期之日起,您无需支付存储费用。

请注意,除了移除之外,还有其他可用的转换,例如将对象移动到更便宜的存储层,例如 Glacier。

【讨论】:

  • 假设我不会放任何前缀,桶中的所有对象都会被标记为过期吗?
  • 没有前缀意味着所有对象,是的。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多