Skip to content

FastAPI から DynamoDB へ

connection ジェネレーターは、FastAPIPython DynamoDB プロジェクトに接続し、両方が自動的に一緒に起動するようにローカル開発を構成します。

このジェネレーターを使用する前に、以下を確認してください:

  1. FastAPI プロジェクト(py#api --framework=fastapi で生成)、py#api ガイドを参照
  2. py#dynamodb プロジェクト

このジェネレーターを実行@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
コマンドを組み立てる5

必須

必須

FastAPI プロジェクトをソースとして、DynamoDB プロジェクトをターゲットとして選択します。

ジェネレーターオプション5 オプション
sourceProject必須string

ソース プロジェクト

targetProject必須string

接続先のターゲット プロジェクト

sourceComponentstring

接続元のソースコンポーネント(コンポーネント名、ソースプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。

targetComponentstring

接続先のターゲットコンポーネント(コンポーネント名、ターゲットプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。

preferInstallDependenciesbooleanデフォルト: true

ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

ジェネレーターは、FastAPI の project.json を更新して、その dev ターゲットから DynamoDB プロジェクトの dev ターゲットへの依存関係を追加し、DynamoDB パッケージをワークスペース依存関係として追加します。ソースファイルは変更されません。

ルートハンドラーでの DynamoDB の使用

Section titled “ルートハンドラーでの DynamoDB の使用”

DynamoDB パッケージからエンティティクラスをインポートし、ルートハンドラー内で使用します:

packages/my_api/my_api/api.py
from my_scope_my_table.entities.example import ExampleModel
@app.get("/examples")
def list_examples():
return list(ExampleModel.scan())

Lambda 関数が DynamoDB テーブルにアクセスできるようにするには、インフラストラクチャで必要な権限を付与します。

テーブルコンストラクトで grantReadWriteData を呼び出します。これにより、Lambda 実行ロールに必要な DynamoDB と KMS の両方の権限が付与されます:

packages/infra/src/stacks/application-stack.ts
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');
const api = new Api(this, 'Api', {
integrations: Api.defaultIntegrations(this).build(),
});
Object.entries(api.integrations).forEach(([, integration]) => {
table.grantReadWriteData(integration.handler);
});

connection ジェネレーターは、プロジェクトの dev ターゲットが DynamoDB プロジェクトの dev ターゲットに依存するように設定します。dev を実行すると、DynamoDB Local がプロジェクトと一緒に自動的に起動します。

LOCAL_DEV=true 環境変数は自動的に設定されるため、is_local()True を返し、PynamoDB エンティティは AWS ではなくローカルの DynamoDB インスタンスに接続します。