我已经创建了两个模块的地形模板(azure)。一个模块用于资源组。另一个是vnet(它处理NSG和路由表的创建以及它们与子网的关联)。
当我运行terraform apply时,它给出了路由表的错误,因为资源组尚未创建。创建的顺序为先创建路由表,然后创建资源组。有一种方法可以设定创造的顺序吗?基本上。在根目录下,首先调用模块资源组,然后调用vnet.
重新考虑使用两个模块创建RG和资源的想法。问你自己一个简单的问题:为什么?
如果你100%确定这是正确的方法,那么使用depends_on:
module "rg1" {
source = "./rg_module"
...
}
module "net1" {
source = "./network_module"
....
depends_on = [module.rg1]
}
另一种选择是使用隐式依赖:
-让实际定义资源组的根模块返回输出:
output "rg_name" {
value = azurerm_resource_group.root_rg.name
}
不允许修改调用根模块的资源组模块
-在创建路由表(模块)时,使用资源组模块的输出值:
[假设下面模块中的变量赋值使用名称resource_group_name]向其根源提供输入
resource_group_name =module.rg_module["<OPTIONAL KEY IF USING FOR EACH IN RG MODULE"].rg_name
创建对资源组的内部依赖。注意,不能从资源组模块中引用参数(实际上是变量)。除非定义了输出值。
必须使用out选项将计划保存到文件中。如:
terraform plan -out <plan_file>
始终建议使用out并保存计划文件。这将确保在后续应用中保留创建顺序。