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

如何在Terraform中获取Function App staging槽的principal_id

问题描述

我需要在Terraform中访问Function App的staging槽,已能获取其生产槽的相关信息,代码如下:

data "azurerm_linux_function_app" "my_application" {
  name                = <app_name>
  resource_group_name = <resource_group_name>
}

resource "azurerm_role_assignment" "role_assignment" {
  scope               = <scope>
  role_definition_name = <role_name>
  principal_id        = data.azurerm_linux_function_app.my_application.identity.0.principal_id
}

尝试用类似方法获取staging槽信息时,编写了如下代码:

data "azurerm_linux_function_app_slot" "my_app_staging" {
  name                = <app_name>
  resource_group_name = <resource_group_name>
  slot_name           = "staging"
}

resource "azurerm_role_assignment" "staging_role_assignment" {
  scope               = <scope>
  role_definition_name = <role_name>
  principal_id        = data.azurerm_linux_function_app_slot.my_app_staging.identity.0.principal_id
}

但出现报错:

The provider hashicorp/azurerm does not support data source "azurerm_linux_function_app_slot".

请问如何在Terraform中获取Function App staging槽的principal_id?

解决方案

Azurerm provider没有单独的azurerm_linux_function_app_slot数据源,获取Function App部署槽信息需使用通用的azurerm_function_app_slot数据源,该数据源兼容Linux和Windows环境的Function App。

修改后的代码如下:

data "azurerm_function_app_slot" "my_app_staging" {
  name                = <app_name>
  resource_group_name = <resource_group_name>
  slot_name           = "staging"
}

resource "azurerm_role_assignment" "staging_role_assignment" {
  scope               = <scope>
  role_definition_name = <role_name>
  principal_id        = data.azurerm_function_app_slot.my_app_staging.identity.0.principal_id
}

该数据源会返回指定部署槽的完整信息,包括托管标识的principal_id,可直接用于角色分配操作。

若使用的Azurerm provider版本较旧,建议升级至最新稳定版,以保证数据源的兼容性。

内容的提问来源于stack exchange,提问作者Kzryzstof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:08