Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Terraform backend.tf通过模块_Amazon Web Services_Terraform_Devops_Infrastructure As Code - Fatal编程技术网

Amazon web services Terraform backend.tf通过模块

Amazon web services Terraform backend.tf通过模块,amazon-web-services,terraform,devops,infrastructure-as-code,Amazon Web Services,Terraform,Devops,Infrastructure As Code,我在另一个目录中有模块。因此,我想添加backend.tf并从linux环境变量设置提供者数据 但是地形给人错误 我的结构如下所示 main.tf └── vpc ├── backend.tf ├── export.sh ├── vars.tf └── vpc.tf ## main.tf module "my_vpc" { source = "../../vpc" instance_tenancy = "default" } ## backend.tf terraf

我在另一个目录中有模块。因此,我想添加backend.tf并从linux环境变量设置提供者数据

但是地形给人错误

我的结构如下所示

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}"
 }
我已经从终端导出了变量Organization、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。(动态和默认变量)


请帮忙

地形脚本中的变量值可以通过两种不同的方式提供

  • 通过
    .tfvars
    文件=>
  • 通过命令行
  • 通过环境变量=>
由于您试图通过环境变量提供它们,因此应该遵循所需的命名模式

$ TF_VAR_terraform_bucket=bucket_name
$ TF_VAR_organisation=org_name
然后,当您执行
terraform plan
terraform apply
terraform时,terraform将加载变量

如果没有将
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.tf
vpc.tf
是否在
vpc
文件夹中

module "my_vpc" {
   source = "../../vpc"
   instance_tenancy = "default"
   bucket = "${var.TERRAFORM_BUCKET}-vpc"
   profile = "${var.ORGANISATION}"
   key    = "${var.ORGANISATION}"
}

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

  • 通过
    .tfvars
    文件=>
  • 通过命令行
  • 通过环境变量=>
由于您试图通过环境变量提供它们,因此应该遵循所需的命名模式

$ TF_VAR_terraform_bucket=bucket_name
$ TF_VAR_organisation=org_name
然后,当您执行
terraform plan
terraform apply
terraform时,terraform将加载变量

如果没有将
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.tf
vpc.tf
是否在
vpc
文件夹中

module "my_vpc" {
   source = "../../vpc"
   instance_tenancy = "default"
   bucket = "${var.TERRAFORM_BUCKET}-vpc"
   profile = "${var.ORGANISATION}"
   key    = "${var.ORGANISATION}"
}
这就是后端配置中变量的含义

只能指定一个后端,而配置可能无法指定 包含插值。Terraform将验证这一点

这可能会有所帮助-

这是后端配置中关于变量的说法

只能指定一个后端,而配置可能无法指定 包含插值。Terraform将验证这一点

这可能有助于-

将变量定义为“导出TF\u VAR\u aws\u region=us-east-1”,以便正确识别。将变量定义为“导出TF\u VAR\u aws\u region=us-east-1”,以便正确识别。