azure Terraform模板中的资源创建顺序

oxf4rvwz  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(122)

我已经创建了terraform模板(azure)与两个模块。一个模块是为资源组。另一个是为vnet(它处理的NSG和路由表的创建,以及随着他们与子网的关联)。
当我运行terraform apply时,它给出了路由表的错误,因为资源组还没有创建。创建的顺序显示为先创建路由表,然后创建资源组。有没有办法设置创建的顺序?在main.tf的根文件夹中,模块资源组是先调用,然后调用vnet。

xoefb8l8

xoefb8l81#

重新考虑使用两个模块创建RG和资源的想法。问自己一个简单的问题:为甚么?
如果您100%确定这是正确的方法,请使用 * depends_on *:

module "rg1" {
  source = "./rg_module"
  ...
}

module "net1" {
  source = "./network_module"
  ....
  depends_on = [module.rg1]
}
hpcdzsge

hpcdzsge2#

您必须使用-out选项将计划保存到文件。例如:

terraform plan -out <plan_file>

始终建议使用-out并保存计划文件。这将确保在后续应用中保留创建顺序。

xzlaal3s

xzlaal3s3#

另一种选择是使用隐式依赖关系:

  • 让实际定义资源组的根模块返回一个输出:
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

这将创建对资源组的内部依赖性。
注意,除非定义了输出值,否则不可能从资源组module引用参数(实际上是变量)。

相关问题