【问题标题】:Terraform Reference Created S3 Bucket for Remote BackendTerraform 参考为远程后端创建了 S3 存储桶
【发布时间】:2021-12-30 09:32:55
【问题描述】:

我正在尝试为 S3 设置远程 Terraform 后端。我能够创建存储桶,但我使用 bucket_prefix 而不是存储桶来定义我的存储桶名称。我这样做是为了确保我的组织内的代码可重用性。

我的问题是我在 Terraform 后端配置中引用新存储桶时遇到了问题。我知道我可以硬编码我创建的存储桶的名称,但我想引用类似于 Terraform 中其他资源的存储桶。

这可能吗?

我在下面包含了我的代码:

#configure terraform to use s3 as the backend
terraform {
   backend "s3" {
      bucket         = "aws_s3_bucket.my-bucket.id"
      key            = "terraform/terraform.tfstate"
      region         = "ca-central-1"    
   }
}

AWS S3 资源定义

resource "aws_s3_bucket" "my-bucket" {
    bucket_prefix = var.bucket_prefix

    acl = var.acl

    lifecycle {
        prevent_destroy = true
    }

    versioning {
        enabled = var.versioning
    }

    server_side_encryption_configuration {
        rule {
            apply_server_side_encryption_by_default {
               sse_algorithm = var.sse_algorithm
            }
        }
    }
}

【问题讨论】:

    标签: amazon-web-services amazon-s3 terraform terraform-provider-aws


    【解决方案1】:

    在初始化步骤发生时,Terraform 需要一个有效的后端配置 (terraform init),这意味着您必须拥有一个现有的存储桶才能配置任何资源(在第一个 terraform apply 之前)。

    如果您使用不存在的存储桶名称执行terraform init,则会收到此错误:

    The referenced S3 bucket must have been previously created. If the S3 bucket
    │ was created within the last minute, please wait for a minute or two and try
    │ again.
    

    这是不言自明的。将 S3 存储桶用于后端并定义为 Terraform 资源是不可能的。虽然您当然可以使用terraform import 将现有存储桶导入state,但我不建议您导入后端存储桶。

    【讨论】:

    • 感谢 Ervin,我了解到在创建 S3 存储桶之前我无法引用后端。相反,我注释掉了后端代码块并应用了 tf 配置。这创建了存储桶,但我想知道是否可以使用“my-bucket.id”符号而不是硬编码存储桶名称来引用存储桶名称。
    • Terraform 验证不允许在那里使用变量。它将引发此错误:Variables may not be used here.
    • 知道了,我会继续使用硬编码的桶名。作为 Terraform 的新手,我想知道我是否遗漏了什么。感谢您的帮助!
    猜你喜欢
    • 2020-02-05
    • 2018-05-29
    • 2019-02-22
    • 2022-01-12
    • 2021-08-14
    • 1970-01-01
    • 2017-01-05
    • 2020-12-21
    • 2021-09-01
    相关资源
    最近更新 更多