Terraform新增资源时如何引用已有KeyVault资源ID写入密钥
问题解答
关于KeyVault引用报错的判断澄清
你的判断不成立。只要你当前Terraform栈的状态文件中已经存在azurerm_key_vault.shared_kv的资源记录(即该KeyVault是此前通过这套栈执行创建的),直接引用azurerm_key_vault.shared_kv.id不会触发报错,也完全不需要销毁重建现有KeyVault。
Terraform执行时只会对比配置与状态文件的差异,你新增MySQL Server和密钥对的操作属于增量变更,不会改动已有的KeyVault资源,只会将新生成的密码写入已有KeyVault。
如果该KeyVault并非当前栈管理、不在当前状态文件中,也不需要硬编码资源ID,通过数据源读取即可:
data "azurerm_key_vault" "shared_kv" { name = "KeyVault实际名称" resource_group_name = "KeyVault所属资源组名称" } resource "azurerm_key_vault_secret" "sqlpassword" { name = "flagr-mysql-password" value = random_password.sqlpassword.result key_vault_id = data.azurerm_key_vault.shared_kv.id }
关于硬编码KeyVault ID的风险说明
如果你直接替换为固定的KeyVault资源ID,后续使用这套栈创建新环境时,只要未修改这个硬编码值,必然会将新环境的MySQL密码写入旧KeyVault,会引发配置混淆、权限泄露等风险,不建议使用硬编码方案。
如果需要适配多环境部署,可将KeyVault的名称、所属资源组定义为Terraform变量,不同环境传入对应参数即可,完全避免环境串扰问题。
内容的提问来源于stack exchange,提问作者user17203430
相关产品推荐
相关产品推荐

