我在python中创建了一个脚本,用于在dynamoDB中设置一个表。
dynamoDB示例在docker容器中本地运行。
当我调试脚本时,一切似乎都很好:配置正确,表状态为ACTIVE
,table.put_item
操作的响应为200 OK
,无异常...
然而,如果我尝试通过命令行运行命令:aws dynamodb list-tables --endpoint-url http://localhost:8000 --region localhost
我得到:
{
"TableNames": []
}
知道为什么会这样吗
下面是我代码:
import boto3
from mocksForDynamo import mocks
from botocore.config import Config
ENDPOINT_DYNAMO = 'http://localhost:8000'
TABLE_NAME = 'my_table'
def dynamo_setup():
config = Config(
region_name = 'localhost',
signature_version = 'v4',
retries = {
'max_attempts': 10,
'mode': 'standard'
}
)
dynamo = boto3.resource('dynamodb', endpoint_url=ENDPOINT_DYNAMO, config=config)
table = dynamo.create_table(
TableName=TABLE_NAME,
KeySchema=[{ "AttributeName": 'id', "KeyType": 'HASH' }],
AttributeDefinitions=[{ "AttributeName": 'id', "AttributeType": 'S' }],
ProvisionedThroughput={
"ReadCapacityUnits": 10,
"WriteCapacityUnits": 10
}
)
table.wait_until_exists()
for mock in mocks:
response = table.put_item(Item=mock)
print('item created: ', response)
def main():
dynamo_setup()
if __name__ == '__main__':
main()
谢谢!
我正在尝试访问一个使用boto API在本地dynamoDB示例上创建的表。
1条答案
按热度按时间yhuiod9q1#
这是因为DynamoDB Local为您使用的每个访问密钥凭据设置了一个目录。克服这个问题的最简单方法是使用
sharedDB
选项,无论您使用什么凭据,它都会为您提供一个数据库。如果使用-sharedDb选项,DynamoDB会创建一个名为shared-local-instance.db的数据库文件。连接到DynamoDB的每个程序都会访问此文件。如果删除该文件,则会丢失其中存储的所有数据。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.UsageNotes.html
docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb