英文:
List DynamoDB tables works with aws cli but not using boto3
问题
我正在尝试使用boto3检索所有DynamoDB表。使用AWS CLI可以执行以下命令:
aws dynamodb list-tables
这个命令可以正常工作,但是使用boto3时无法检索到所有表格。如果我使用boto3测试另一个服务(比如S3)来检索存储桶,它可以正常工作。因此,这不是一个连接或权限的问题。
以下是我的简单代码示例:
import boto3
AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"
AWS_SESSION_TOKEN = "xxx"
AWS_REGION_NAME = 'us-east-1'
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
aws_session_token=AWS_SESSION_TOKEN,
region_name=AWS_REGION_NAME
)
available_services = session.get_available_services()
print("Available services:")
print(available_services)
s3_client = session.client('s3')
print("===== S3 =====")
buckets = [bucket['Name'] for bucket in s3_client.list_buckets()['Buckets']]
print(f"Buckets {len(buckets)}")
dynamodb_client = session.client('dynamodb')
print("===== DynamoDB =====")
table_names = dynamodb_client.list_tables()['TableNames']
print(f"Tables {len(table_names)}")
print(table_names)
以下是输出结果:
Available services:
['accessanalyzer', 'account', ...'dynamodb'...'s3'...]
===== S3 =====
Buckets 150
===== DynamoDB =====
Tables 2
['LimitMonitor-SummaryDDB-1951SZYTWET87', 'LimitMonitor-SummaryDDB-FEBN4S1LC0OF']
因此,使用AWS CLI可以列出超过100个表,但是使用boto3只能列出2个,名称为 LimitMonitor-...
,我不知道它们是什么。
是否有使用boto3 DynamoDB客户端的问题?
英文:
I'm trying to retrieve all dynamodb tables with boto3. Using AWS CLI with:
aws dynamodb list-tables
It works:
{
"TableNames": [
"table_name1",
"table_name2",
...
}
But with boto3, It does not retrieve them. If I test another service with boto3 like S3 to retrieve buckets, it works. So it is not a connection/rights problem.
Here's my simple code:
import boto3
AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"
AWS_SESSION_TOKEN = "xxx"
AWS_REGION_NAME = 'us-east-1'
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
aws_session_token=AWS_SESSION_TOKEN,
region_name=AWS_REGION_NAME
)
available_services = session.get_available_services()
print("Available services:")
print(available_services)
s3_client = session.client('s3')
print("===== S3 =====")
buckets = [bucket['Name'] for bucket in s3_client.list_buckets()['Buckets']]
print(f"Buckets {len(buckets)}")
dynamodb_client = session.client('dynamodb')
print("===== DynamoDB =====")
table_names = dynamodb_client.list_tables()['TableNames']
print(f"Tables {len(table_names)}")
print(table_names)
And the output
Available services:
['accessanalyzer', 'account', ...'dynamodb'...'s3'...]
===== S3 =====
Buckets 150
===== DynamoDB =====
Tables 2
['LimitMonitor-SummaryDDB-1951SZYTWET87', 'LimitMonitor-SummaryDDB-FEBN4S1LC0OF']
So with aws cli, it lists more than my hundred tables, with boto3, only 2: LimitMonitor-...
, I don't know what they are.
Is something wrong using boto3 dynamodb client?
答案1
得分: 0
我的问题已解决。
问题涉及到 AWS_REGION_NAME,它被设置为'us-east-1'而不是'eu-central-1'。我可以看到存储桶,因为它是全球的。
英文:
My bad problem solved.
It concerns AWS_REGION_NAME which was set to 'us-east-1' instead of 'eu-central-1'. I can see buckets as it's global.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论