wil*_*des 3 amazon-s3 terraform terraform-provider-aws terraform0.12+
我需要 terraform s3 后端将一个存储桶用于我的生产 AWS 帐户,将另一个存储桶用于我的开发 AWS 帐户。我们需要这个,因为我们无法允许开发 AWS 账户中的用户访问生产 AWS 账户中的 s3 存储桶。S3存储桶名称必须是全局唯一的,因此存储桶名称字段不能相同。
我尝试在这里使用变量,但 terraform 后端中出现变量错误。这是一个非常需要的功能,并且有一个 GitHub 问题,但它已经开放了 4 年,似乎没有任何计划添加此功能,所以我需要一个解决方法。一项建议来自同一 GitHub 问题。该建议是使用terraform 远程状态数据源。不幸的是,这似乎不起作用。这是我尝试过的:
// backend.tf
terraform {
backend "s3" {}
}
data terraform_remote_state "state" {
backend = "s3"
config {
bucket = var.aws_account == "123456789000" ? "my-prod-bucket" : "my-dev-bucket"
key = "apps/main-stack.tfstate"
region = "us-east-1"
}
}
Run Code Online (Sandbox Code Playgroud)
没有使用任何值,并且它会提示手动输入所有值。
$ terraform init
Initializing modules...
Initializing the backend...
bucket
The name of the S3 bucket
Enter a value:
Run Code Online (Sandbox Code Playgroud)
我四处寻找其他解决方案,但到目前为止,还没有运气。有谁知道如何解决这一问题?
似乎解决方案是使用后端配置文件。这称为部分配置。您可以为需要单独后端的每个 aws 帐户保留一个 tfvars 文件,并在初始化 terraform 时提供它,如下所示:
// prod-backend-config.tfvars
bucket = "my-prod-s3-bucket-for-terraform"
Run Code Online (Sandbox Code Playgroud)
// dev-backend-config.tfvars
bucket = "my-dev-s3-bucket-for-terraform"
Run Code Online (Sandbox Code Playgroud)
// backend.tf
terraform {
backend "s3" {
// do not set a bucket name here
key = "apps/main-stack.tfstate"
region = "us-east-1"
}
}
Run Code Online (Sandbox Code Playgroud)
$ terraform init -backend-config prod-backend-config.tfvars
Run Code Online (Sandbox Code Playgroud)
这使您可以保持后端的 aws 账户和 s3 存储桶之间的奇偶性。
有关使用任意变量配置任何后端的更通用解决方案,请参阅如何传递 Terraform S3 后端资源的变量?
| 归档时间: |
|
| 查看次数: |
4345 次 |
| 最近记录: |