Shell脚本遍历DynamoDB表报错:表名含逗号问题求助
解决DynamoDB表描述脚本的ValidationException问题
问题原因
你这问题说白了就是获取表名列表时,输出格式带了逗号(比如用了CSV输出,或是默认text输出的格式不对),导致循环遍历的时候把带逗号的字符串当成单个表名传给aws dynamodb describe-table,AWS不认带逗号的表名,直接抛出ValidationException。
两种靠谱的解决脚本
方法1:用jq解析JSON(推荐,最稳定)
如果你的机器装了jq,直接解析AWS返回的JSON拿到纯表名:
#!/bin/bash # 拉取所有表名,用jq提取纯列表 TABLES=$(aws dynamodb list-tables --output json | jq -r '.TableNames[]') # 逐个查询表描述 for TABLE in $TABLES; do echo "=== 表 $TABLE 的描述信息 ===" aws dynamodb describe-table --table-name "$TABLE" echo -e "\n" done
方法2:用AWS CLI自带参数过滤表名
没装jq的话,直接用AWS CLI的query和text输出格式,只获取纯表名字段:
#!/bin/bash # 只输出表名,空格分隔,不带任何多余字符 TABLES=$(aws dynamodb list-tables --output text --query 'TableNames') # 循环查询每个表 for TABLE in $TABLES; do echo "=== 表 $TABLE 的描述信息 ===" aws dynamodb describe-table --table-name "$TABLE" echo -e "\n" done
你原来的脚本大概率踩了这个坑
如果你的原脚本是类似下面这样写的,肯定会出问题:
# 错误示例:用CSV输出导致表名带逗号 TABLES=$(aws dynamodb list-tables --output csv --query 'TableNames') # 此时TABLES的值是table1,table2,table3或者带引号的"table1","table2" for TABLE in $TABLES; do # 这里TABLE会被拆成"table1"、"table2"这种带逗号/引号的串,AWS自然无法识别 aws dynamodb describe-table --table-name "$TABLE" done
先验证表名是否正确
运行脚本前可以先单独打印表名列表,确认没有多余字符:
# 用jq的验证命令 aws dynamodb list-tables --output json | jq -r '.TableNames[]' # 不用jq的验证命令 aws dynamodb list-tables --output text --query 'TableNames'
确保每个表名都是单独一行或空格分隔的纯字符串,没有逗号、引号等多余内容即可。
内容的提问来源于stack exchange,提问作者udhayan dharmalingam
相关产品推荐
相关产品推荐

