You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:CreateTable
  • application-autoscaling:RegisterScalableTarget
  • application-autoscaling:PutScalingPolicy
  • cloudwatch:PutMetricAlarm(自动扩缩容依赖CloudWatch告警触发)

内容的提问来源于stack exchange,提问作者cpat431

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:20:46