Aller au contenu

API tRPC vers DynamoDB

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

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

  1. Un projet API tRPC (généré avec ts#api)
  2. Un projet ts#dynamodb
  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - connection
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Sélectionnez votre projet d’API tRPC comme source et votre projet DynamoDB comme cible.

    Paramètre Type Par défaut Description
    sourceProject Requis string - Le projet source
    targetProject Requis string - 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 boolean true Indique 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 fichier project.json de votre API tRPC pour ajouter une dépendance de sa cible dev vers la cible dev du projet DynamoDB. Aucun fichier source n’est modifié.

    Importez les factories d’entités depuis le package DynamoDB et utilisez-les dans vos procédures tRPC :

    packages/api/src/procedures/example.ts
    import { createExampleEntity } from ':my-scope/my-table';
    import { publicProcedure } from '../init.js';
    export const listExamples = publicProcedure
    .query(async () => {
    const entity = await createExampleEntity();
    const result = await entity.scan.go();
    return result.data;
    });

    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 getDynamoDBClient() et resolveTableName() se connectent à l’instance locale DynamoDB Local au lieu d’AWS.