terraform - 在 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.
任何人都可以帮助我实现同样的目标吗?
解决方案
如果你想传递变量,你可以这样做:
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 上的人在解决这个问题方面表现出色,但对于初学者来说,很难理解这一切是如何结合在一起的。
推荐阅读
- matlab - 如何在 Octave 中替换 MATLAB 函数 table 和 table2array?
- c# - 错误语句double.TryParse out 参数可能未初始化?
- android - 如何使用我的 webview 应用打开 Facebook 链接?
- python - 创建一个随机数列表并过滤列表以仅包含大于 50 的数字
- kotlin - 使用没有 setter 的委托创建 var
- spring-boot - IntelliJ 社区版在应用程序启动时无法识别属性文件
- sql-server - 我无法使用 Entity Framework Core 更新数据库
- jquery - 窗口离开时的jQuery模糊()事件
- c# - 在 ASP.NET MVC 中验证具有恶意数据注入的图像内容的图像二进制数据
- composer-php - 作曲家配置:将“额外”值添加为数组