将自动扩展策略应用于DynamoDB表

时间:2018-05-02 16:22:58

标签: amazon-web-services aws-lambda amazon-dynamodb boto3 autoscaling

我正在使用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控制台添加和删除扩展策略

1 个答案:

答案 0 :(得分: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可以扩展或扩展的资源。   注册可伸缩目标后,可以使用此目标   操作以更新其可伸缩的最小值和最大值   尺寸。