在 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
}
我想在现有 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
}