当前位置: 首页 > 知识库问答 >
问题:

Localhostendpoint到DynamoDB本地与Boto3

吕华彩
2023-03-14

尽管Amazon提供了关于如何使用Java、PHP和.Net连接到dynamoDB local的文档,但没有描述如何使用Python连接到localhost:8000。web上的现有文档指向在boto.dynamodb2.layer1中使用dynamoDB连接方法,但这会在使用boto3协议管理dynamoDB的实时和测试环境之间造成不兼容。

在boto3中,您可以使用以下构造函数和设置到环境中的变量来向Dynamo发出请求:

client = boto3.client('dynamodb')
table = client.list_tables()

鉴于boto.dynamodb2.layer1包要求您构建以下内容:

client = DynamoDBConnection(
    host='localhost',
    port=8000,
    aws_access_key_id='anything',
    aws_secret_access_key='anything',
    is_secure=False)
table = client.list_tables()

尽管可以根据本地环境创建确定适当构造函数的逻辑,但我对构建一组将每个构造函数视为相同的方法持谨慎态度。相反,我更愿意使用boto3来处理所有事情,并且能够在环境变量中设置dynamoDB的endpoint。不幸的是,该选项目前似乎不可用。

是否有任何方法可以使用boto3定义dynamoDB本地endpoint(与其他语言一样)?或者亚马逊有没有可能计划支持这一功能?

共有3个答案

池俊茂
2023-03-14

使用虚拟访问键和id,否则它将在运行方法时引发异常。

import boto3

dynamodb = boto3.session('dynamodb',
                          aws_access_key_id="anything",
                          aws_secret_access_key="anything",
                          region_name="us-west-2",
                          endpoint_url="http://localhost:8000")
璩涛
2023-03-14

注意:您需要扩展上述响应以包括区域。我已经附加到凯尔的代码上面。如果您的初始尝试遇到区域错误,这将返回相应的“[]”响应。

import boto3

## For a Boto3 client ('client' is for low-level access to Dynamo service API)
ddb1 = boto3.client('dynamodb', endpoint_url='http://localhost:8000', region_name='us-west-2')
response = ddb1.list_tables()
print(response)

# For a Boto3 service resource ('resource' is for higher-level, abstracted access to Dynamo)
ddb2 = boto3.resource('dynamodb', endpoint_url='http://localhost:8000', region_name='us-west-2')
print(list(ddb2.tables.all()))
孔安阳
2023-03-14

它确实支持DynamoDB Local。您只需要设置适当的endpoint,就像您可以对其他语言SDK所做的那样

以下是如何通过DynamoDB本地使用boto3的客户端和资源接口的代码片段:

import boto3

# For a Boto3 client.
ddb = boto3.client('dynamodb', endpoint_url='http://localhost:8000')
response = ddb.list_tables()
print(response)

# For a Boto3 service resource
ddb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000')
print(list(ddb.tables.all()))
 类似资料:
  • 我试图通过触发Python lambda表达式以编程方式将数据放入本地运行的DynamoDB容器中。 我正在尝试遵循此处提供的模板:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.03.html 我使用的是amazon/dynamodb local,您可以在此处下载:htt

  • 我已经使用aws sam local设置了一个api网关/aws lambda对,并确认运行后可以成功调用它 sam本地启动api 然后,我在docker容器中添加了一个本地Dynamodb实例,并使用aws cli在其上创建了一个表 但是,在将代码添加到lambda以写入我收到的Dynamodb实例之后: 2018-02-22T11:13:16.172Z ed9ab38e-fb54-18a4-0

  • 我正在使用DynamoDB local进行单元测试。这并不坏,但也有一些缺点。明确地: 在测试运行之前,您必须以某种方式启动服务器 服务器在每次测试之前不会启动和停止,因此测试会变得相互依赖,除非在每次测试之后添加代码删除所有表等 所有开发者都需要安装它 我想做的是把DynamoDB本地jar和它所依赖的其他jar放在我的目录中(我用Java写)。然后在每次测试之前,我会启动它,用运行,测试结束后

  • 我已经在本地运行了DynamoDB,并使用shell(localhost:8000/shell/)创建了一个表。 [Mon Decc 14 11:22:48.266930 2015][:错误][pid 12][client 10.0.2.2:58042]PHP致命错误:未捕获AWS\DynamODB\Exception\ResourceNotFoundException:AWS错误代码:Resou

  • 问题内容: 我想通过将所有Cookie移到本地存储中来减少其加载时间,因为它们似乎具有相同的功能。除了明显的兼容性问题以外,使用本地存储替换cookie功能是否有任何利弊(尤其是性能方面的优势)? 问题答案: Cookies和本地存储有不同的用途。Cookies主要用于读取 服务器端 ,本地存储只能由 客户端 读取。所以问题是,在您的应用程序中,谁需要此数据-客户端还是服务器? 如果它是您的客户端

  • PS:值得一提的是,我能够通过Appsync控制台成功地查询到这些数据,这让我坚信问题出在函数本身。