【问题标题】:How to re-run terraform resource file provisioner如何重新运行 terraform 资源文件配置器
【发布时间】:2019-06-04 15:28:27
【问题描述】:

我有一个资源“aws_instance”,其中包括一个供应商“文件”。当 EC2 实例最初不存在时,这一切都按预期工作。

如果文件从 VM 中删除,我如何重新运行配置程序?

resource "aws_instance" "example" {
   ami           = "ami-0b0a60c0a2bd40612"
   instance_type = "t2.micro"
   key_name = "secret"
   security_groups = ["terraform-basic-ssh-http"]

provisioner "file" {
  source = "install-nginx.sh"
  destination = "/tmp/install-nginx.sh"

  connection {
   type     = "ssh"
   user     = "ubuntu"
   private_key = "${file("/local/path/to/my/key.pem")}"
  }
}

provisioner "remote-exec" {
  inline = [
    "chmod +x /tmp/install-nginx.sh",
    "/tmp/install-nginx.sh"
  ]

  connection {
    type     = "ssh"
    user     = "ubuntu"
    private_key = "${file("/local/path/to/mykey.pem")}"
  }

}


}

【问题讨论】:

  • 您应该为此使用 Packer。
  • Packer 会不会有点笨手笨脚?这将意味着杀死VM并从packer AMI开始一个新的?我可以看到 Ansible 在这种情况下工作,但 Terraform 没有类似的东西吗?
  • Packer 是解决此类问题的最简单和最有效的路径,通常被认为是最佳实践。您所要做的就是创建一个通过 Packer 安装 NGINX 的 AMI,并且您已将 N 数问题减少到 1。

标签: terraform


【解决方案1】:

您也可以为此使用terraform taint 命令:terraform taint provisioner.file

如果您的资源在模块中,请使用 terraform taint -module=[MODULE_NAME] provisioner.file 污染配置器

这将使 Terraform “重新创建”供应商。

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2021-03-03
    • 2022-01-12
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多