0

我在另一个目录中有模块。所以我想添加 backend.tf 并从 linux environment variable 设置提供程序数据。

但是 terraform 给出错误。

我的结构如下所示。

main.tf
└── vpc
├── backend.tf
├── export.sh
├── vars.tf
└── vpc.tf

## main.tf
module "my_vpc" {
      source = "../../vpc"
      instance_tenancy = "default"

}

## backend.tf
terraform {
backend "s3" {
        region = "${var.aws_region}"
        bucket = "${var.TERRAFORM_BUCKET}-vpc"
        profile = "${var.ORGANISATION}"
        key    = "${var.ORGANISATION}"

    }
 }

 provider aws {

    profile = "${var.ORGANISATION}"
    region = "${var.aws_region}"
 }

我已经从终端导出了变量 ORGANISATION、REGION 和 TERRAFORM_BUCKET 变量,但它给出了这个错误:

   Error: module "my_vpc": missing required argument "aws_region"

   Error: module "my_vpc": missing required argument "TERRAFORM_BUCKET"

   Error: module "my_vpc": missing required argument "ORGANISATION"

我该如何解决这个问题?

注意:通过环境变量从模块调用 backend.tf。(动态和默认变量)

请帮忙 !

4

2 回答 2

2

Terraform 脚本中的变量值可以通过几种不同的方式提供。

输入变量配置

由于您尝试通过环境变量提供它们,因此您应该遵循所需的命名模式。

$ TF_VAR_terraform_bucket=bucket_name
$ TF_VAR_organisation=org_name

然后当你执行terraform planterraform applyterraform 将加载变量。

如果您没有将aws_region变量定义为环境变量,那么您需要将其放入.tfvars文件中并使用terraform plan -var-file config.tfvars或通过命令行使用terraform plan -var us-east-1.

这一切都假设在您的 vars.tf 文件中定义了变量。

variable "organisation" {
   type = "string"
}
variable "terraform_bucket" {
   type = "string"
}
variable "aws_region" {
   type = "string"
}

*** 编辑 1

仔细考虑您的问题,如果模块内部需要变量,那么您将需要更新对模块的调用以在使用它时包含这些变量。

我无法通过结构的格式判断backend.tf,vars.tfvpc.tf是否在vpc文件夹内。

module "my_vpc" {
   source = "../../vpc"
   instance_tenancy = "default"
   bucket = "${var.TERRAFORM_BUCKET}-vpc"
   profile = "${var.ORGANISATION}"
   key    = "${var.ORGANISATION}"
}
于 2019-01-15T15:37:15.490 回答
0

这就是文档中关于后端配置中的变量的说法。

只能指定一个后端,并且配置可能不包含插值。Terraform 将验证这一点

这可能会有所帮助 - #17288

于 2019-01-15T20:42:38.370 回答