使用Terraform通过for_each创建Azure SQL用户时属性引用错误排查
解决方案:修正Azure SQL用户创建中的属性引用错误
你的代码出现的错误是因为变量db_details定义的属性为db_name,但在mssql_user资源中错误引用成了each.value.db,需将所有错误的引用替换为each.value.db_name,涵盖database、username和password三个字段。
修正后的完整代码如下:
variable "db_details" { description = "Details of certs to be created" type = list(object({ db_name = string roles = list(string) })) } ## Random Password for SQL db's resource "random_password" "db_passwords" { for_each = { for db in var.db_details : db.db_name => db } length = 32 special = false } resource "mssql_user" "db_users" { server { host = "mysqlserverr" port = "1433" login { username = local.sql_server_username password = data.azurerm_key_vault_secret.sql_server_password.value } } for_each = { for db in var.db_details : db.db_name => db } database = join("-", [ local.resource_name_prefix, each.value.db_name ]) username = join("-", [ "svc", each.value.db_name, "user" ]) password = random_password.db_passwords[each.value.db_name].result roles = each.value.roles }
错误原因说明
Terraform报错提示each.value对象没有db属性,是因为你在var.db_details的类型定义里明确声明的属性是db_name而非db。修正所有属性引用后,random_password资源生成的密码就能正确关联到对应的数据库用户,实现每个数据库生成独立密码并绑定专属用户的需求。
内容的提问来源于stack exchange,提问作者Adesh
相关产品推荐
相关产品推荐

