为什么 terraform 会忽略手动创建的 s3 存储桶?

Tom*_*ino 1 amazon-s3 terraform

我发现我的 aws 帐户中有一个不是由 terraform 创建的存储桶。

我想确保它在我的 terraform 存储库中说明,但在我添加它之前,我运行terraform plan并得到以下响应:

No changes. Infrastructure is up-to-date.

This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为当我跑步时,aws s3 ls我看到了桶:

#not real names from obvious reasons
2019-07-15 13:33:16 bucket-from-terrform
2019-07-15 13:19:26 terraform-state-bucket
2019-07-23 17:47:26 bucket-created-manually
Run Code Online (Sandbox Code Playgroud)

更重要的是,当我添加一个名称与之前忽略的存储桶匹配的资源时,terraform 会尝试添加它(即使它已经存在)

怎么了?terraform 忽略那个桶的原因可能是什么?

Nge*_*tor 5

Terraform 是声明式的,你定义你想要的资源,它会为你创建和管理它们。它只能管理它在状态内知道的资源。要允许 terraform 管理手动创建的资源,您可以它们导入状态。

对于 s3 存储桶,您将通过存储桶名称https://www.terraform.io/docs/providers/aws/r/s3_bucket.html#import导入

所以如果你的地形看起来像

resource "aws_s3_bucket" "my-bucket" {
  bucket = "bucket-created-manually"
  acl    = "private"
}
Run Code Online (Sandbox Code Playgroud)

你会使用命令

terraform import aws_s3_bucket.my-bucket bucket-created-manually
Run Code Online (Sandbox Code Playgroud)

然后下次您运行计划时,terraform 将了解它并能够对其进行管理。