Python アプリケーションを使用して Amazon DynamoDB の PynamoDB モデルと CRUD 関数を自動的に生成する DynamoDB - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Python アプリケーションを使用して Amazon DynamoDB の PynamoDB モデルと CRUD 関数を自動的に生成する DynamoDB

作成者: Vijit Vashishtha (AWS)、Dheeraj Alimchandani (AWS)、Dhananjay Karanjkar (AWS)

コードリポジトリ: amazon-reverse-engineer-dynamodb

環境:PoC またはパイロット

テクノロジー:ソフトウェア開発とテスト、データベース、 DevOps

ワークロード:オープンソース

AWS サービス:Amazon DynamoDB

[概要]

Amazon DynamoDB データベースオペレーションを効率的に実行するには、エンティティを要求し、作成、読み取り、更新、削除 (CRUD) オペレーション関数が必要になるのが一般的です。PynamoDB は Python 3 をサポートする Python ベースのインターフェイスです。また、Amazon DynamoDB トランザクションのサポート、属性値の自動シリアル化と逆シリアル化、Flask や Django などの一般的な Python フレームワークとの互換性などの機能も提供します。このパターンは、PynamoDB モデルと CRUD オペレーション関数の自動作成を効率化するライブラリを提供することで、Python と DynamoDB を使用するデベロッパーに役立ちます。 PynamoDB データベーステーブルに不可欠な CRUD 関数を生成しますが、Amazon DynamoDB テーブルから PynamoDB モデルと CRUD 関数をリバースエンジニアリングすることもできます。 DynamoDB このパターンは、Python ベースのアプリケーションを使用してデータベース操作を簡素化するように設計されています。

このソリューションの主な機能は次のとおりです。

  • PynamoDB モデルへの JSON スキーマ – JSON スキーマファイルをインポートして、Python で PynamoDB モデルを自動的に生成します。

  • CRUD 関数の生成 – DynamoDB テーブルで CRUD オペレーションを実行するための関数を自動的に生成します。

  • DynamoDB からのリバースエンジニアリング – PynamoDB オブジェクトリレーショナルマッピング (ORM) を使用して、既存の Amazon DynamoDB テーブルの PynamoDB モデルと CRUD 関数をリバースエンジニアリングします。 DynamoDB

前提条件と制限

前提条件 

  • アクティブなAWS アカウント

  • Python バージョン 3.8 以降、ダウンロード、インストール

  • Jinja2 バージョン 3.1.2 以降、ダウンロード、インストール

  • ORM を生成する Amazon DynamoDB テーブル

  • インストールおよび設定済みの AWS コマンドラインインターフェイス (AWS CLI)

  • インストール済みの PynamoDB バージョン 5.4.1 以降

アーキテクチャ

ターゲットテクノロジースタック

  • JSON スクリプト

  • Python アプリケーション

  • PynamoDB モデル

  • Amazon DynamoDB データベースインスタンス

ターゲット アーキテクチャ

Python アプリケーションを使用して DynamoDB テーブルから CRUD 関数と PynamoDB モデルを生成するアーキテクチャ図 DynamoDB
  1. 入力 JSON スキーマファイルを作成します。この JSON スキーマファイルは、 および CRUD 関数から PynamoDB モデルを作成する各 DynamoDB テーブルの属性を表します。 PynamoDB これには、次の 3 つの重要なキーが含まれています。

  2. Python アプリケーションを実行し、JSON スキーマファイルを入力として指定します。

  3. Python アプリケーションは JSON スキーマファイルを読み取ります。

  4. Python アプリケーションは DynamoDB テーブルに接続してスキーマとデータ型を取得します。アプリケーションは describe_table オペレーションを実行し、テーブルのキー属性とインデックス属性を取得します。

  5. Python アプリケーションは、JSON スキーマファイルと DynamoDB テーブルの属性を組み合わせます。Jinja テンプレートエンジンを使用して、PynamoDB モデルと対応する CRUD 関数を生成します。

  6. PynamoDB モデルにアクセスして、DynamoDB テーブルで CRUD オペレーションを実行します。

ツール

AWS サービス

  • Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。

