Terraform持久和动态的基础设施部分?

时间:2018-05-05 15:15:04

标签: terraform

我想将我的基础设施分为两部分:

  1. 持久性(防火墙,块存储等)
  2. 动态(将消耗来自#1的持久资源)
  3. 我想确保永久性部分永远不会被删除,同时,动态基础架构部分会有一个选项<p class = "ft00">Introduction</p> <p class = "ft00">John Smith</p> <p class = "ft02">Email:</p> <p class = "ft00">John@gmail.com</p> <p class = "ft00">Work Experience</p> <p class = "ft00">27 July 2017</p> <p class = "ft02">ABC Company</p> <p class = "ft00">19 May 2018</p> <p class ="ft02">XYZ Company</p> <p class = "ft00">EDUCATION AND TRAINING</p>

4 个答案:

答案 0 :(得分:0)

您不想销毁的所有资源都必须添加生命周期策略:prevent_destroy

查看文档:{​​{3}}

答案 1 :(得分:0)

要完全防止销毁,您必须微调服务提供商资源的权限。但是,有一种简单的方法来划分您的基础设施。

Terraform提供remote state data source,允许您使用来自不同项目的输出,这样您在使用动态部分时就无法销毁这些资源。

答案 2 :(得分:0)

我有一些不同的解决方法。我不想使用带有CLI的预配器创建为“ null_resource”的“ terraform destroy”删除资源。您仍然可以在terraform中使用变量。

例如(创建一个资源组,但是由于null_resource而保持不变)

resource "null_resource" "backend-config" {
        provisioner "local-exec" {
        command     = <<EOT
    az group create --location ${var.Location} --name ${var.Resource_group_name} --tags 'LineOfBusiness=${var.Lob}' 'Region=${var.Region}' 'Purpose="Terraform-Primary-Resource-Group-${var.Lob}'
    EOT
        interpreter = ["Powershell", "-Command"]
      }
    }

现在,如果您使用Terraform destroy销毁资源。任何null_resource都将保持不变。

答案 3 :(得分:0)

我将通过部署2个Terraform来解决此问题。您只需创建一次“静态”资源,并且不要触摸它们。为了提高安全性,请手动为这些资源添加删除锁(例如,我知道您可以在Azure中执行此操作,因为我假设其他云提供商也有类似的解决方案)。

使用 data 块(不是资源)将这些资源导入Dynamic Terraform部署中。 Terraform绝不会尝试删除使用数据块导入的资源。