“DynamoDB表单在AWS CLI中运作,但使用Boto3不起作用。”

huangapple go评论118阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2023年6月22日 00:48:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/76525508.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定