配置器本地执行:'always_run'触发器未按预期工作



在我的地形我有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

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

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

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

最新更新