在terraform中的另一个模块中使用一个模块局部变量

时间:2016-12-08 14:42:50

标签: amazon-web-services amazon-cloudwatch terraform

我正在尝试访问另一个新模块中的一个模块变量,以获取在该模块中创建的aws实例ID,并在模块中使用它们。云监视警报会在这些实例ID中创建警报。结构类似于下面的

**Amodule #here this is used for creating kafka aws instances*

     main.tf
     kafkainstancevariables.tf

Bmodule #here这用于在那些kafka实例中创建警报

     main.tf
     cloudwatchalertsforkafkainstancesVariables.tf

外部模块terraform mainfile,从中调用所有模块         main.tf         variables.tf ***

如何访问Bmodule中Amodule中创建的变量?

谢谢!

1 个答案:

答案 0 :(得分:13)

您可以使用outputs来完成此操作。在您的kafka模块中,您可以定义一个如下所示的输出:

output "instance_ids" {
  value = ["${aws_instance.kafka.*.id}"]
}

在另一个terraform文件中,我们假设您使用类似的方式实例化模块:

module "kafka" {
  source = "./modules/kafka"
}

然后您可以按如下方式访问该输出:

instances = ["${module.kafka.instance_ids}"]

如果您的模块彼此隔离(即您的cloudwatch模块未实例化您的kafka模块),您可以将输出作为模块之间的变量传递:

module "kafka" {
  source = "./modules/kafka"
}

module "cloudwatch" {
  source = "./modules/cloudwatch"
  instances = ["${module.kafka.instance_ids}"]
}

当然,您的“cloudwatch”模块必须声明instances variable

有关在模块中使用输出的更多信息,请参阅https://www.terraform.io/docs/modules/usage.html#outputs