DynamoDB отключить автоматическое масштабирование программно - PullRequest
0 голосов
/ 05 июня 2018

Я хочу запускать ежедневное обновление набора таблиц «Динамо».Для этого я написал консольное приложение, однако хочу иметь возможность программно отключить автоматическое масштабирование емкости в начале процесса обновления, а затем снова включить его в конце.

Мне удалосьувеличьте выделенную пропускную способность как для таблицы, так и для ее глобальных вторичных индексов, используя метод UpdateTableAsync , но у него нет никаких опций для обработки автоматического масштабирования, и я не могу найти другие функции, позволяющие мне это сделать.

Есть ли вообще?

РЕДАКТИРОВАТЬ: Я нашел команду CLI, необходимую для этого здесь: https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html. Мой вопрос сейчас, существует ли это где-нибудь в .NET SDK

1 Ответ

0 голосов
/ 05 июня 2018

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

Существует пакет nuget с именем AWSSDK.ApplicationAutoScaling.Вам нужно будет создать экземпляр AmazonApplicationAutoScalingClient (в приведенном ниже коде он представлен autoScaling).

При настройке автоматического масштабирования в консоли AWS DynamoDB создаются две вещи;описание масштабирования (минимальная емкость, максимальная емкость и т. д.) и политика, которая, как я полагаю, связывает автоматическое масштабирование с CloudWatch, чтобы можно было поднять аварийные сигналы.Оба эти объекта должны быть управляемыми.

Чтобы решить мою проблему с отключением автоматического масштабирования и последующим повторным включением его после обновления моих таблиц, мне пришлось выполнить следующий процесс:

Сохранить политикии масштабирование описаний (называемое ScalableTargets) перед запуском обновления.

this.preUpdatePolicies = (await autoScaling.DescribeScalingPoliciesAsync(new DescribeScalingPoliciesRequest
{
    ResourceId = $"table/{this.tableName}",
    ServiceNamespace = ServiceNamespace.Dynamodb,
    ScalableDimension = ScalableDimension.DynamodbTableWriteCapacityUnits
})).ScalingPolicies;

this.preUpdateScaling = (await autoScaling.DescribeScalableTargetsAsync(new DescribeScalableTargetsRequest
{
    ResourceIds = new List<string>() { $"table/{this.tableName}" },
    ServiceNamespace = ServiceNamespace.Dynamodb,
    ScalableDimension = ScalableDimension.DynamodbTableWriteCapacityUnits
})).ScalableTargets;

Затем я отменяю регистрацию описаний масштабирования, которые также удаляют любые связанные политики.

foreach (var scaling in this.preUpdateScaling)
{
    await autoScaling.DeregisterScalableTargetAsync(new DeregisterScalableTargetRequest
    {
        ResourceId = scaling.ResourceId,
        ServiceNamespace = ServiceNamespace.Dynamodb,
        ScalableDimension = ScalableDimension.DynamodbTableWriteCapacityUnits
    });
}

После запуска моегоОбновление Затем я заново регистрирую описания / масштабируемые цели и помещаю политики обратно на основе значений, которые я сохранил до запуска обновления.

foreach (var scaling in this.preUpdateScaling)
{
    await autoScaling.RegisterScalableTargetAsync(new RegisterScalableTargetRequest
    {
        ResourceId = scaling.ResourceId,
        ServiceNamespace = scaling.ServiceNamespace,
        ScalableDimension = scaling.ScalableDimension,
        RoleARN = scaling.RoleARN,
        MinCapacity = scaling.MinCapacity,
        MaxCapacity = scaling.MaxCapacity
    });
}

foreach (var policy in this.preUpdatePolicies)
{
    await autoScaling.PutScalingPolicyAsync(new PutScalingPolicyRequest
    {
        ServiceNamespace = policy.ServiceNamespace,
        ResourceId = policy.ResourceId,
        ScalableDimension = policy.ScalableDimension,
        PolicyName = policy.PolicyName,
        PolicyType = policy.PolicyType,
        TargetTrackingScalingPolicyConfiguration = policy.TargetTrackingScalingPolicyConfiguration
    });
}

Надеюсь, это будет полезно для всех, кто хотел бы использовать .NET для управленияавтоматическое масштабирование.

...