如何在Terraform中配置资源依赖模块以控制销毁顺序?
解决Terraform销毁时密钥库秘钥权限不足的问题
这个问题的核心是Terraform的默认销毁顺序搞反了——先删访问策略模块,导致服务主体没权限删秘钥。虽然不能直接在depends_on里引用模块,但我们可以通过模块输出内部资源的方式,间接建立秘钥资源和模块访问策略的依赖关系,调整销毁顺序。
步骤1:在default_kv_access模块中添加输出
模块里创建了azurerm_key_vault_access_policy.default资源,我们需要把它输出出来,让外部资源能引用:
# 在default_kv_access模块的末尾添加输出 output "access_policies" { type = map(azurerm_key_vault_access_policy) value = azurerm_key_vault_access_policy.default }
这个输出会暴露模块内所有的访问策略资源实例,供外部资源建立依赖。
步骤2:在秘钥资源中添加依赖引用
回到你的根模块代码,修改azurerm_key_vault_secret.secrets资源,通过模块的输出间接依赖访问策略:
resource "azurerm_key_vault_secret" "secrets" { for_each = local.secrets name = each.key value = each.value key_vault_id = azurerm_key_vault.kv.id # 依赖模块输出的访问策略资源 depends_on = [module.default_kv_access.access_policies] }
原理说明
这样设置后,Terraform会明确知道:azurerm_key_vault_secret.secrets必须在default_kv_access模块的访问策略之后创建,之前销毁。销毁时的顺序就会变成:
- 销毁
azurerm_key_vault_secret.secrets(此时访问策略还存在,服务主体有足够权限执行删除) - 销毁
default_kv_access模块中的访问策略 - 最后销毁密钥库(如果你的配置里包含密钥库的销毁)
完美解决了销毁时权限不足的问题。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

