【问题标题】:How to pass variables for Terraform S3 Backend resource?如何为 Terraform S3 后端资源传递变量?
【发布时间】:2022-01-09 13:22:38
【问题描述】:
terraform {
  backend "s3" {
    bucket = "mybucket"
    key    = "path/to/my/key"
    region = "us-east-1"
  }
}

是不是不能通过变量文件为上面的bucket和key提供值?

因为当我尝试这样做时:

terraform {
  backend "s3" {
    bucket = var.bucket
    key    = var.key
  }
}

,我收到以下错误:

Error: Variables not allowed

on main.tf line 3, in terraform:
3:      bucket = var.bucket

Variables may not be used here.

Error: Variables not allowed

on main.tf line 4, in terraform:
4:      key = key

Variables may not be used here.

【问题讨论】:

    标签: terraform


    【解决方案1】:

    创建一个名为 backend.tfvars 的文件,内容如下:

    bucket = "mybucket"
    key    = "path/to/my/key"
    

    terraform 命令的命令行选项中指定此文件名:

    terraform init -backend-config=backend.tfvars
    

    您需要使用单独的后端配置文件而不是通常的 tfvars 文件的原因是,在设置后端时会使用这些值。这意味着它们需要在您运行 terraform init 时提供,而不是稍后在您使用诸如 terraform apply 之类的命令的后端时提供。

    有关详细信息,请参阅partial configuration 上的 terraform 文档。

    【讨论】:

    • 非常感谢!我们不能通过variables.tf.tfvars 文件传递​​后端的存储桶和密钥名称吗?我问的原因是 - 我们有几十个应用程序和每个应用程序的六个环境。所以我们总共需要将近 100 个状态文件。使用 100 个环境变量 - 这是一个好习惯吗?请指教。
    • 当我在 .tfvars 中提供后端存储桶名称和密钥时,我收到了我在问题中解释的错误。我不确定我是否理解解决方案。那么除了在tfvars中给出后端bucket名称和key之外,我还应该创建一个TF_CLI_ARGS_init环境变量吗?请帮忙!
    • 我编辑了答案以展示如何从文件中读取后端配置。
    【解决方案2】:

    事实证明,我们无法传递后端存储桶的运行时值和用于存储状态文件的密钥。

    这就是Terraform Workspaces 概念的用武之地!!

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2021-09-01
      • 2022-01-13
      • 2019-11-30
      • 2022-10-13
      • 2020-12-08
      • 2022-11-17
      • 2022-01-02
      • 2020-12-20
      相关资源
      最近更新 更多