为帐户中的所有表运行 dynamodb 描述表

问题描述 投票:0回答:1

我正在尝试一个小 shell 脚本来描述我的 aws 帐户中的所有 dynamodb 表。

#!/bin/bash
# Get the list of DynamoDB table names
ddbtables=$(aws dynamodb list-tables | jq '.[]' | tr -d \")
# Iterate through the list of table names
for table in $ddbtables; do
   # Get the description of the table
   aws dynamodb describe-table --table-name $table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}"
done

我已经验证这是否有效,并且输出是表名列表

aws dynamodb list-tables | jq '.[]' | tr -d \"

ddbtables = [表1,表2,表3,....,表390]

我验证了如果传递了有效的 --table-name ,这部分也可以正常工作

aws dynamodb describe-table --table-name $table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}"

但是我的 shell 脚本失败并出现以下错误,因为在 for 循环中,逗号也被视为我不理解的表名的一部分。我们是否需要在 shell 脚本中以不同的方式处理列表?如果有任何建议,我将不胜感激

An error occurred (ValidationException) when calling the DescribeTable operation: 1 validation error detected: Value 'table1,' at 'tableName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z0-9_.-]+

谢谢

shell aws-cli
1个回答
0
投票

你的技术是正确的,但是

tr -d \"
不足以将json转换为明文。 现在您的 json 无效,因为仍然存在
[
,
]
字符。

jq
本身可以使用
-r
标志输出原始文本,方便地将json输入转换为更命令行友好的文本流。

aws dynamodb list-tables | jq -r .TableNames[]

现在您可以使用

for
循环对其进行迭代,或者您可以使用
xargs to turn  a list of table names on standard input to executions of the 
describe-tables`

aws dynamodb list-tables | jq -r .TableNames[] \
 | xargs -n 1 aws dynamodb describe-table \
    --query "Table.{TableName:TableName,SSEDescription:SSEDescription}"

您可能会发现,拥有有效的 json 结果列表可以帮助您在进一步的步骤中处理数据。 在这种情况下,使用

-s
选项
jq
将所有文档“合并”到一个 json 列表中。

aws dynamodb list-tables | jq -r .TableNames[] | xargs -n 1 aws dynamodb describe-table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}" --table-name  | jq -s
© www.soinside.com 2019 - 2024. All rights reserved.