Aller au contenu

FastAPI vers DynamoDB

Le générateur connection relie un FastAPI à un projet Python DynamoDB, en configurant le développement local pour que les deux démarrent ensemble automatiquement.

Avant d’utiliser ce générateur, assurez-vous d’avoir :

  1. Un projet FastAPI (généré avec py#api --framework=fastapi), voir le guide py#api
  2. Un projet py#dynamodb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Sélectionnez votre projet FastAPI comme source et votre projet DynamoDB comme cible.

ParamètreTypePar défautDescription
sourceProject Requisstring-Le projet source
targetProject Requisstring-Le projet cible auquel se connecter
sourceComponent string-Le composant source depuis lequel se connecter (nom du composant, chemin relatif à la racine du projet source, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme source.
targetComponent string-Le composant cible auquel se connecter (nom du composant, chemin relatif à la racine du projet cible, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme cible.
preferInstallDependencies booleantrueIndique s'il faut privilégier l'installation des dépendances après l'exécution du générateur. Définir à false pour différer l'installation lors de l'exécution de plusieurs générateurs en lot (une installation s'exécute quand même si nécessaire pour que les générateurs suivants puissent calculer le graphe de projet Nx) ; installer une seule fois à la fin.

Le générateur met à jour le project.json du FastAPI pour ajouter une dépendance de sa cible dev vers la cible dev du projet DynamoDB, et ajoute le package DynamoDB comme dépendance de workspace. Aucun fichier source n’est modifié.

Utiliser DynamoDB dans les gestionnaires de routes

Section intitulée « Utiliser DynamoDB dans les gestionnaires de routes »

Importez les classes d’entités du package DynamoDB et utilisez-les dans vos gestionnaires de routes :

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())

Pour permettre aux fonctions Lambda d’accéder à la table DynamoDB, accordez les permissions nécessaires dans votre infrastructure.

Appelez grantReadWriteData sur le construct de la table. Cela accorde à la fois les permissions DynamoDB et KMS requises par le rôle d’exécution Lambda :

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);
});

Le générateur connection configure la cible dev de votre projet pour qu’elle dépende de la cible dev du projet DynamoDB. DynamoDB Local démarrera automatiquement en même temps que votre projet lors de l’exécution de dev.

La variable d’environnement LOCAL_DEV=true est définie automatiquement, de sorte que is_local() renvoie True et vos entités PynamoDB se connectent à l’instance DynamoDB locale au lieu d’AWS.