Automatisches Generieren eines PynamoDB-Modells und CRUD-Funktionen für Amazon DynamoDB mithilfe einer Python-Anwendung - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Automatisches Generieren eines PynamoDB-Modells und CRUD-Funktionen für Amazon DynamoDB mithilfe einer Python-Anwendung

Erstellt von Vijit Vashishtha (AWS), Dheeraj Alimchandani (AWS) und Dhananjay Karanjkar (AWS)

Code-Repository: amazon-reverse-engineer-dynamodb

Umgebung: PoC oder Pilotprojekt

Technologien: DevelopmentAndTesting; Datenbanken; DevOps

Arbeitslast: Open Source

AWS-Dienste: Amazon DynamoDB

Übersicht

Es ist üblich, Entitäten und CRUD-Operationsfunktionen (Create, Read, Update and Delete) zu verlangen, um Amazon DynamoDB DynamoDB-Datenbankoperationen effizient durchzuführen. PynamoDB ist eine Python-basierte Schnittstelle, die Python 3 unterstützt. Es bietet auch Funktionen wie Unterstützung für Amazon DynamoDB-Transaktionen, automatische Serialisierung und Deserialisierung von Attributwerten sowie Kompatibilität mit gängigen Python-Frameworks wie Flask und Django. Dieses Muster hilft Entwicklern, die mit Python und DynamoDB arbeiten, indem es eine Bibliothek bereitstellt, die die automatische Erstellung von PynamoDB-Modellen und CRUD-Betriebsfunktionen optimiert. Es generiert zwar wichtige CRUD-Funktionen für Datenbanktabellen, kann aber auch PynamoDB-Modelle und CRUD-Funktionen aus Amazon DynamoDB-Tabellen zurückentwickeln. Dieses Muster wurde entwickelt, um Datenbankoperationen mithilfe einer Python-basierten Anwendung zu vereinfachen.

Im Folgenden sind die Hauptmerkmale dieser Lösung aufgeführt:

  • JSON-Schema zu PynamoDB-Modell — Generieren Sie automatisch PynamoDB-Modelle in Python, indem Sie eine JSON-Schemadatei importieren.

  • Generierung von CRUD-Funktionen — Generieren Sie automatisch Funktionen zur Ausführung von CRUD-Operationen in DynamoDB-Tabellen.

  • Reverse Engineering von DynamoDB — Verwenden Sie PynamoDB Object-Relational Mapping (ORM), um PynamoDB-Modelle und CRUD-Funktionen für bestehende Amazon DynamoDB-Tabellen zurückzuentwickeln.

Voraussetzungen und Einschränkungen

Voraussetzungen

Architektur

Zieltechnologie-Stack

  • JSON-Skript

  • Python-Anwendung

  • PynamoDB-Modell

  • Amazon DynamoDB DynamoDB-Datenbank-Instance

Zielarchitektur

Verwenden einer Python-App zum Generieren von CRUD-Funktionen und eines PynamoDB-Modells aus DynamoDB-Tabellen.
  1. Sie erstellen eine Eingabe-JSON-Schemadatei. Diese JSON-Schemadatei stellt die Attribute der jeweiligen DynamoDB-Tabellen dar, aus denen Sie PynamoDB-Modelle und CRUD-Funktionen erstellen möchten. Sie enthält die folgenden drei wichtigen Schlüssel:

  2. Führen Sie die Python-Anwendung aus und geben Sie die JSON-Schemadatei als Eingabe an.

  3. Die Python-Anwendung liest die JSON-Schemadatei.

  4. Die Python-Anwendung stellt eine Verbindung zu den DynamoDB-Tabellen her, um das Schema und die Datentypen abzuleiten. Die Anwendung führt den Vorgang describe_table aus und ruft die Schlüssel- und Indexattribute für die Tabelle ab.

  5. Die Python-Anwendung kombiniert die Attribute aus der JSON-Schemadatei und der DynamoDB-Tabelle. Es verwendet die Jinja-Template-Engine, um ein PynamoDB-Modell und entsprechende CRUD-Funktionen zu generieren.

  6. Sie greifen auf das PynamoDB-Modell zu, um CRUD-Operationen in der DynamoDB-Tabelle durchzuführen.

Tools

AWS-Services

  • Amazon DynamoDB ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.

Andere Tools

  • Jinja ist eine erweiterbare Templating-Engine, die Vorlagen zu optimiertem Python-Code kompiliert. Dieses Muster verwendet Jinja, um dynamische Inhalte zu generieren, indem Platzhalter und Logik in Vorlagen eingebettet werden.

  • PynamoDB ist eine Python-basierte Schnittstelle für Amazon DynamoDB.

  • Python ist eine Allzweck-Computerprogrammiersprache.

Code-Repository

