клиент управления Azure не возвращает ни одной группы ресурсов - PullRequest
1 голос
/ 11 апреля 2019

Я новичок в лазури.Я пытаюсь создать ResourceGroup, затем пытаюсь развернуть виртуальную машину.Но я получаю исключение при доступе к ресурсным группам.

Я следую приведенному здесь примеру MSDN: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/csharp-template

Я пробовал другую подписку, но безуспешно.Не удалось найти указатели в Интернете по этой проблеме, или я мог пропустить.Если вы могли бы помочь мне, пожалуйста, дайте мне знать.

Спасибо.


//AppId,Key,TenetId are correct
var credentials = SdkContext.AzureCredentialsFactory
                .FromServicePrincipal(ApplicationID, Key, TenetID,
                    new AzureEnvironment()
                    {
                        AuthenticationEndpoint = @"https://login.windows.net/",
                        ManagementEndpoint = @"https://management.core.windows.net/",
                        ResourceManagerEndpoint = @"https://management.azure.com/",
                        GraphEndpoint = @"https://graph.windows.net/",
                    });

 var azure = Azure
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithSubscription(AzureProperties.SubscriptionId);

            var groupName = "MyresourceGroup1";
            var location = Region.USWest;

//Exception comes at here.
            var resourceGroup = azure.ResourceGroups.Define(groupName)
                .WithRegion(location)
                .Create();

// Сведения об исключении.

System.ArgumentNullException
  HResult=0x80004003
  Message=Value cannot be null.
Parameter name: value
  Source=mscorlib
  StackTrace:
   at System.String.EndsWith(String value, StringComparison comparisonType)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials.<ProcessHttpRequestAsync>d__24.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.ResourceGroupsOperations.<CreateOrUpdateWithHttpMessagesAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.ResourceGroupImpl.<CreateResourceAsync>d__26.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Core.ResourceActions.Creatable`4.<Microsoft-Azure-Management-ResourceManager-Fluent-Core-ResourceActions-IResourceCreator<IResourceT>-CreateResourceAsync>d__15.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Core.DAG.CreatorTaskItem`1.<ExecuteAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Core.DAG.TaskGroupBase`1.<ExecuteNodeTaskAsync>d__14.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Core.Extensions.Synchronize[TResult](Func`1 function)
   at Microsoft.Azure.Management.ResourceManager.Fluent.Core.ResourceActions.Creatable`4.Create()
   at pvt_CreateVM.AzureVMManager.CreateVM()
   at pvt_CreateVM.Program.Main(String[] args)

1 Ответ

0 голосов
/ 11 апреля 2019

Я думаю, что код в настоящее время терпит неудачу, потому что вы не установили никакого значения для KeyVaultSuffix свойства для AzureEnvrionment, которое вы инициализировали.

Это предположение, если посмотреть информацию об ошибке, которой вы поделились, но я говорю это после просмотра соответствующего исходного кода для библиотек управления Azure для .NET

(примечание, что это может сделать любой желающий .. вот ссылка )

    public async override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var adSettings = new ActiveDirectoryServiceSettings
        {
            AuthenticationEndpoint = new Uri(Environment.AuthenticationEndpoint),
            TokenAudience = new Uri(Environment.ManagementEndpoint),
            ValidateAuthority = true
        };
        string url = request.RequestUri.ToString();
        if (url.StartsWith(Environment.GraphEndpoint, StringComparison.OrdinalIgnoreCase))
        {
            adSettings.TokenAudience = new Uri(Environment.GraphEndpoint);
        }

        string host = request.RequestUri.Host;

        // I guess this is where your code is failing currently. 
        if (host.EndsWith(Environment.KeyVaultSuffix, StringComparison.OrdinalIgnoreCase))
        {

Как исправить

Если нет веских причин, я бы не инициализировал объект AzureEnvironment и вместо этого использовал бы уже доступные значения, поскольку это обеспечило бы правильность значений всех необходимых свойств.

Пример: AzureEnvironment.AzureGlobalCloud. Посмотрите здесь для всех возможных значений

Измените этот код при инициализации AzureEnvironment

var credentials = SdkContext.AzureCredentialsFactory
            .FromServicePrincipal(ApplicationID, Key, TenetID,
                new AzureEnvironment()
                {
                    AuthenticationEndpoint = @"https://login.windows.net/",
                    ManagementEndpoint = @"https://management.core.windows.net/",
                    ResourceManagerEndpoint = @"https://management.azure.com/",
                    GraphEndpoint = @"https://graph.windows.net/",
                });

к этому коду

var credentials = SdkContext.AzureCredentialsFactory
    .FromServicePrincipal(clientId,
    clientSecret,
    tenantId, 
    AzureEnvironment.AzureGlobalCloud);

Если у вас есть причины, по которым ни одно из доступных значений среды не является достаточным, убедитесь, что вы инициализировали все необходимые свойства для AzureEnvironment

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...