增加 Terraform 中的 EC2 资源计数并应用 Ansible

Increase EC2 Resource Count in Terraform and applying Ansible

在为 terraform 增加 EC2 资源和将更改应用到 Ansible 时遇到一些问题。我目前有一个基本模板:

resource "aws_instance" "linux_node" {
  count = 2
  ami           = "ami-6df1e514"
  instance_type = "t2.micro"
  key_name = ""
  vpc_security_group_ids = [""]
  iam_instance_profile = ""
  user_data = "${file("userdata.sh")}"

  tags {
    Name = "linux-node"
  }

  provisioner "local-exec" {
        command = "sleep 120; ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook --private-key ~/.ssh/aws-patrick-oregon.pem -i '${aws_instance.linux_node.public_ip},' ../install_packages.yml"
    }
}

当我将计数增加到超过 1 时的问题,我在 aws_instance.linux_node.public_ip 上收到错误消息,其中错误内容为:

* aws_instance.linux_node[1]: 1 error(s) occurred:

* Resource 'aws_instance.linux_node' not found for variable 'aws_instance.linux_node.public_ip'

我认为它源于括号 [1]。我想知道如何编写一个可靠的命令来在我进行更改以添加 EC2 实例时获取更改。

当资源已 count 设置时,需要以不同的方式对其进行寻址以指定您希望使用的实例。

特别是对于供应商来说,通常情况下希望根据供应商 运行 所针对的 "current" 实例采取行动,因此 shorthand 随 self变量类型:

provisioner "local-exec" {
  command = "sleep 120; ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook --private-key ~/.ssh/aws-patrick-oregon.pem -i '${self.public_ip},' ../install_packages.yml"
}