docker 表创建成功,但dynamoDB找不到它boto3

b1zrtrql  于 2023-04-05  发布在  Docker
关注(0)|答案(1)|浏览(173)

我在python中创建了一个脚本,用于在dynamoDB中设置一个表。
dynamoDB示例在docker容器中本地运行。
当我调试脚本时,一切似乎都很好:配置正确,表状态为ACTIVEtable.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示例上创建的表。

yhuiod9q

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

相关问题