You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:25:25