【问题标题】:Provisioner local-exec: 'always_run' trigger doesn't work as expectedProvisioner local-exec:“always_run”触发器未按预期工作
【发布时间】:2021-10-22 09:39:05
【问题描述】:

在我的 terraform 中,我的 mysql 模块如下:

# create ssh tunnel to RDS instance
resource "null_resource" "ssh_tunnel" {
  provisioner "local-exec" {
    command = "ssh -i ${var.private_key} -L 3306:${var.rds_endpoint} -fN ec2-user@${var.bastion_ip} -v >./stdout.log 2>./stderr.log"
  }
  triggers = {
    always_run = timestamp()
  }
}

# create database
resource "mysql_database" "rds" {
  name = var.db_name
  depends_on = [null_resource.ssh_tunnel]
}

当我添加新模块并第一次运行terraform apply 时,它按预期工作。 但是当terraform apply 没有任何更改地运行时,我得到一个错误:

Could not connect to server: dial tcp 127.0.0.1:3306: connect: connection refused

如果我理解正确,配置器“local-exec”由于触发器设置而应该每次都执行脚本。你能解释一下它应该如何正常工作吗?

【问题讨论】:

标签: terraform


【解决方案1】:

我怀疑这是因为您的第一个 local-exec 在后台创建了隧道 (-f)。然后第二次执行失败,因为第一个隧道仍然存在。您根本不会在代码中关闭它。您必须扩展代码以检查隧道是否存在,并在使用完隧道后正确关闭它们。

【讨论】:

    【解决方案2】:

    最后我实现了这个解决方案https://registry.terraform.io/modules/flaupretre/tunnel/ssh/latest,而不是使用null_resource

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 2013-07-19
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多