[英]Accessing DynamoDB Local from boto3
我正在做 AWS 教程 Python 和 DynamoDB。 我下载并安装了 DynamoDB Local。 我得到了访问密钥和秘密访问密钥。 我为 python 安装了 boto3。我剩下的唯一步骤是设置身份验证凭据。 我没有下载 AWS CLI,那么我应该在哪里包括访问密钥和秘密密钥以及区域?
我是否将其包含在我的 python 代码中?
我是否在放置此信息的目录中创建一个文件? 那么我是否应该在我的 python 代码中写任何东西以便它可以找到它?
您可以尝试在代码中传递 accesskey 和 secretkey,如下所示:
import boto3
session = boto3.Session(
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
)
client = session.client('dynamodb')
OR
dynamodb = session.resource('dynamodb')
从AWS 文档:
在您以编程方式或通过 AWS 命令行界面 (AWS CLI) 访问 DynamoDB 之前,您必须配置您的凭证以启用对您的应用程序的授权。 可下载的 DynamoDB 需要任何凭证才能工作,如以下示例所示。
AWS 访问密钥 ID:“fakeMyKeyId”
AWS 秘密访问密钥:“fakeSecretAccessKey”
您可以使用 AWS CLI 的 aws configure 命令设置凭证。 有关更多信息,请参阅使用 AWS CLI。
因此,您需要在您的主目录中创建一个.aws
文件夹。 在那里创建credentials
和config
文件。 以下是如何执行此操作:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
如果您想编写可移植代码并保持开发12 因素应用程序的精神,请考虑使用环境变量。 优点是在本地,CLI 和代码中的 boto3 python 库(以及几乎所有其他官方 AWS SDK语言、PHP、Go 等)都旨在查找这些值。
使用官方Docker镜像快速本地启动DynamoDB示例:
# Start a local DynamoDB instance on port 8000
docker run -p 8000:8000 amazon/dynamodb-local
然后在终端中,设置 CLI 和 SDK(如 boto3)正在寻找的一些默认值。 请注意,在您关闭终端 session 之前,这些将可用。
# Region doesn't matter, CLI will complain if not provided
export AWS_DEFAULT_REGION=us-east-1
# Set some dummy credentials, dynamodb local doesn't care what these are
export AWS_ACCESS_KEY_ID=abc
export AWS_SECRET_ACCESS_KEY=abc
如果您安装了 CLI,那么您应该能够运行以下命令(在同一个终端会话中)。 请注意--endpoint-url
标志。
# Create a new table in DynamoDB Local
aws dynamodb create-table \
--endpoint-url http://127.0.0.1:8000 \
--table-name tmp \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
然后您应该能够列出表格:
aws dynamodb list-tables --endpoint-url http://127.0.0.1:8000
并得到如下结果:
{
"TableNames": [
"tmp"
]
}
那么我们如何让我们在 CLI 中指定的endpoint-url
在 Python 中工作? 不幸的是,boto3 代码库中没有端点 url 的默认环境变量,因此我们需要在代码运行时将其传入。 .NET和Java的文档很全面,但 Python 的文档有点难以捉摸。 从boto3 github 回购中也看到了这个很好的答案,我们需要使用endpoint_url
关键字创建client
或resource
。 在下面,我们正在寻找一个名为AWS_DYNAMODB_ENDPOINT_URL
的自定义环境变量。 关键是如果指定,它将被使用,否则将回退到平台默认值,使您的代码可移植。
# Run in the same shell as before
export AWS_DYNAMODB_ENDPOINT_URL=http://127.0.0.1:8000
# file test.py
import os
import boto3
# Get environment variable if it's defined
# Make sure to set the environment variable before running
endpoint_url = os.environ.get('AWS_DYNAMODB_ENDPOINT_URL', None)
# Using (high level) resource, same keyword for boto3.client
resource = boto3.resource('dynamodb', endpoint_url=endpoint_url)
tables = resource.tables.all()
for table in tables:
print(table)
最后,运行这个片段
# Run in the same shell as before
python3 test.py
# Should produce the following output:
# dynamodb.Table(name='tmp')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.