使用Terraform validate时未找到必需的参数

使用Terraform validate时未找到必需的参数,terraform,terraform-template-file,Terraform,Terraform Template File,我的Terraform目录结构类似于: ├── deploy │ ├── dev.tfvars │ └── qa.tfvars ├── modules │ ├── private │ │ ├── bastion.tf │ ├── db.tf │ │ └── variables.tf │ └── public │ ├── web.tf │ └── variables.tf ├── main.tf 在bastion.

我的Terraform目录结构类似于:

├── deploy
│      ├── dev.tfvars
│      └── qa.tfvars
├── modules
│   ├── private
│   │   ├── bastion.tf
│       ├── db.tf
│   │   └── variables.tf
│   └── public
│       ├── web.tf
│       └── variables.tf
├── main.tf

bastion.tf中,我试图从variables.tf调用一个变量,如下所示:

resource "aws_eip" "bastion" {
  instance = "var.eip"
  vpc = true
}
其中,
eip=10.x.x.x
设置在say,dev.tfvars

main.tf的配置如下所示:

provider "aws" {}

terraform {
  backend "s3" {}
}

module "private" {
  source = "./modules/private"
}
在运行terraform validate时,它给了我一个错误-参数“eip”是必需的,但没有找到定义。即使我尝试向模块提供eip,如:

module "private" {
  source = "./modules/private"
  eip = var.eip
}
这给了我另一个错误:

尚未声明名为“eip”的输入变量。 可以使用变量“eip”{}块声明此变量


我已经在我的variables.tf中定义了
变量“eip”{}
,它从.tfvars文件中获取值,但不知何故它不是。有人能建议我还缺什么吗?

听起来你缺少变量声明

从您的文件结构:

├── deploy
│      ├── dev.tfvars
│      └── qa.tfvars
├── modules
│   ├── private
│   │   ├── bastion.tf
│       ├── db.tf
│   │   └── variables.tf
│   └── public
│       ├── web.tf
│       └── variables.tf
├── main.tf
对于
main.tf
每个级别都需要声明资源或子模块将使用的变量


如果您将代码上载到GitHub并发布链接,我可以帮助您解除阻止。

第一个错误是因为您没有
private
模块的
eip
参数的默认值,因此您需要提供一个。第二个错误是因为您向未声明变量的模块提供了
eip
的参数。您需要提供一个已定义的参数,或者声明
eip
变量并为其定义一个值。我在.tfvars文件中定义了eip的值。我需要什么来从.tfvars获取值,然后在variables.tf中空声明eip like-
variable eip{}
?我尝试在与main.tf相同的位置添加variabless.tf文件,并添加空变量以传递给模块,但也不起作用,并抛出错误:error:main.tf第9行缺少必需的参数,在模块“private”:模块“private”{参数“eip”是必需的,但找不到任何定义。@s_neenu我对您的变量文件做了一个更正,我可以在没有任何问题的情况下运行计划!对于
terraform validate
,同样的工作是否也可以?根据这一点,validate不占用.tfvars值[link]@s_neenu是的,它应该……但不要相信我的话,只是克隆我的回购协议并测试它