Terraform 参考为远程后端创建了 S3 存储桶
Posted
技术标签:
【中文标题】Terraform 参考为远程后端创建了 S3 存储桶【英文标题】:Terraform Reference Created S3 Bucket for Remote Backend 【发布时间】: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
【问题讨论】:
【参考方案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 的新手,我想知道我是否遗漏了什么。感谢您的帮助!以上是关于Terraform 参考为远程后端创建了 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章
使用 s3 后端初始化 terraform 时出现问题 - CredentialRequiresARNError
Terraform init │ 错误:配置 S3 后端时出错:找不到 S3 后端的有效凭证源