如何在Terraform中将生命周期规则应用于现有s3存储桶?

时间:2020-10-24 20:39:46

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

Terraform的新手。尝试将生命周期规则应用于声明为数据源的现有s3存储桶,但我想我无法使用数据源执行此操作-会引发错误。这是我尝试要实现的要点:

data "aws_s3_bucket" "test-bucket" {
  bucket = "bucket_name"
  lifecycle_rule {
    id = "Expiration Rule"
    enabled = true
    prefix = "reports/"
    expiration {
      days = 30
    }
  }
}

...如果这是一种资源,而不是数据源,那么它将起作用。如何将生命周期规则应用于声明为数据源的s3存储桶? Google Fu收效甚微。谢谢!

2 个答案:

答案 0 :(得分:1)

解决此问题的最佳方法是将存储桶导入到地形状态,而不是将其用作data

为此,请将其放在您的Terraform代码中:

resource "aws_s3_bucket" "test-bucket" {
  bucket = "bucket_name"
  lifecycle_rule {
    id = "Expiration Rule"
    enabled = true
    prefix = "reports/"
    expiration {
      days = 30
    }
  }
}

然后在终端上运行:

terraform import aws_s3_bucket.test-bucket bucket_name

这会将存储桶导入到您的状态,现在您可以使用terraform进行更改或向存储桶添加新内容。

最后一步只需运行terraform apply,就会添加生命周期规则。

答案 1 :(得分:0)

“数据”用于获取信息和对象本身,以便稍后在代码中使用。 您无法使用数据更改任何内容,因为它是“只读”模式。

尝试一下:

const ground = new Ground();
const mover = new Mover(ground);
ground.draw(); // "a"

ground.section.changeI();
ground.draw(); // "b"
console.log( mover.dojob() ); // "bX"

ground.section.changeI(); 
console.log( mover.dojob() ); // "cX"

如果上述操作由于某种原因不起作用,您可以随时“地形导入”现有存储桶,将其添加到tfstate并可以随意修改。