Terraform获取Azure Storage Account primary_access_key时索引无效报错
问题描述
我尝试从通过foreach创建的Azure存储账户中提取primary_access_key值并分配给Function App,但因索引使用错误,无法获取该值。
相关代码文件
variables.tf
variable "stack_version"{ type = string } variable "functionappname" { type = string } variable "storage_list" { type = list } variable "rg" { type = string } variable "loc" { type = string }
variables.tfvars
resourcegroupname = "test-rg" location = "eastus" storage_list = ["mystorageaccount"] functionappname = "myfunctionapp" stack_version = { node = "~14" }
存储账户模块代码
resource "azurerm_storage_account" "storageaccount" { for_each = toset(var.storage_list) name=each.value resource_group_name = var.rg location = var.loc account_tier = "Standard" account_replication_type = "GRS" }
output.tf
output "sa_primary_access_key_out"{ value = { for storageaccount in azurerm_storage_account.storageaccount : storageaccount.name => storageaccount.primary_access_key } sensitive = true } output "sa_name_out"{ value = { for storageaccount in azurerm_storage_account.storageaccount : storageaccount.name => storageaccount.name } }
出错的Function App模块调用代码
module "FUNAPP_StorageAccount" { source = "../../modules/StorageAccount" storage_list = var.storage_list resourcegroupname = module.ResourceGroup.rg_name_out location = var.loc } module "FunctionApp" { depends_on = [ module.ResourceGroup, module.StorageAccount ] source = "../../modules/FunctionApp" resourcegroupname = module.ResourceGroup.rg_name_out location = var.loc service_plan_id = data.azurerm_service_plan.shared-appservice-plan.id storageaccountname = module.FUNAPP_StorageAccount.sa_name_out["mystorageaccount"] storage_account_access_key = module.FUNAPP_StorageAccount.sa_primary_access_key_out["sa_primary_access_key_out"] functionappname = var.functionappname stack_version = var.stack_version }
错误信息
│ Error: Invalid index │ │ on main.tf line 45, in module "FunctionApp": │ 45: storage_account_access_key = module.FUNAPP_StorageAccount.sa_primary_access_key_out["primary_access_key"] │ ├──────────────── │ │ module.FUNAPP_StorageAccount.sa_primary_access_key_out has a sensitive value │ │ The given key does not identify an element in this collection value.
解决方案
修正索引值
将Function App模块调用中的storage_account_access_key行修改为:
storage_account_access_key = module.FUNAPP_StorageAccount.sa_primary_access_key_out["mystorageaccount"]
这里的"mystorageaccount"是你在var.storage_list中定义的存储账户名称,和storageaccountname使用的键保持一致。
更灵活的写法(可选)
如果storage_list中只有一个存储账户,也可以通过values()函数直接获取唯一的密钥值,避免硬编码账户名:
storage_account_access_key = values(module.FUNAPP_StorageAccount.sa_primary_access_key_out)[0]
原因说明
存储账户模块的sa_primary_access_key_out输出是一个映射(Map),其键是存储账户的名称(来自var.storage_list),值对应该账户的primary_access_key。你之前使用了错误的键名("sa_primary_access_key_out"或"primary_access_key"),导致Terraform无法在映射中找到对应的元素,因此抛出索引无效的错误。
内容的提问来源于stack exchange,提问作者Uday Kiran
相关产品推荐
相关产品推荐

