首页 > 解决方案 > 在 terraform 后端“s3”中使用变量

问题描述

我在 terraform 中写了以下后端配置:

terraform { 
  backend "s3" {
      bucket     = "${var.application_name}"
      region     = "${var.AWS_REGION}"
      key        = "tf-scripts/${var.application_name}-tfstate"
     }
 }

在运行 terraform init 时,我收到以下错误消息:

    terraform init
Initializing the backend...
╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 4, in terraform:
│    4:       bucket     = "${var.application_name}"
│ 
│ Variables may not be used here.
╵

╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 5, in terraform:
│    5:       region     = "${var.AWS_REGION}"
│ 
│ Variables may not be used here.
╵

╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 6, in terraform:
│    6:       key        = "tf-scripts/${var.application_name}-tfstate"
│ 
│ Variables may not be used here.

任何人都可以帮助我实现同样的目标吗?

标签: terraformterraform-provider-aws

解决方案


如果你想传递变量,你可以这样做:

echo "yes" | terraform init -backend-config="${backend_env}" -backend-config="key=global/state/${backend_config}/terraform.tfstate" -backend-config="region=us-east-1" -backend-config="encrypt=true" -backend-config="kms_key_id=${kmykeyid}" -backend-config="dynamodb_table=iha-test-platform-db-${backend_config}"

现在这里的技巧是,当你初始化时,它必须在命令行级别完成。正如其他社区成员已经提到的那样,Terraform 无法做到这一点,它就是这样。也就是说,您可以修改用于初始化的命令并将其作为环境变量传递给您的主机,或从其他来源引入变量。

在此示例中,我通过 AWS Codebuild 使用容器声明了变量,但您可以使用任何方法,只要在初始化之前定义变量即可。如果您需要这方面的帮助,请告诉我,文档不是很清楚,StackOverflow 上的人在解决这个问题方面表现出色,但对于初学者来说,很难理解这一切是如何结合在一起的。


推荐阅读