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

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

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

Vijit Vashishtha、Dheeraj Alimchandani、Dhananjay Karanjkar (Amazon Web Services)

概要

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

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

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

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

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

前提条件と制限

前提条件

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

  • Python バージョン 3.8 以降がダウンロードおよびインストールされている

  • Jinja2 バージョン 3.1.2 以降がダウンロードおよびインストールされている

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

  • AWS Command Line Interface (AWS CLI)、インストールおよび設定済み

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

アーキテクチャ

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

  • JSON スクリプト

  • Python アプリケーション

  • PynamoDB モデル

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

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

Python アプリを使用して、DynamoDB テーブルから CRUD 関数と PynamoDB モデルを生成します。
  1. 入力 JSON スキーマファイルを作成します。この JSON スキーマファイルは、PynamoDB モデルの作成元および CRUD 関数の作成先となるそれぞれの DynamoDB テーブルの属性を表します。これには、次の 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 Auto-generate PynamoDB models and CRUD functions リポジトリで入手できます。このリポジトリは、コントローラーパッケージとテンプレートの 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 モデルを作成する Python クラス GenerateModel が含まれています。

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

テンプレート

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

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

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

エピック

タスク説明必要なスキル

リポジトリのクローン作成

次のコマンドを入力して、Auto-generate PynamoDB models and CRUD functions リポジトリのクローンを作成します。

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" } ] } ]