如何在缩放后获取新实例的IP?

时间:2018-02-21 08:26:52

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

我想获取Terraform在更新现有基础架构后创建的新实例的IP。

我有下一个资源实例:

resource "aws_instance" "masters" {
    count = "${var.masters_count}"
    ami = "${var.aws_centos_ami}"
    instance_type = "t2.medium"
    ......
    availability_zone = "eu-west-1b"

    root_block_device {
      delete_on_termination = "${var.volume_delete_on_termination}"
    }

    tags {
            Name = "master-${count.index}"
        }
}

如果我使用下一个“local-exec”命令,它会将所有主控实例IP写入文件:

provisioner "local-exec" {
    command =  "echo \"${join("\n", aws_instance.masters.*.private_ip)}\" >> ../ansible-provision/inventory/hosts.ini"
}

我使用5个实例部署此infraestructure。然后我想添加另外3个实例,所以我将“count”更改为8.

如何获取3个新实例的IP?

2 个答案:

答案 0 :(得分:1)

解决方案:

因为我有一些运行的脚本并且不能使它们成为幂等的,所以它很容易使用ansible通过条件执行脚本在非幂等元素周围添加一些额外的“脚手架”,以便它们只运行一次。

https://groups.google.com/forum/#!topic/terraform-tool/YVHReDbJ2Gw

答案 1 :(得分:0)

使用null_resource

resource "null_resource" "ips" {
  triggers {
    ids = "${join(",", aws_instance.masters.*.id)}"
  }

  provisioner "local-exec" {
  ...
  }
}