Terraform 在应用时从远程 URL 下载本地文件并在销毁时删除文件

Nit*_*san 13 terraform

在创建实际的 lambda 资源之前,我需要从 URL 下载 lambda 存档文件,并且在运行 terraform destroy 时需要删除该文件。基本上是从远程 URL 创建的本地文件资源。我目前已使用如下所示的配置程序完成此null_resource操作local-exec。但是,当我运行 terraform destroy 时,这不会删除该文件。有没有更好的办法?

resource "null_resource" "lambda_jar" {
  triggers = {
    on_version_change = "${var.lambda_archive_version}"
  }

  provisioner "local-exec" {
    command = "curl -o lambda.jar ${var.server_url}/${var.lambda_archive_version}.jar"
  }
}
Run Code Online (Sandbox Code Playgroud)

Gow*_*iem 8

有趣的用例...我自己还没有尝试过,但我很确定下面的两个选项之一将允许您完成此任务。

  1. 首选。使用另一个 local-exec 配置程序when = destroy
resource "null_resource" "lambda_jar" {
  triggers = {
    on_version_change = "${var.lambda_archive_version}"
  }

  provisioner "local-exec" {
    command = "curl -o lambda.jar ${var.server_url}/${var.lambda_archive_version}.jar"
  }

  provisioner "local-exec" {
    when    = destroy
    command = "$YOUR_CURL_DELETE_COMMAND"
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用terraform-provider-shell。这允许您直接在“自定义”资源中编写各种 terraform 生命周期命令的脚本。在 v0.12 中添加自定义提供程序并不是很好,因为它需要在您的团队中手动安装,但该提供程序是一把瑞士军刀,如果上述方法不起作用,它绝对可以满足您的要求。