我正在使用boto3 SDK运行lambda函数,以便将自动调节策略添加到许多dynamoDB表和索引中,但它始终如一地抛出此错误:
调用PutScalingPolicy操作时发生错误(ObjectNotFoundException):没有为服务命名空间注册的可伸缩目标:dynamodb,资源ID:table / tableName,可伸缩维度:dynamodb:table: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)
}
}
)
(resource_type是' table'或' index&#39 ;; capacity_type是' Read'或' Write')
我考虑过的一些解决方案:
修复权限 - 它之前遇到了一些权限问题,我给了它AmazonDynamoDBFullAccess,它似乎修复了所有这些。此外,如果它没有访问权限,可能会引发不同的错误
参数格式化 - 根据API here,这一切似乎都是正确的。我尝试过使用完整的ARN而不是table / tableName,仅使用tablename等变体。
检查tableName是否存在 - 确实存在 - 我可以通过AWS控制台添加和删除扩展策略
答案 0 :(得分:1)
<强> put_scaling_policy 强>
在注册可伸缩性之前,无法创建扩展策略 使用RegisterScalableTarget
的目标
<强> register_scalable_target 强>
注册或更新可扩展目标。可扩展的目标是 Application Auto Scaling可以扩展或扩展的资源。 注册可伸缩目标后,可以使用此目标 操作以更新其可伸缩的最小值和最大值 尺寸。