KeyVaultSecretsRepository vaultUri ArgumentException

KeyVaultSecretsRepository vaultUri ArgumentException

在 2 次成功将 azure 函数应用本地升级到 dotnet 6 后,在升级部署在 Azure 中的 PR 时都失败并出现相同的错误。

vaultUri ArgumentException
at Microsoft.Azure.WebJobs.Script.WebHost.KeyVaultSecretsRepository..ctor (Microsoft.Azure.WebJobs.Script.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null: D:\a\s\src\WebJobs.Script.WebHost\Security\KeyManagement\KeyVaultSecretsRepository.cs:38)

.net 版本从核心 3 升级到核心 6(未隔离),功能从 v3 升级到 v4。我们在 Azure Devops 中使用 ARM 模板进行部署,除了提高 dotnet、函数和 NuGets 的版本并修复一些代码警告之外,没有其他变化。

查看 .net source code 它在

上失败
Uri keyVaultUri = string.IsNullOrEmpty(vaultUri) ? throw new ArgumentException(nameof(vaultUri)) : new Uri(vaultUri);

简单地查看 Microsoft.Azure.WebJobs.Script.WebHost.DefaultSecretManagerProvider 的微软源代码,我们可以发现它正在创建一个新的 KeyVaultSecretsRepository 实例,并将环境名称 public const string AzureWebJobsSecretStorageKeyVaultUri = "AzureWebJobsSecretStorageKeyVaultUri";[=13= 下的 valtUri 传递给它]

您可以将带有 Vault URI 的 'AzureWebJobsSecretStorageKeyVaultUri' 配置密钥添加到您的应用程序配置中,这样它就可以正常工作了。

您可能将应用程序设置“AzureWebJobsSecretStorageType”设置为“keyvault”? (将您的功能键存储在密钥保管库而不是存储中)

看起来 (sinds .net6) 您现在必须添加应用程序设置“AzureWebJobsSecretStorageKeyVaultUri”和您的密钥保管库 url 而不是“AzureWebJobsSecretStorageKeyVaultName”和您的密钥保管库的名称。

您可以删除“AzureWebJobsSecretStorageKeyVaultName”设置...