Я запускаю лямбда-функцию, используя 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 просто отлично