query dynamodb python amazon-dynamodb dynamo-local

python - dynamodb - boto3 query



Localhost Endpoint to DynamoDB Local con Boto3 (4)

Aunque Amazon proporciona documentación sobre cómo conectarse a dynamoDB local con Java, PHP y .Net, no hay una descripción de cómo conectarse a localhost: 8000 usando Python. La documentación existente en la web apunta al uso del método DynamoDBConnection dentro de boto.dynamodb2.layer1, pero esto crea una incompatibilidad entre los entornos en vivo y de prueba que usan el protocolo boto3 para administrar dynamoDB.

En boto3, puede realizar una solicitud de dinamo utilizando el siguiente constructor y las variables establecidas en el entorno:

client = boto3.client(''dynamodb'') table = client.list_tables()

Mientras que el paquete boto.dynamodb2.layer1 requiere que construyas lo siguiente:

client = DynamoDBConnection( host=''localhost'', port=8000, aws_access_key_id=''anything'', aws_secret_access_key=''anything'', is_secure=False) table = client.list_tables()

Aunque es posible crear una lógica que determine el constructor adecuado en función del entorno local, desconfío de crear un conjunto de métodos que traten a cada constructor como si fuera el mismo. En su lugar, preferiría usar boto3 para todo y poder establecer el punto final para dynamoDB en las variables ambientales. Desafortunadamente, esa opción no parece estar actualmente disponible.

¿Hay alguna forma de utilizar boto3 para definir un punto final local dynamoDB (como los otros idiomas)? ¿O alguna posibilidad de que Amazon planee apoyar esta característica?


Es compatible con DynamoDB Local. Solo necesita establecer el punto final apropiado, como puede hacer con los SDK de otros idiomas

Aquí hay un fragmento de código de cómo puede usar la interfaz de recursos y clientes de boto3 a través de DynamoDB Local:

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()))


Este es el tutorial de Python DynamoDb. Muestra cómo conectarse a una instancia local.

http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.01.html

Parece que los parámetros mínimos requeridos son los siguientes con la ayuda de la configuración de aws (abajo).

dynamodb = boto3.resource(''dynamodb'', endpoint_url=''http://localhost:8000/'')

Los parámetros de región, clave de acceso y clave secreta pueden omitirse al configurar los parámetros de perfil mediante el comando aws configure (requiere instalar aws cli). Sin embargo, puede crear archivos de configuración aws manualmente en su hogar (en caso de que no quiera usar aws cli).

archivo ~ / .aws / config

[default] output = json region = anywhere

archivo ~ / .aws / credenciales

[default] aws_access_key_id = whatever_id aws_secret_access_key = whatever_key

Puede consultar la configuración de aws en http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

Tenga en cuenta que en la region desarrollo de DynamoDb local, los valores aws_access_key_id y aws_secret_access_key en esos archivos pueden ser cualquier cosa. Pero si desea utilizar aws cli con AWS, debe poner la región válida, la identificación válida y las claves. Están disponibles cuando se registra en los servicios de AWS.

Más información, cuando llames.

db = boto3.client(''dynamodb'')

El host con el que se conecta boto3 se basará en el parámetro de region , por ejemplo, region=us-west-1 cuando se llame por encima de la API, se conectará a dynamodb.us-west-1.amazonaws.com . Sin embargo, cuando se pasa el parámetro endpoint_url la region no se utilizará. Para obtener más lista de puntos finales de AWS, visite http://docs.aws.amazon.com/general/latest/gr/rande.html .


Nota: deseará extender la respuesta anterior para incluir la región. He adjuntado al código de Kyle arriba. Si su intento inicial es recibido con un error de región, esto devolverá la respuesta ''[]'' apropiada.

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()))


use la clave de acceso ficticia y la identificación, de lo contrario lanzará una excepción al ejecutar los métodos.

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")