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

Я запускаю лямбда-функцию, используя boto3 SDK, чтобы добавить политики автоматического масштабирования к ряду таблиц и индексов DynamoDB, однако она постоянно выдает эту ошибку:

Произошла ошибка (ObjectNotFoundException) при вызове операции PutScalingPolicy: масштабируемая цель не зарегистрирована для пространства имен службы: DynamodB, ID ресурса: table / tableName, масштабируемое измерение: DynamodB: таблица: ReadCapacityUnits: ObjectNotFoundException

Соответствующий код здесь:

def set_scaling_policy(resource_type, capacity_type, resource_id):
  dbClient = boto3.client('application-autoscaling')
  response = dbClient.put_scaling_policy(
    PolicyName= 'dynamoDBScaling',
    ServiceNamespace= 'dynamodb',
    ResourceId= resource_id,
    ScalableDimension= 'dynamodb:{0}:{1}CapacityUnits'.format(resource_type,capacity_type),
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 50.0,
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'DynamoDB{0}CapacityUtilization'.format(capacity_type)
        }
    }
  )

(тип_ресурса - «таблица» или «индекс»; тип_процесса - «чтение» или «запись»)

Несколько решений, которые я рассмотрел:

  • исправление разрешений - раньше у него были некоторые проблемы с разрешениями, я дал ему AmazonDynamoDBFullAccess, который, похоже, исправил все это. Кроме того, по-видимому, он выдаст другую ошибку, если у него не будет доступа

  • форматирование параметров - в соответствии с API здесь все кажется правильным. Я пробовал варианты, такие как использование полного ARN вместо table / tableName, использование только имени таблицы и т. Д.

  • проверка того, что tableName действительно существует - он есть, и я могу добавлять и удалять политики масштабирования через консоль AWS просто отлично

1 Ответ

0 голосов
/ 03 мая 2018

put_scaling_policy

http://boto3.readthedocs.io/en/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.put_scaling_policy

Вы не можете создать политику масштабирования, пока не зарегистрируете масштабируемую цель с помощью RegisterScalableTarget

register_scalable_target

http://boto3.readthedocs.io/en/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target

Регистрирует или обновляет масштабируемую цель. Масштабируемая цель - это ресурс, который приложение Auto Scale может масштабировать или масштабировать. После того, как вы зарегистрировали масштабируемую цель, вы можете использовать это операция обновления минимальных и максимальных значений для ее масштабируемой измерение.

...