Azure Redis, масштабирование в .NET с помощью библиотек управления Microsoft Azure (MAML)

Может ли кто-нибудь привести пример использования библиотек управления Microsoft Azure (MAML) для масштабирования службы Redis Cache?

Я должен использовать более старую версию Microsoft.Azure.Management.Redis.dll, v0.9.0.0, поэтому RedisManagementClient не получает токен, а только учетные данные. В этом случае появляется исключение

«AuthenticationFailed: Ошибка аутентификации. Отсутствует заголовок «Авторизация».

Вот код, который я использую:

  public static void ScaleRedis(eSubscriptionType subscriptionType)
    {

            RedisManagementClient client = new RedisManagementClient(AzureCredentials.GetCredentials(subscriptionType));


            var redisParams = new RedisCreateOrUpdateParameters()
            {
                Properties = new RedisProperties(version, new Sku(redisSKUName, redisSKUFamily, redisSKUCapacity), false),
                Location = redisCacheRegion
            };
            client.Redis.CreateOrUpdate(resourceGroupName, cacheName, redisParams);


    }

person Guy Assaf    schedule 29.01.2017    source источник
comment
Я обновил свой ответ. Любые проблемы, пожалуйста, дайте мне знать.   -  person Bruce Chen    schedule 01.02.2017
comment
Вроде правильный ответ, только отношение к AD было для нас новым и теперь пытаемся получить clientId и tenentId, когда получится отмечу как лучший ответ. Я вижу в коде ссылку на ключи доступа Redis, но где использовать ключ доступа?   -  person Guy Assaf    schedule 02.02.2017
comment
ключи доступа в сочетании с конечной точкой используется как строка подключения при подключении кэша Azure Redis к клиентской библиотеке (например, StackExchange.Redis), вы можете обратиться к этому руководство.   -  person Bruce Chen    schedule 02.02.2017
comment
Поскольку вы используете MAML для управления (создания/обновления) кэшем Azure Redis, нет никакой связи с access-keys. Вам просто нужно следить за ресурсами в моей заметке, чтобы создать свое рекламное приложение и получить токен. Любая проблема, пожалуйста, дайте мне знать.   -  person Bruce Chen    schedule 02.02.2017


Ответы (2)


Я должен использовать более старую версию Microsoft.Azure.Management.Redis.dll, v0.9.0.0, поэтому RedisManagementClient не получает токен, а только учетные данные.

Насколько мне известно, библиотека с именем Microsoft.Azure.* используется для вызова ARM REST API с TokenCloudCredentials, хотя Microsoft.WindowsAzure.* может работать с помощью CertificateCloudCredentials.

Если вы управляете Redis Cache с помощью MAML с CertificateCloudCredentials, вы получите следующее сообщение об ошибке:

AuthenticationFailed: Authentication failed. The 'Authorization' header is missing.

Воспользовавшись Fiddler, вы можете найти подробное описание ошибки следующим образом:

Учитывая, что вы используете Microsoft.Azure.Management.Redis.dll (v0.9.0), код, используемый для управления Redis Cache, будет выглядеть так:

TokenCloudCredentials tokenCredential = new TokenCloudCredentials("{your-subscriptionId}", "{token}");
RedisManagementClient client = new RedisManagementClient(tokenCredential);
var redisParams = new RedisCreateOrUpdateParameters()
{
    Properties = new RedisProperties(version, new Sku(redisSKUName, redisSKUFamily, redisSKUCapacity)),
    Location = redisCacheRegion
};
client.Redis.CreateOrUpdate(resourceGroupName, cacheName, redisParams);

Примечание.

ОБНОВЛЕНИЕ

Вот мой packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.Redis" version="0.9.0-preview" targetFramework="net45" />
  <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
  <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" />
  <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net45" />
  <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
  <package id="Microsoft.WindowsAzure.Common" version="1.3.0" targetFramework="net45" />
  <package id="Microsoft.WindowsAzure.Common.Dependencies" version="1.1.0" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
</packages>

Результат:

person Bruce Chen    schedule 31.01.2017

Масштабирование экземпляров Azure Redis Cache с помощью библиотек управления Microsoft Azure. (MAML), вызовите метод IRedisOperations.CreateOrUpdate и передайте новый размер для RedisProperties.SKU.Capacity.

static void Main(string[] args)
{
    // For instructions on getting the access token, see
    // https://azure.microsoft.com/documentation/articles/cache-configure/#access-keys
    string token = GetAuthorizationHeader();

    TokenCloudCredentials creds = new TokenCloudCredentials(subscriptionId,token);

    RedisManagementClient client = new RedisManagementClient(creds);
    var redisProperties = new RedisProperties();

    // To scale, set a new size for the redisSKUCapacity parameter.
    redisProperties.Sku = new Sku(redisSKUName,redisSKUFamily,redisSKUCapacity);
    redisProperties.RedisVersion = redisVersion;
    var redisParams = new RedisCreateOrUpdateParameters(redisProperties, redisCacheRegion);
    client.Redis.CreateOrUpdate(resourceGroupName,cacheName, redisParams);
}

Дополнительные сведения см. в разделе Управление кэшем Redis с помощью примера MAML.

Источник: Как Масштабирование кэша Azure Redis # Масштабирование с помощью MAML

person juvchan    schedule 29.01.2017
comment
Я добавляю дополнительную информацию к вопросу, чтобы быть более конкретным с версией, которую я использую. - person Guy Assaf; 30.01.2017
comment
Кэш Redis создается с помощью Azure Resource Manager или Azure Service Management? Ваша версия nuget выпущена в 2014 году и слишком устарела для поддержки проверки подлинности токена. - person juvchan; 30.01.2017