Amazon web services Terraform backend.tf通过模块
我在另一个目录中有模块。因此,我想添加backend.tf并从linux环境变量设置提供者数据 但是地形给人错误 我的结构如下所示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
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”,以便正确识别。