地形防护措施

地形防护措施

我已经在生产环境中运行了数十个 AWS 实例,我想开始使用 Terraform 来自动创建下一个实例。我读到过 Terraform 可以帮助实践不可变模式。但是我想避免破坏任何正在运行的实例的风险。Terraform 是否提供任何保护措施来避免这种情况?

答案1

是的 - 使用terraform plan在任何操作之前。它将输出将要进行的更改的完整列表,而实际上执行其中任何一个,供您审阅。

答案2

Terraform 对此没有明确的保护措施,但其总体设计已经阻止它接触现有资源。

通常,每个 Terraform 资源都有一些主要标识符(例如,对于 EC2 是实例 ID,对于 S3 是存储桶名称)。并且每次 Terraform 运行都应仅 a) 创建新资源或 b) 更新/删除 Terraform 控制下的现有资源。

  • 如果情况 a) ID 已经存在,则会出现错误,Terraform 无法创建任何内容(EC2 永远不会发生这种情况,但 S3 存储桶可能会发生这种情况)。这是修复 Terraform 代码的机会。

  • 在情况 b) 中,Terraform 应该只使用“其自己的”资源,而不会影响您帐户的现有内容。

人们可以通过替换/重命名其资源来有意(或无意)干扰 Terraform,这会破坏一切;但在“正常”使用中我从未见过此类问题。

答案3

您可以向资源添加生命周期配置块(参见 Terraform 资源配置);具体方法是使用:

lifecycle {
    prevent_destroy = true
}

当计划中包含对资源的破坏操作时,这将返回一条错误消息。

相关内容