尝试做这样的事情https://github.com/littlejo/terraform-ssm-tunnel。因此 terraform 将在运行计划和应用中创建隧道。 问题是,当运行 terraform plan -out tf.plan 时,它按预期工作,但是当运行 terraform apply tf.plan 时,它不会创建隧道。如果您只是执行 terraform apply,它也可以正常工作,但是当您使用计划输出运行 terraform apply 时,它就不行了。
我希望 terraform 在尝试更改 postgresql 和 kubernetes_secret 等使用提供程序之前在两个阶段都运行脚本。我在提供程序中添加了一些内容,因此它取决于该模块的输出,就像示例中的那样,但运气不佳。
一种选择是这样的:
在 my_script 目录中创建 main.tf 和 my_script.sh
data "external" "my_script" {
program = ["bash", "${path.module}/my_script.sh"]
# Optional: Arguments to pass to the script
query = {
environment = var.environment
}
}
output "result" {
value = data.external.my_script.result.environment
}
resource "null_resource" "example" {
provisioner "local-exec" {
command = "bash ${path.module}/my_script.sh ${data.external.my_script.result.environment}"
}
}
variable "environment" {
description = "Environment for the script"
type = string
}
还有脚本
environment="$1"
echo "{\"environment\": \"$environment\"}"
my_variable=$((RANDOM))
mkdir /tmp/test_$my_variable
然后在另一个目录中执行main.tf
module "my_script_module" {
source = "../my_script"
environment = "production"
}
这似乎有效,但不是很好
向“null_resource”添加基于时间的触发器,例如
triggers = { always_run = timestamp() }
每次脚本运行并触发资源时时间戳都会改变