【发布时间】:2018-10-12 20:07:43
【问题描述】:
我正在使用 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”; capacity_type 是“Read”或“Write”)
我考虑过的一些解决方案:
修复权限 - 它之前有一些权限问题,我给了它 AmazonDynamoDBFullAccess,这似乎已经解决了所有问题。此外,如果它没有访问权限,大概会引发不同的错误
参数格式 - 根据 API here,这一切似乎都是正确的。我尝试过使用完整 ARN 而不是表/表名、仅使用表名等变体。
检查 tableName 确实存在 - 确实存在,我可以通过 AWS 控制台添加和删除扩展策略
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-dynamodb boto3 autoscaling