Azure Redis, Как масштабировать в.NET, используя Microsoft Azure Management Libraries (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);
}
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);
Замечания:
Для генерации токена вы можете использовать
GetAuthorizationHeader
функция отсюда.Для настройки приложения для проверки подлинности диспетчера ресурсов Azure с помощью Active Directory
Вам необходимо настроить приложение AD и назначить роль (Contributor) вашему приложению для управления Redis Cache через MAML. Для более подробной информации, вы можете обратиться к этому официальному учебнику.
ОБНОВИТЬ
Вот мой 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>
Результат:
Чтобы масштабировать экземпляры Redis Cache Azure с помощью библиотек управления 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 Cache # Scale с использованием MAML