在 Terraform(而不是 S3)中重命名 s3 存储桶会导致创建然后销毁?

sdg*_*sdh 1 amazon-s3 amazon-web-services terraform

我想稍微重构我的 Terraform 脚本。

前:

resource "aws_s3_bucket" "abc" {
  bucket = "my-bucket"
  acl    = "private"
  region = "${var.aws_region}"

  tags = {
    Name = "My bucket"
  }

  versioning {
    enabled = true
    mfa_delete = false
  }
}
Run Code Online (Sandbox Code Playgroud)

后:

resource "aws_s3_bucket" "def" {
  bucket = "my-bucket"
  acl    = "private"
  region = "${var.aws_region}"

  tags = {
    Name = "My bucket"
  }

  versioning {
    enabled = true
    mfa_delete = false
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,只有Terraform 中的名称发生了变化 ( abc-> def)。

但是,这会导致在terraform plan.

我希望 Terraform 将存储桶识别为相同的(它们具有相同的属性,包括bucket)。

问题:

  • 为什么是这样?
  • 有没有办法在不破坏基础设施的情况下重构 Terraform 脚本?

Ste*_*ing 6

You can use terraform state mv, to reflect this change in the state.

In you case, this would be

terraform state mv aws_s3_bucket.abc aws_s3_bucket.def
Run Code Online (Sandbox Code Playgroud)

From my own experience, this works well and I recommend doing it instead of working with bad names.

Terraform does not recognize such changes, no :-)