Terraform 在不需要本地tf文件的情况下调用模块?

Terraform 在不需要本地tf文件的情况下调用模块?,terraform,Terraform,我有这个tf文件: variable "var1" {} variable "var2" {} terraform { backend "s3" { } } module "my-module" { arg1 = "${var.eb_application_name}" arg2 = "${var.eb_environment_name}" source = "git::ssh://git@bitbucket.org/blah/my-module.git//my-sub-

我有这个tf文件:

variable "var1" {}
variable "var2" {}

terraform {
  backend "s3" {
  }
}

module "my-module" {
  arg1 = "${var.eb_application_name}"
  arg2 = "${var.eb_environment_name}"
  source = "git::ssh://git@bitbucket.org/blah/my-module.git//my-sub-module
}

output "myoutput" {
  value = "${module.my-module.myoutput}"
}
我从控制台运行以下命令:

terraform init -backend-config='region=us-east-1' -backend-config='key=mykey' -backend-config='bucket=mys3-bucket' 
terraform apply -var 'var1=balh' -var 'var2=blah'

我想通过一个控制台命令来完成所有这些,包括调用我的模块。看看我的tf文件,我能用terraform的参数来完成所有这些吗?还是我必须有一个tf文件?也许有一种方法可以像环境变量一样将tf文件作为原始文本传入?

最终我得到了您需要的内容

您可以为每个模块定义变量,例如:

variable "my-module-enable" {
  default = true
}
然后使用计数作为开关启用或禁用此模块

module "my-module" {
  count = "${var.my-module-enable ? 1 : 0 }"
  arg1 = "${var.eb_application_name}"
  arg2 = "${var.eb_environment_name}"
  source = "git::ssh://git@bitbucket.org/blah/my-module.git//us-east-1"
}
然后您可以通过terraform args轻松控制它

terraform apply -var 'my-module-enable=false'

嗯,但是我还有一个文件——tfvars文件。我想知道是否有可能完全避免使用本地文件并将所有内容作为args directlyWith-var file传递给terraform命令,您仍然可以使用-var'var1=balh'-var'var2=blah'添加其他变量args,但是-var file仍然需要指向文件,对吗?也许我误解了什么,但我希望我的模块在源代码控制中,并且能够通过向terraform程序传递命令行参数来调用它,而不需要任何本地文件。我希望能够完全从命令行参数执行模块{..}too@red888我更新了答案,让我知道这是否是你想要的。嗯,不是真的,也许我没有把问题说对,或者我对这个问题很迟钝。我只是不想有一个本地文件调用我的模块,我想通过命令行传递所有东西来调用源代码管理中的模块-没有本地文件。也许我可以将tf文件文本直接传输到terraform命令?