Amazon ec2 Terraform:使用模块循环输出变量
我从terraform开始,我正在构建一个小项目,只是一些aws实例,其中一个附带了ebs卷 我相信我会开始更多地使用terraform,所以我想通过定义模块来完成这项工作,然后在其他项目中重用这些模块 为此,我创建了3个模块(一个用于实例,另一个用于创建ebs卷,最后一个用于连接卷) 在另一个地方,我有一个“main.tf”,我在其中调用这些模块。我遇到的问题是,要创建和连接卷,我需要一些数据,如instanceID 为了获取InstanceID,我在“instance”模块上定义了一个输出变量(如果实例计数不止一个,则必须是一个列表): 然后,在main.tf文件中调用模块上的变量:Amazon ec2 Terraform:使用模块循环输出变量,amazon-ec2,terraform,terraform-provider-aws,Amazon Ec2,Terraform,Terraform Provider Aws,我从terraform开始,我正在构建一个小项目,只是一些aws实例,其中一个附带了ebs卷 我相信我会开始更多地使用terraform,所以我想通过定义模块来完成这项工作,然后在其他项目中重用这些模块 为此,我创建了3个模块(一个用于实例,另一个用于创建ebs卷,最后一个用于连接卷) 在另一个地方,我有一个“main.tf”,我在其中调用这些模块。我遇到的问题是,要创建和连接卷,我需要一些数据,如instanceID 为了获取InstanceID,我在“instance”模块上定义了一个输出变
module "aws-instance" {
source = "../../Terraform/aws-instance"
instance_type = "t2.micro"
instance_count = "2"
}
(some other code...)
module "aws-volume-attachment" {
source = "../../Terraform/aws-volume-attachment"
device_name = "/dev/sdf"
instance_id = "${element("${module.aws-instance.instance_id}", count.index)}"
volume_id = "${element("${module.aws-ebs-volume.volume_id}", count.index)}"
}
但我有一个错误:
Error: module "aws-volume-attachment": count variables are only valid within resources
我的问题是,如何循环变量,以便将每个卷连接到一个实例?在声明Terraform模块时使用“计数”。
您有两种选择:
在模块中不支持计数,仅在资源中支持计数。在您的实例中,您希望将
instance\u count
的值传递给实例、卷和附件模块。然后,您将使用instance\u count
作为模块内的count
值(在资源级别)
如果正在使用count
,您的aws实例模块将输出一个实例ID的“列表”
。卷也是如此
将这些列表传递到aws卷附件
模块(实例id
和卷id
变量的类型必须为列表
),然后使用计数.索引
对其进行迭代
请原谅资源名称,我不熟悉AWS提供商,因为我使用Azure,但希望这能说明主要问题:
resource "aws-volume-attachment" {
count = "${var.instance_count}"
...
volume_id = "${var.volume_ids[count.index]}"
instance_id = "${var.instance_ids[count.index])"
}
在模块中不支持计数,仅在资源中支持计数。在您的实例中,您希望将
instance\u count
的值传递给实例、卷和附件模块。然后,您将使用instance\u count
作为模块内的count
值(在资源级别)
如果正在使用count
,您的aws实例模块将输出一个实例ID的“列表”
。卷也是如此
将这些列表传递到aws卷附件
模块(实例id
和卷id
变量的类型必须为列表
),然后使用计数.索引
对其进行迭代
请原谅资源名称,我不熟悉AWS提供商,因为我使用Azure,但希望这能说明主要问题:
resource "aws-volume-attachment" {
count = "${var.instance_count}"
...
volume_id = "${var.volume_ids[count.index]}"
instance_id = "${var.instance_ids[count.index])"
}