47

尽管 Amazon 提供了有关如何使用 Java、PHP 和 .Net 连接到本地 dynamoDB的文档,但没有描述如何使用 Python 连接到 localhost:8000。网络上的现有文档指出在 boto.dynamodb2.layer1 中使用了DynamoDBConnection 方法,但这会在使用 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 设置端点。不幸的是,该选项目前似乎不可用。

有没有办法使用 boto3 来定义 dynamoDB 本地端点(像其他语言一样)?或者亚马逊计划支持此功能的任何机会?

4

4 回答 4

68

它确实支持 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()))
于 2015-08-27T22:53:32.350 回答
19

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

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()))
于 2015-12-30T13:16:44.830 回答
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")
于 2016-07-01T09:13:47.557 回答
13

这是教程 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使用命令(需要安装 aws cli)配置配置文件参数时,可以省略区域、访问密钥和密钥参数。但是,您可以在家中手动创建 aws 配置文件(以防万一,您不想使用 aws cli)。

文件 ~/.aws/config

[default]
output = json
region = anywhere

文件 ~/.aws/credentials

[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中查阅 aws 配置

注意在本地 DynamoDb development中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_urlregion不会使用。有关更多 AWS 端点列表,请访问http://docs.aws.amazon.com/general/latest/gr/rande.html

于 2017-02-18T12:44:38.043 回答