如何在 terraform 中为 s3 后端声明变量?

use*_*171 4 variables runtime amazon-s3 terraform

s3.tf

terraform {
backend "s3" {
bucket = "some-bucket"
key = "path/to/key"
region = "some-aws-region" 
}}
Run Code Online (Sandbox Code Playgroud)

如何将存储桶和区域值从 variables.tf 文件传递​​给这个?

Get*_*toX 17

Montassar的答案很好,但我更喜欢文件版本:

  1. 创建dev.conf文件
    bucket="some-bucket"
    region="some-aws-region"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除 中的那些属性main.tf
    terraform {
     backend "s3" {
      key = "path/to/key"
    }}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行初始化:
    bucket="some-bucket"
    region="some-aws-region"
    
    Run Code Online (Sandbox Code Playgroud)

地球源

  • 我也更喜欢这个解决方案。但我使用您链接的文档的推荐命名模式将我的文件命名为“dev.tfbackend”。 (5认同)

Mon*_*ina 16

你好,这是一个解决方案:

terraform {
  backend "s3" {
  }
}
Run Code Online (Sandbox Code Playgroud)

像这样传递后端,然后:

在 terraform init 命令上:

terraform init \
-backend-config="bucket=${TFSTATE_BUCKET}" \
-backend-config="key=${TFSTATE_KEY}" \
-backend-config="region=${TFSTATE_REGION}" 
Run Code Online (Sandbox Code Playgroud)

你应该使用 env 来设置 TFSTATE_BUCKET TFSTATE_KEY and TFSTATE_REGION

这是文档的链接:关于后端“部分配置”的 Terraform 文档

  • 我不敢相信这是一个限制...如果你想维护多个阶段,这是一个非常愚蠢的限制。这基本上意味着我必须为每个 terraform 命令创建一个单独的批处理脚本,或者我必须复制 terraform 脚本。谁认为这是个好主意..? (4认同)
  • 好答案!我认为如果它包含[有关后端“部分配置”的 Terraform 文档](https://www.terraform.io/docs/backends/config.html#partial-configuration) 的链接,那就更好了 (2认同)

use*_*522 2

我相信这目前是不可能的,因为如果您在其中添加变量插值,您会收到错误

terraform.backend:配置不能包含插值