在 terraform 中导入现有存储桶

import an existing bucket in terraform

我想在现有 s3_bucket 上创建一个事件通知(这不是我在当前的 terraform 代码中设置的)。

我看到了这个答案:

所以我试过了。这里,local.bucket_name 是现有存储桶的名称。

notification.tf

resource "aws_s3_bucket" "trigger_pipeline" {
  bucket = local.bucket_name
}

terraform import aws_s3_bucket.trigger_pipeline local.bucket_name

但是,我不确定如何使用这个导入语句。我在资源块之后使用它吗?我是否在同一个文件的开头使用它?

如果我按原样使用,在资源块下,我会得到这个错误:

Invalid block definition: Either a quoted string block label or an opening brace ("{") is expected here.HCL

这里的点:aws_s3_bucket.trigger_pipeline

编辑:

所以首先我定义了 s3 资源,如上面的问题所示。那我运行terraform init。接下来,我在 CLI 上 运行 terraform import aws_s3_bucket.trigger_pipeline "myoriginalbucketname"。但是,我仍然收到以下错误:

Before importing this resource, please create its configuration in the root module. For example:

resource "aws_s3_bucket" "trigger_pipeline" {
  # (resource arguments)
}

我想我弄错了事件的顺序

local.bucket_name 在您的 bash 中执行,而不是在 TF 中执行。您必须实际提供全名:

terraform import aws_s3_bucket.trigger_pipeline "my-bucket-name"

我建议你在这里使用数据块。 Data Block 允许使用在 Terraform 外部定义的信息,这有助于在现有基础设施资源(阅读更多 here)上执行 Terraform 代码,在本例中为 S3 Bucket。 与 resource 块一样,data 块支持参数以指定它们的行为方式;对于 aws_s3_bucket,它是“桶”(阅读更多 here)。

data "aws_s3_bucket" "trigger_pipeline" {
bucket = "local.bucket_name"
}
// use data.aws_s3_bucket.trigger_pipeline.<attribute_reference> in script

resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = data.aws_s3_bucket.trigger_pipeline.id
// your code block for Notification configuration
}