如何在Python中创建带自动扩缩容预配置吞吐量的DynamoDB表
配置DynamoDB预配置吞吐量自动扩缩容
DynamoDB的预配置吞吐量自动扩缩容无法在create_table接口中直接配置,需要分两步操作:先创建带基础预配置容量的表,再通过Application Auto Scaling客户端配置自动扩缩策略。以下是完整实现方案:
1. 创建带基础预配置吞吐量的表
先补充ProvisionedThroughput参数完成表的创建:
import boto3 dynamodb_client = boto3.client('dynamodb') table_name = "YourTableName" # 创建带初始预配置容量的表 table = dynamodb_client.create_table( TableName=table_name, KeySchema=[ { 'AttributeName': 'DeviceID', 'KeyType': 'HASH' # 分区键 }, { 'AttributeName': 'Timestamp', 'KeyType': 'RANGE' # 排序键 } ], AttributeDefinitions=[ { 'AttributeName': 'DeviceID', 'AttributeType': 'S' }, { 'AttributeName': 'Timestamp', 'AttributeType': 'N' }, ], ProvisionedThroughput={ 'ReadCapacityUnits': 5, # 初始读容量单元 'WriteCapacityUnits': 5 # 初始写容量单元 } ) # 等待表创建完成再进行后续配置 dynamodb_client.get_waiter('table_exists').wait(TableName=table_name)
2. 配置自动扩缩容策略
使用application-autoscaling客户端分别为读、写容量配置自动扩缩规则:
asg_client = boto3.client('application-autoscaling') # 封装通用配置函数,减少重复代码 def setup_auto_scaling(resource_id, scalable_dimension, min_cap, max_cap): # 注册可伸缩目标 asg_client.register_scalable_target( ServiceNamespace='dynamodb', ResourceId=resource_id, ScalableDimension=scalable_dimension, MinCapacity=min_cap, MaxCapacity=max_cap ) # 创建目标追踪型扩缩容策略 asg_client.put_scaling_policy( PolicyName=f"{table_name}-{scalable_dimension.split('.')[-1]}-policy", ServiceNamespace='dynamodb', ResourceId=resource_id, ScalableDimension=scalable_dimension, PolicyType='TargetTrackingScaling', TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 70.0, # 触发扩缩容的目标使用率(百分比) 'PredefinedMetricSpecification': { 'PredefinedMetricType': 'DynamoDBReadCapacityUtilization' if 'Read' in scalable_dimension else 'DynamoDBWriteCapacityUtilization' }, 'ScaleOutCooldown': 60, # 扩容冷却时间(秒),避免频繁扩容 'ScaleInCooldown': 60 # 缩容冷却时间(秒),避免频繁缩容 } ) # 配置读容量自动扩缩容 setup_auto_scaling( resource_id=f"table/{table_name}", scalable_dimension='dynamodb:table:ReadCapacityUnits', min_cap=5, max_cap=50 ) # 配置写容量自动扩缩容 setup_auto_scaling( resource_id=f"table/{table_name}", scalable_dimension='dynamodb:table:WriteCapacityUnits', min_cap=5, max_cap=50 )
关键参数说明
- MinCapacity/MaxCapacity:设置自动扩缩的容量范围,防止过度扩容或缩容至0导致服务异常。
- TargetValue:默认推荐70%,当吞吐量使用率持续超过该值时自动扩容,低于时自动缩容。
- ScaleOutCooldown/ScaleInCooldown:冷却时间用于避免短时间内资源频繁波动,可根据业务调整。
权限要求
执行代码的IAM角色需具备以下权限:
dynamodb:CreateTableapplication-autoscaling:RegisterScalableTargetapplication-autoscaling:PutScalingPolicycloudwatch:PutMetricAlarm(自动扩缩容依赖CloudWatch告警触发)
内容的提问来源于stack exchange,提问作者cpat431
相关产品推荐
相关产品推荐

