Terraform 条件创建
Terraform conditional creation
我有一个 Terraform 文件,用于在 Azure 上创建资源组、存储帐户、存储共享、数据库和 VM。我建议的用例是,在生产中,一旦资源组、存储帐户、存储共享和数据库被创建,它们就应该留在原地。但是,在某些情况下,VM 可能需要销毁并以不同的规格重新创建。我知道我可以 运行 文件一次创建所有内容,然后污染 VM 并使用应用重新创建它们,但这似乎不是理想的方法。
在常规使用中,应通过更改配置来更改基础架构,而不是通过 运行 像 terraform taint
这样的命令式命令。如果您更改了需要创建它的 VM 配置的某些内容,那么底层提供程序应该制定一个计划来自动替换该对象,而其他对象保持不变。
当您有不同的对象需要以不同的节奏进行更改时——尤其是当其中一些对象是有状态对象(如数据库)时——在 Terraform 中对其进行建模的一个好方法是将问题分解为多个单独的 Terraform 配置。您可以在一种配置中使用数据源来检索有关在另一种配置中创建的对象的信息。
拆分为至少两个单独的配置意味着可以降低其中一个上 运行 terraform apply
的风险,因为它可以采取的操作范围只是在管理的对象上那个特定的配置。虽然原则上您可以仔细审查 Terraform 计划以了解它何时计划进行有害的更改,但拆分为多个配置是许多团队用来减少人为错误可能影响的额外保险。
我有一个 Terraform 文件,用于在 Azure 上创建资源组、存储帐户、存储共享、数据库和 VM。我建议的用例是,在生产中,一旦资源组、存储帐户、存储共享和数据库被创建,它们就应该留在原地。但是,在某些情况下,VM 可能需要销毁并以不同的规格重新创建。我知道我可以 运行 文件一次创建所有内容,然后污染 VM 并使用应用重新创建它们,但这似乎不是理想的方法。
在常规使用中,应通过更改配置来更改基础架构,而不是通过 运行 像 terraform taint
这样的命令式命令。如果您更改了需要创建它的 VM 配置的某些内容,那么底层提供程序应该制定一个计划来自动替换该对象,而其他对象保持不变。
当您有不同的对象需要以不同的节奏进行更改时——尤其是当其中一些对象是有状态对象(如数据库)时——在 Terraform 中对其进行建模的一个好方法是将问题分解为多个单独的 Terraform 配置。您可以在一种配置中使用数据源来检索有关在另一种配置中创建的对象的信息。
拆分为至少两个单独的配置意味着可以降低其中一个上 运行 terraform apply
的风险,因为它可以采取的操作范围只是在管理的对象上那个特定的配置。虽然原则上您可以仔细审查 Terraform 计划以了解它何时计划进行有害的更改,但拆分为多个配置是许多团队用来减少人为错误可能影响的额外保险。