尝试通过 Azure 函数中的 Azure Management Fluent Api 创建 KeyVault 时出现 ArgumentNullException

问题描述

我添加了一个服务总线触发函数,以通过 Microsoft.Azure.Management.Fluent 库创建密钥保管库。

该函数在本地运行良好,并在我的 MSDN 订阅中创建了一个新的密钥保管库,但是,当它部署到 Azure 并尝试使用函数应用托管服务标识在我们公司的测试订阅中创建密钥保管库时,它失败并显示 { {1}}来自ArgumentNullException

堆栈跟踪

Guid.Parse

运行以下语句时发生错误,该语句取自此再现链接的 ManageKeyVault sample project。提供的参数都具有有效值,并且通过 IAzure.ResourceGroups.GetByNameAsync(resourceGroupName) 查找了 resourceGroup。

Inner exception System.ArgumentNullException handled at CollectorFunctions.Proxies.KeyVaultProxy+d__9.MoveNext:
at System.Guid.Parse (System.Private.CoreLib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.WrapModel (Microsoft.Azure.Management.KeyVault.Fluent,Version=1.0.0.68,PublicKeyToken=31bf3856ad364e35)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.Define (Microsoft.Azure.Management.KeyVault.Fluent,PublicKeyToken=31bf3856ad364e35)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.Microsoft.Azure.Management.ResourceManager.Fluent.Core.CollectionActions.ISupportsCreating<Microsoft.Azure.Management.KeyVault.Fluent.Vault.Definition.IBlank>.Define (Microsoft.Azure.Management.KeyVault.Fluent,PublicKeyToken=31bf3856ad364e35)
at CollectorFunctions.Proxies.KeyVaultProxy+d__9.MoveNext (CollectorFunctions,Version=1.0.0.0,PublicKeyToken=nullCollectorFunctions,PublicKeyToken=null: D:\a\1\s\src\Server\CollectorFunctions\Proxies\IKeyVaultProxy.csCollectorFunctions,PublicKeyToken=null: 86)

解决方法

就我而言,我在获取凭据时没有意识到有一个tenantId 参数。我需要提供tenantId:

var msi = new MSILoginInformation(MSIResourceType.VirtualMachine);
var creds = SdkContext.AzureCredentialsFactory.FromMSI(msi,AzureEnvironment.AzureGlobalCloud,*** tenantId ***);

由于您的堆栈跟踪与我的完全一样,我猜这就是问题所在。如果您在获得凭据时指定了租户 ID,那么我认为它应该适合您。要获取 TenantId,请转到您的标识所在的 Azure AD,它应列在概述页面上。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...