本地主机端点到DynamoDB本地与Boto3



虽然Amazon提供了关于如何使用Java、PHP和. net连接到dynamoDB local的文档,但没有描述如何使用Python连接到localhost:8000。web上的现有文档指出在bot .dynamodb2中使用DynamoDBConnection方法。但是这会在使用boto3协议管理dynamoDB的活动环境和测试环境之间造成不兼容。

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

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

而bottom .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设置端点。遗憾的是,该选项目前似乎不可用。

是否有任何方法使用boto3来定义一个dynamoDB本地端点(像其他语言)?或者亚马逊有可能计划支持这个功能吗?

它支持DynamoDB Local。您只需要设置适当的端点,就像使用其他语言sdk一样

下面是如何通过DynamoDB Local使用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()))

注意:您需要扩展上述响应以包含区域。我已经在上面的凯尔代码中添加了。如果您的初始尝试收到一个区域错误,这将返回适当的'[]'响应。

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()))

使用虚拟访问键和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")

这是python DynamoDb教程。它描述如何连接到本地实例。

http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.01.html

在aws配置的帮助下,似乎需要的最小参数如下(如下)。

dynamodb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000/')

使用aws configure命令配置profile参数时,region、access key和secret key参数可以省略(需要install aws cli)。但是,您可以在家中手动创建aws配置文件(如果您不想使用aws cli)。

文件~/.aws/配置

[default]
output = json
region = anywhere

文件~/.aws/凭证
[default]
aws_access_key_id = whatever_id
aws_secret_access_key = whatever_key 

可以参考http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

注意在本地DynamoDb开发中,这些文件中的region, aws_access_key_idaws_secret_access_key值可以是任何值。但是如果你想在aws上使用aws cli,那么你必须输入有效的区域、有效的id和密钥。当您注册AWS服务时,它们就可用了。

更多信息,当你调用

db = boto3.client('dynamodb')

boto3连接的主机将基于region参数,例如region=us-west-1,当调用上述api时,它将连接到dynamodb.us-west-1.amazonaws.com。但是,当传递参数endpoint_url时,将不会使用region。有关更多AWS端点列表,请访问http://docs.aws.amazon.com/general/latest/gr/rande.html。

最新更新