Amazon web services 如何输出节点';从每个AZ到地形的s ip
我正在使用terraform定义在东京地区的AWS上启动10个节点(两个AZ)。因此,在每个AZ中有5个节点被启动Amazon web services 如何输出节点';从每个AZ到地形的s ip,amazon-web-services,amazon-ec2,amazon-cloudformation,terraform,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,Terraform,我正在使用terraform定义在东京地区的AWS上启动10个节点(两个AZ)。因此,在每个AZ中有5个节点被启动 resource "aws_instance" "test" { count = "${var.dse_cass_node_count}" ami = "${var.dse_cass_ami}" instance_type = "${var.dse_cass_instance
resource "aws_instance" "test" {
count = "${var.dse_cass_node_count}"
ami = "${var.dse_cass_ami}"
instance_type = "${var.dse_cass_instance_type}"
key_name = "${var.dse_cass_key_name}"
subnet_id = "${element(split(",", var.dse_cass_vpc_subnets), count.index)}"
availability_zone = "${element(split(",", var.dse_cass_azs), count.index)}"
vpc_security_group_ids = ["${var.dse_sg_id}"]
tags {
Name = "${var.namespace}-${var.env_name}-${var.dse_cluster_name}-node-${count.index}"
Environment = "${var.env_name}"
DSE_Cluster_Name = "${var.dse_cluster_name}"
}
}
我希望在输出中有基于AZ的节点IP。现在,我可以使用下面提到的定义列出输出中所有节点的ip,但无法基于AZ获得
output "cassandra_ips" {
value = ["${aws_instance.test.*.private_ip}"]
}
output "cassandra_ips1" {
value = ["${aws_instance.test.0.private_ip}"]
}
output "cassandra_ips2" {
value = ["${aws_instance.test.1.private_ip}"]
}
我想根据AZ分类。使用地形有可能吗?我希望每个AZ有一个节点的ip。
如果能有一些建议就太好了。提前谢谢
地形v0.10.5
另外,我希望每个AZ的一个节点的ip添加到Cassandra的种子列表中。Terraform允许地图输出。语法应该是这样的,我还没有尝试过 值(必需)-输出的值。这可以是一个字符串, 列表,或映射。这通常包括内插输出 是静态的,通常不有用
根据前面的评论找到了一个可行的解决方案
output "cassandra_ip_zmap" {
value = "${
zipmap(
"${aws_instance.test.*.availability_zone}", "${aws_instance.test.*.private_ip}"
)
}"
}
它可能会让terraform崩溃吗?在我在输出中添加上述行之后,Terraform正在崩溃。panic:reflect.Value.SetMapIndex:type[]接口{}的值不可分配给类型string。很可能,请尝试读取日志,“您可以将TF_LOG设置为TRACE、DEBUG、INFO、WARN或ERROR日志级别之一,以更改日志的详细程度。TRACE是最详细的,如果TF_LOG设置为除日志级别名称以外的其他名称,则它是默认值。“你能发布一个完整terraform的链接吗?terraform的定义非常庞大,有大量的模块和带有密码的私钥。因此,我们无法共享整个定义。如何将整个日志附加到此处?“测试”资源名称是问题,实际定义中的“cassandra_ebs”资源名称是什么
output "cassandra_ip_zmap" {
value = "${
zipmap(
"${aws_instance.test.*.availability_zone}", "${aws_instance.test.*.private_ip}"
)
}"
}