その他のツール

  • Jinja は、 テンプレートを最適化された Python コードにコンパイルする拡張可能なテンプレートエンジンです。このパターンでは、Jinja を使用して、テンプレート内にプレースホルダーとロジックを埋め込むことで動的コンテンツを生成します。

  • PynamoDB は、Amazon DynamoDB 用の Python ベースのインターフェイスです。

  • Python」は汎用のコンピュータープログラミング言語です。

コードリポジトリ

このパターンのコードは、 GitHub 「PynamoDB モデルと CRUD 関数の自動生成」リポジトリにあります。リポジトリは、コントローラーパッケージと テンプレートの 2 つの主要部分に分かれています。

コントローラーパッケージ

コントローラー Python パッケージには、PynamoDB モデルと CRUD 関数の生成に役立つメインアプリケーションロジックが含まれています。以下の要素が含まれます。

  • input_json_validator.py – この Python スクリプトは、入力 JSON スキーマファイルを検証し、ターゲット DynamoDB テーブルのリストとそれぞれに必要な属性を含む Python オブジェクトを作成します。

  • dynamo_connection.py — このスクリプトは DynamoDB テーブルへの接続を確立し、 describe_tableオペレーションを使用して、PynamoDB モデルの作成に必要な属性を抽出します。

  • generate_model.py – このスクリプトには、入力 JSON スキーマファイルと describe_tableオペレーションに基づいて PynamoDB モデルGenerateModelを作成する Python クラスが含まれています。

  • generate_crud.py – JSON スキーマファイルで定義されている DynamoDB テーブルの場合、このスクリプトは GenerateCrudオペレーションを使用して Python クラスを作成します。

テンプレート

この Python ディレクトリには、次の Jinja テンプレートが含まれています。

  • model.jinja – この Jinja テンプレートには、PynamoDB モデルスクリプトを生成するためのテンプレート式が含まれています。

  • crud.jinja – この Jinja テンプレートには、CRUD 関数スクリプトを生成するためのテンプレート式が含まれています。

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

次のコマンドを入力して、PynamoDB モデルと CRUD 関数の自動生成リポジトリのクローンを作成します。

git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git
アプリ開発者

Python 環境を設定します。

  1. クローンされたリポジトリの最上位ディレクトリに移動します。

    cd amazon-reverse-engineer-dynamodb
  2. 次のコマンドを入力して、必要なライブラリとパッケージをインストールします。

    pip install -r requirements.txt
アプリ開発者
タスク説明必要なスキル

JSON スキーマファイルを変更します。

  1. クローンされたリポジトリの最上位ディレクトリに移動します。

    cd amazon-reverse-engineer-dynamodb
  2. 任意のエディタで test.json ファイルを開きます。このファイルをリファレンスとして使用して独自の JSON スキーマファイルを作成したり、このファイルの値を環境に合わせて更新したりできます。

  3. ターゲット DynamoDB テーブルの名前 AWS リージョン、属性値を変更します。

    : JSON スキーマファイルに存在しないテーブルを定義した場合、このソリューションはそのテーブルのモデルや CRUD 関数を生成しません。

  4. test.json ファイルを保存して閉じます。このファイルは新しい名前で保存することをお勧めします。

アプリ開発者

Python アプリケーションを実行します。

次のコマンドを入力して、PynamoDB モデルと CRUD 関数を生成します。ここで、 <input_schema.json>は JSON スキーマファイルの名前です。

python main.py --file <input_schema.json>
アプリ開発者
タスク説明必要なスキル

生成された PynamoDB モデルを検証します。

  1. クローンされたリポジトリの最上位ディレクトリで、次のコマンドを入力してmodelsリポジトリに移動します。

    cd models
  2. デフォルトでは、このソリューションは PynamoDB モデルファイル に名前を付けますdemo_model.py。このファイルが存在することを検証します。

アプリ開発者

生成された CRUD 関数を確認します。

  1. クローンされたリポジトリの最上位ディレクトリで、次のコマンドを入力してcrudリポジトリに移動します。

    cd crud
  2. デフォルトでは、このソリューションはスクリプト に名前を付けますdemo_crud.py。このファイルが存在することを検証します。

  3. demo_crud.py ファイル内の Python クラスを使用して、ターゲット DynamoDB テーブルに対して CRUD オペレーションを実行します。オペレーションが正常に完了したことを確認します。

アプリ開発者

関連リソース

追加情報

JSON スキーマファイルのサンプル属性

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