簡體   English   中英

從 boto3 訪問本地 DynamoDB

[英]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文件夾。 在那里創建credentialsconfig文件。 以下是如何執行此操作:

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 的默認環境變量,因此我們需要在代碼運行時將其傳入。 .NETJava的文檔很全面,但 Python 的文檔有點難以捉摸。 boto3 github 回購中也看到了這個很好的答案,我們需要使用endpoint_url關鍵字創建clientresource 在下面,我們正在尋找一個名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM