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

Azure Function获取VM列表时报错:MSI_ENDPOINT参数值为空

问题分析与解决方案

错误原因

MSI_ENDPOINT 参数为空的直接原因是你的Azure Function未启用系统分配托管标识,导致运行时无法注入MSI认证所需的环境变量,进而触发参数为空的异常。

具体修复步骤

1. 启用系统分配托管标识

  • 登录Azure门户,进入你的Function App
  • 切换到标识选项卡,选择系统分配页签
  • 将状态设置为开启,点击保存确认

2. 配置托管标识的权限

  • 进入目标订阅或资源组(MYResGroup)的访问控制(IAM) 页面
  • 添加角色分配,角色选择虚拟机参与者(或更高权限如参与者,根据你的操作需求)
  • 分配对象选择托管标识,然后选择你的Function App对应的系统分配标识

3. 精简代码(移除冗余认证逻辑)

你的代码中重复调用了ComputeManager.Authenticate,这是不必要的,且可能干扰认证流程。修正后的代码如下:

var credentials = SdkContext.AzureCredentialsFactory.FromSystemAssignedManagedServiceIdentity(MSIResourceType.AppService, AzureEnvironment.AzureGlobalCloud);

var azure = Azure
    .Configure()
    .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
    .Authenticate(credentials)
    .WithSubscription("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA");

log.LogInformation($"已完成认证,开始获取VM列表");

var virtualMachines = azure.VirtualMachines.ListByResourceGroup("MYResGroup");

// 为VM添加标签的示例逻辑
foreach (var vm in virtualMachines)
{
    var updatedVm = vm.Update()
        .WithTag("AutoTagged", "True")
        .Apply();
    log.LogInformation($"已更新VM {vm.Name} 的标签");
}

4. 本地调试注意事项

如果在本地调试Function,MSI环境变量不会自动注入,此时建议:

  • 使用Azure CLI执行az login完成本地认证
  • 替换MSI认证代码为用户认证方式:
    var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"path/to/your/azureauth.json");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:52:52