翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
前提条件と制限
前提条件
アーキテクチャ
ターゲットテクノロジースタック
JSON スクリプト
Python アプリケーション
PynamoDB モデル
Amazon DynamoDB データベースインスタンス
ターゲット アーキテクチャ
![Python アプリケーションを使用して DynamoDB テーブルから CRUD 関数と PynamoDB モデルを生成するアーキテクチャ図 DynamoDB](images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)
入力 JSON スキーマファイルを作成します。この JSON スキーマファイルは、 および CRUD 関数から PynamoDB モデルを作成する各 DynamoDB テーブルの属性を表します。 PynamoDB これには、次の 3 つの重要なキーが含まれています。
name
- ターゲット DynamoDB テーブルの名前。region
– テーブルがホストされている AWS リージョンattributes
– パーティションキー (ハッシュ属性とも呼ばれます)、ソートキー 、ローカルセカンダリインデックス 、グローバルセカンダリインデックス 、非キー属性 など、ターゲットテーブルの一部である属性。このツールは、アプリケーションがターゲットテーブルから直接キー属性を取得するため、入力スキーマが非キー属性のみを提供することを想定しています。JSON スキーマファイルで属性を指定する方法の例については、このパターンの「追加情報」セクションを参照してください。
Python アプリケーションを実行し、JSON スキーマファイルを入力として指定します。
Python アプリケーションは JSON スキーマファイルを読み取ります。
Python アプリケーションは DynamoDB テーブルに接続してスキーマとデータ型を取得します。アプリケーションは describe_table
オペレーションを実行し、テーブルのキー属性とインデックス属性を取得します。 Python アプリケーションは、JSON スキーマファイルと DynamoDB テーブルの属性を組み合わせます。Jinja テンプレートエンジンを使用して、PynamoDB モデルと対応する CRUD 関数を生成します。
PynamoDB モデルにアクセスして、DynamoDB テーブルで CRUD オペレーションを実行します。
ツール
AWS サービス
Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
その他のツール
コードリポジトリ
このパターンのコードは、 GitHub 「PynamoDB モデルと CRUD 関数の自動生成
コントローラーパッケージ
コントローラー 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 関数の自動生成
| アプリ開発者 |
Python 環境を設定します。 |
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
JSON スキーマファイルを変更します。 |
| アプリ開発者 |
Python アプリケーションを実行します。 | 次のコマンドを入力して、PynamoDB モデルと CRUD 関数を生成します。ここで、
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
生成された PynamoDB モデルを検証します。 |
| アプリ開発者 |
生成された CRUD 関数を確認します。 |
| アプリ開発者 |
関連リソース
Amazon DynamoDB のコアコンポーネント (DynamoDB ドキュメント)
「セカンダリインデックスによるデータアクセスの改善」(DynamoDB ドキュメント)
追加情報
JSON スキーマファイルのサンプル属性
[ { "name": "test_table", "region": "ap-south-1", "attributes": [ { "name": "id", "type": "UnicodeAttribute" }, { "name": "name", "type": "UnicodeAttribute" }, { "name": "age", "type": "NumberAttribute" } ] } ]