将自动缩放策略应用于 DynamoDB 表时出现 ObjectNotFoundException

Posted

技术标签:

【中文标题】将自动缩放策略应用于 DynamoDB 表时出现 ObjectNotFoundException【英文标题】:ObjectNotFoundException when applying autoscaling policy to DynamoDB table 【发布时间】: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:1CapacityUnits'.format(resource_type,capacity_type),
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration=
        'TargetValue': 50.0,
        'PredefinedMetricSpecification': 
            'PredefinedMetricType': 'DynamoDB0CapacityUtilization'.format(capacity_type)
        
    
  )

(resource_type 是“table”或“index”; capacity_type 是“Read”或“Write”)

我考虑过的一些解决方案:

修复权限 - 它之前有一些权限问题,我给了它 AmazonDynamoDBFullAccess,这似乎已经解决了所有问题。此外,如果它没有访问权限,大概会引发不同的错误

参数格式 - 根据 API here,这一切似乎都是正确的。我尝试过使用完整 ARN 而不是表/表名、仅使用表名等变体。

检查 tableName 确实存在 - 确实存在,我可以通过 AWS 控制台添加和删除扩展策略

【问题讨论】:

【参考方案1】:

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

注册或更新一个可扩展的目标。可扩展的目标是 Application Auto Scaling 可以横向扩展或缩减的资源。 在你注册了一个可扩展的目标之后,你可以使用这个 更新其可扩展的最小值和最大值的操作 维度。

【讨论】:

以上是关于将自动缩放策略应用于 DynamoDB 表时出现 ObjectNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB 使用 Cloudformation 自动扩展

从 DynamoDB 获取项目时出现“提供的关键元素与架构不匹配”错误

将 DAX 与 DynamoDB 一起使用时出现无法配置集群端点错误

对 DynamoDb 使用细粒度访问控制时出现 AccessDeniedException

需要将大型表从 RDS 迁移到 DynamoDB 的策略建议

Dynamodb 自动缩放地形导入