【问题标题】:How to use Terraform provisioner with multiple instances如何将 Terraform 配置器与多个实例一起使用
【发布时间】:2019-11-07 01:34:54
【问题描述】:

我想创建 x 个实例并运行相同的配置器。

resource "aws_instance" "workers" {
  ami = "ami-08d658f84a6d84a80"
  count = 3
  ...
provisioner "remote-exec" {
    scripts = ["setup-base.sh", "./setup-docker.sh"]
    connection {
      type = "ssh"
      host = "${element(aws_instance.workers.*.public_ip, count.index)}"
      user = "ubuntu"
      private_key = file("${var.provisionKeyPath}")
      agent = false
    }
  }

我认为host 行让 Terraform 感到困惑。获取Error: Cycle: aws_instance.workers[2], aws_instance.workers[1], aws_instance.workers[0]

【问题讨论】:

  • 该配置器是aws_instance.workers 资源的一部分吗?从您现在在问题中包含的内容很难判断,因此进行编辑以澄清这一点会很有用。
  • 如果您能告诉我您缺少什么,我们很乐意提供更多信息。
  • 能否请您提供完整的 Terraform 配置?一般来说,最好提供minimal reproducible example,以便人们可以重现您的问题。

标签: terraform terraform-provider-aws


【解决方案1】:

自从我升级了我的 terraform 版本(0.12),我遇到了和你一样的问题。

您需要在connection 对象中为host 属性使用${self.private_ip}, 并且connection 对象应位于provisioner "remote-exec" 之外

详情如下。

resource "aws_instance" "workers" {
  ami = "ami-08d658f84a6d84a80"
  count = 3
  ...
  connection {
    host = "${self.private_ip}"
    type = "ssh"
    user = "YOUR_USER_NAME"
    private_key = "${file("~/YOUR_PEM_FILE.pem")}"
  }

  provisioner "remote-exec" {
    scripts = ["setup-base.sh", "./setup-docker.sh"]
  }
...
}

如果您需要获取更多信息,以下链接将为您提供帮助。 https://github.com/hashicorp/terraform/issues/20286

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2021-04-04
    • 1970-01-01
    • 2013-03-19
    • 2020-04-03
    相关资源
    最近更新 更多