Terraform 地图资源导入

J. *_*ary 3 dictionary amazon-s3 amazon-web-services terraform terraform-provider-aws

我有一个映射变量来标识现有的 s3 存储桶:

resource "aws_s3_bucket" "bucket" {
  for_each = var.s3_replication
  bucket   = each.value.source
  #other configuration
}

variable "s3_replication" {
  description = "Map of buckets to replicate"
  type        = map
  default = {
    logs = {
      source = "logs_bucket",
      destination = "central_logs_bucket"
    },
    security = {
      source = "cloudtrail_bucket",
      destination = "central_security_bucket"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

由于这些存储桶已经存在,我正在尝试导入它们,然后将配置应用于它们以更新资源。不幸的是,我无法弄清楚如何对这些进行地形导入。我试过了:

terraform import aws_s3_bucket.bucket["logs"] logs_bucket
terraform import aws_s3_bucket.bucket[logs] logs_bucket
terraform import aws_s3_bucket.bucket[0] logs_bucket
terraform import aws_s3_bucket.bucket[0].source logs_bucket
terraform import aws_s3_bucket.bucket[0[source]] logs_bucket
Run Code Online (Sandbox Code Playgroud)

全部失败并出现不同的错误。关于如何导入地图上列出的现有资源有什么想法吗?

Mat*_*ard 9

terraform import子命令依赖于属于第一类表达式的资源命名空间内的映射键中的字符串,这会导致 shell 解释器出现问题,其中资源不是第一类表达式,因为它们不是 Terraform DSL。您可以通过将整个资源名称转换为文字字符串来解决此问题:

terraform import 'aws_s3_bucket.bucket["logs"]' logs_bucket
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题。