Der Code für dieses Muster ist im Repository für GitHub automatisch generierte PynamoDB-Modelle und CRUD-Funktionen verfügbar. Das Repository ist in zwei Hauptteile unterteilt: das Controller-Paket und die Vorlagen.

Controller-Paket

Das Controller-Python-Paket enthält die Hauptanwendungslogik, die bei der Generierung des PynamoDB-Modells und der CRUD-Funktionen hilft. Sie enthält Folgendes:

  • input_json_validator.py— Dieses Python-Skript validiert die Eingabe-JSON-Schemadatei und erstellt die Python-Objekte, die die Liste der DynamoDB-Zieltabellen und die jeweils erforderlichen Attribute enthalten.

  • dynamo_connection.py— Dieses Skript stellt eine Verbindung zur DynamoDB-Tabelle her und verwendet die describe_table Operation, um die Attribute zu extrahieren, die für die Erstellung des PynamoDB-Modells erforderlich sind.

  • generate_model.py— Dieses Skript enthält eine Python-KlasseGenerateModel, die das PynamoDB-Modell auf der Grundlage der Eingabe-JSON-Schemadatei und der Operation erstellt. describe_table

  • generate_crud.py— Für die DynamoDB-Tabellen, die in der JSON-Schemadatei definiert sind, verwendet dieses Skript den GenerateCrud Vorgang, um die Python-Klassen zu erstellen.

Vorlagen

Dieses Python-Verzeichnis enthält die folgenden Jinja-Vorlagen:

  • model.jinja— Diese Jinja-Vorlage enthält den Vorlagenausdruck für die Generierung des PynamoDB-Modellskripts.

  • crud.jinja— Diese Jinja-Vorlage enthält den Vorlagenausdruck für die Generierung des CRUD-Funktionsskripts.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Geben Sie den folgenden Befehl ein, um das Repository für automatisch generierte PynamoDB-Modelle und CRUD-Funktionen zu klonen.

git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git
App-Developer

Richten Sie die Python-Umgebung ein.

  1. Navigieren Sie in das Verzeichnis der obersten Ebene im geklonten Repository.

    cd amazon-reverse-engineer-dynamodb
  2. Geben Sie den folgenden Befehl ein, um die erforderlichen Bibliotheken und Pakete zu installieren.

    pip install -r requirements.txt
App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Ändern Sie die JSON-Schemadatei.

  1. Navigieren Sie in das Verzeichnis der obersten Ebene im geklonten Repository.

    cd amazon-reverse-engineer-dynamodb
  2. Öffnen Sie die test.json Datei in Ihrem bevorzugten Editor. Sie können diese Datei als Referenz verwenden, um Ihre eigene JSON-Schemadatei zu erstellen, oder Sie können die Werte in dieser Datei an Ihre Umgebung anpassen.

  3. Ändern Sie den Namen und AWS-Region die Attributwerte für Ihre DynamoDB-Zieltabellen.

    Hinweis: Wenn Sie eine Tabelle definieren, die in der JSON-Schemadatei nicht vorhanden ist, generiert diese Lösung keine Modelle oder CRUD-Funktionen für diese Tabelle.

  4. Speichern und schließen Sie die Datei test.json. Wir empfehlen, dass Sie diese Datei unter einem neuen Namen speichern.

App-Developer

Führen Sie die Python-Anwendung aus.

Geben Sie den folgenden Befehl ein, um die PynamoDB-Modelle und CRUD-Funktionen zu generieren, wobei der Name Ihrer JSON-Schemadatei <input_schema.json> steht.

python main.py --file <input_schema.json>
App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Überprüfen Sie das generierte PynamoDB-Modell.

  1. Geben Sie im obersten Verzeichnis des geklonten Repositorys den folgenden Befehl ein, um zum Repository zu navigieren. models

    cd models
  2. Standardmäßig benennt diese Lösung die PynamoDB-Modelldatei. demo_model.py Stellen Sie sicher, dass diese Datei vorhanden ist.

App-Developer

Überprüfen Sie die generierten CRUD-Funktionen.

  1. Geben Sie im obersten Verzeichnis des geklonten Repositorys den folgenden Befehl ein, um zum Repository zu navigieren. crud

    cd crud
  2. Standardmäßig benennt diese Lösung das Skript. demo_crud.py Stellen Sie sicher, dass diese Datei vorhanden ist.

  3. Verwenden Sie die Python-Klassen in der demo_crud.py Datei, um eine CRUD-Operation in der DynamoDB-Zieltabelle durchzuführen. Vergewissern Sie sich, dass der Vorgang erfolgreich abgeschlossen wurde.

App-Developer

Zugehörige Ressourcen

Zusätzliche Informationen

Beispielattribute für die JSON-Schemadatei

[ { "name": "test_table", "region": "ap-south-1", "attributes": [ { "name": "id", "type": "UnicodeAttribute" }, { "name": "name", "type": "UnicodeAttribute" }, { "name": "age", "type": "NumberAttribute" } ] } ]