Azure函数门户显示加载错误但函数可运行,托管身份部署排查
Azure门户函数应用的函数列表页显示错误:无法加载列表中的部分函数,原因是发生错误,已尝试重启应用等操作。
通常这类错误是部署了空.zip包导致,但我的情况并非如此——所有函数均可正常执行。问题在于门户的错误提示会让不了解情况的同事误以为配置存在问题。点击「查看详情」仅提示主机运行时发生内部服务器错误,未给出具体信息,查看日志也无法定位问题。
此前配置为WEBSITE_RUN_FROM_PACKAGE = 1,AzureWebJobsStorage变量使用带accountKey的连接字符串,同时正确设置了WEBSITE_CONTENTAZUREFILECONNECTIONSTRING和WEBSITE_CONTENTSHARE,此时函数可正常显示在门户列表中。
由于公司转向使用托管身份替代连接字符串,而存储账户文件共享不支持托管身份,当前配置改为WEBSITE_RUN_FROM_PACKAGE = https://<storage account>.blob.core.windows.net/<path>/<function code>.zip,并取消了WEBSITE_CONTENTSHARE和WEBSITE_CONTENTAZUREFILECONNECTIONSTRING的设置(排查工具对此有提示,但不允许使用这两个变量)。
当前环境变量配置如下:
AzureWebJobsStorage__accountName = <storage account> AzureWebJobsStorage__queueServiceUri = https://<storage account>.queue.core.windows.net AzureWebJobsStorage__blobServiceUri = https://<storage account>.queue.core.windows.net FUNCTIONS_EXTENSION_VERSION = ~4 FUNCTIONS_WORKER_RUNTIME = dotnet-isolated WEBSITE_USE_MI = true WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED = 1 WEBSITE_RUN_FROM_PACKAGE = https://<storage account>.blob.core.windows.net/<path>/<function code>.zip WEBSITE_ENABLE_SYNC_UPDATE_SITE = true APPLICATIONINSIGHTS_CONNECTION_STRING = <conn string>
调试期间已为托管身份分配了存储账户的宽泛权限,当前角色包括:
- Storage Queue Data Reader
- Storage Queue Data Message Processor
- Storage Queue Data Contributor
- Storage Queue Data Message Sender
- Storage Account Contributor
- Storage Blob Data Contributor
从存储账户遥测可看到,.zip文件已通过OAuth(MI)成功获取,这部分功能正常。
猜测可能是Azure门户的函数列表视图不支持从URL加载代码时显示函数列表(所有函数均为HTTP触发器),同时门户关于WEBSITE_CONTENTSHARE和WEBSITE_CONTENTAZUREFILECONNECTIONSTRING的提示可能是门户bug,因为这种URL加载的使用场景并不常见。
相关文档参考:
- 从外部包URL加载Azure函数
- 使用托管身份获取Azure函数代码
- 为AzureWebJobsStorage使用托管身份

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

