如果Count.Index = 0使用Terraform,则设置aws_instance的network_interfa



我正在用Terraform创建2个EC2实例,我想将辅助IP地址给Terraform创建的第一个实例。

我正在使用以下代码块

resource "aws_network_interface" "floating_private" {
  subnet_id       = "${var.subnet_cluster_one}"
  private_ips_count = 2
}
resource "aws_instance" "instance_attrix_cluster_one" {
    count = 2
    instance_type = "${var.aws_instance_type}"
    ami = "${var.attrix_ami}"
    subnet_id = "${var.subnet_cluster_one}"
    security_groups = "${var.aws_security_groups}"
    key_name = "${var.ssh_key}"
    tags = "${merge(var.default_tags, map("Name", "${format("attrix%02d", 
count.index + 1)}-${var.env_name}"))}"
}

我尝试在" aws_instance"块中添加以下代码

network_interface = "${floating_private.id ? count.index == 0 : count.index >= 0}"

但是,我看到以下错误 -

 Error reading config for aws_instance[instance_attrix_cluster_one]: floating_private.id: resource variables must be three parts: TYPE.NAME.ATTR in:
 ${floating_private.id ? count.index == 0 : count.index >= 0}

如果计数== 0?

,而不是创建两个自定义eNI并将它们连接到第一个实例,我稍微更改了该方法,因此使用实例创建了默认的ENI,我们将附加的ENI附加到第一个实例帖子创建实例。

允许Terraform为实例创建默认ENI,然后为第一个实例创建附件。请参阅下面。

resource "aws_network_interface" "floating_private" {
  subnet_id = "${data.aws_subnet.example.id}"
}
resource "aws_instance" "instance_attrix_cluster_one" {
  count         = 2
  instance_type = "t2.micro"
  subnet_id     = "${data.aws_subnet.example.id}"
  ami           = "${data.aws_ami.ubuntu.id}"
  tags {
      Name = "test-${count.index}"
  }
}
resource "aws_network_interface_attachment" "test" {
  instance_id          = "${element(aws_instance.instance_attrix_cluster_one.*.id, count.index)}"
  network_interface_id = "${element(aws_network_interface.floating_private.*.id, count.index)}"
  device_index         = "${count.index + 1}"
}

稍微修改以在我的计算机上进行一些测试,但希望您能得到这个想法并可以应用于解决方案。

最新更新