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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:14