如何用AWS CLI及脚本批量修改DynamoDB表的容量模式?
批量修改DynamoDB表容量模式的Bash/Python脚本方案
Bash 脚本实现
前提条件
- 已安装并配置AWS CLI(通过
aws configure完成身份验证) - 账号拥有
dynamodb:ListTables和dynamodb:UpdateTable权限
脚本示例
#!/bin/bash # 目标容量模式,可选值:PROVISIONED(预配置模式)或 PAY_PER_REQUEST(按需模式) TARGET_MODE="PAY_PER_REQUEST" # 获取所有DynamoDB表名 TABLES=$(aws dynamodb list-tables --query 'TableNames' --output text) # 遍历每个表执行修改操作 for TABLE in $TABLES; do echo "开始修改表 $TABLE 的容量模式为 $TARGET_MODE..." aws dynamodb update-table \ --table-name "$TABLE" \ --billing-mode "$TARGET_MODE" # 检查命令执行结果 if [ $? -eq 0 ]; then echo "表 $TABLE 修改成功" else echo "表 $TABLE 修改失败,请检查权限或表状态" fi done
实用技巧
- 若只想修改特定前缀的表,可过滤表名:
TABLES=$(aws dynamodb list-tables --query 'TableNames[?starts_with(@, `order_`)]' --output text) - 正式执行前,建议用
--dry-run参数测试命令合法性:aws dynamodb update-table --table-name "test_table" --billing-mode "PAY_PER_REQUEST" --dry-run
Python 脚本实现
前提条件
- 已安装boto3库:
pip install boto3 - 已配置AWS凭证(可通过环境变量、
~/.aws/credentials文件或IAM角色) - 账号拥有对应权限
脚本示例
import boto3 def batch_update_billing_mode(target_mode="PAY_PER_REQUEST"): dynamodb_client = boto3.client('dynamodb') # 获取所有表名(自动处理分页,兼容超过100个表的场景) table_names = [] response = dynamodb_client.list_tables() table_names.extend(response['TableNames']) while 'LastEvaluatedTableName' in response: response = dynamodb_client.list_tables(ExclusiveStartTableName=response['LastEvaluatedTableName']) table_names.extend(response['TableNames']) # 逐个修改表的容量模式 for name in table_names: print(f"正在处理表: {name}") try: dynamodb_client.update_table( TableName=name, BillingMode=target_mode ) print(f"表 {name} 修改成功") except Exception as e: print(f"表 {name} 修改失败: {str(e)}") if __name__ == "__main__": # 按需修改目标模式,若选PROVISIONED需补充读写容量参数(见下方说明) batch_update_billing_mode("PAY_PER_REQUEST")
补充说明
- 若要切换到
PROVISIONED模式,必须指定读写容量,修改update_table部分:dynamodb_client.update_table( TableName=name, BillingMode="PROVISIONED", ProvisionedThroughput={ 'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5 } ) - 可添加表名过滤逻辑,比如只处理包含特定关键词的表:
filtered_tables = [name for name in table_names if "user_" in name]
内容的提问来源于stack exchange,提问作者abbe aryan
相关产品推荐
相关产品推荐

