Aller au contenu

TypeScript Agent vers DynamoDB

Le générateur connection relie un TypeScript Agent à un projet TypeScript 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 ts#agent
  2. Un projet ts#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 Agent comme source et votre projet DynamoDB comme cible. Si le projet contient plusieurs composants agent, spécifiez sourceComponent pour lever l’ambiguïté.

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 la cible <agent-name>-dev de l’agent dans project.json pour dépendre de 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 votre définition d’agent :

packages/my-service/src/my-agent/agent.ts
import { createExampleEntity } from '@my-scope/my-table';
export const getAgent = async () => {
// ...
return new Agent({
tools: [
tool({
name: 'list_examples',
description: 'List all example items',
func: async () => {
const entity = await createExampleEntity();
const result = await entity.scan.go();
return result.data;
},
}),
],
});
};

Pour permettre à la fonction Lambda de l’agent d’accéder à la table DynamoDB, accordez les permissions nécessaires dans votre infrastructure.

packages/infra/src/stacks/application-stack.ts
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');
const myAgent = new MyAgent(this, 'MyAgent');
table.grantReadWriteData(myAgent);

grantReadWriteData accorde à la fois les permissions DynamoDB et KMS au rôle d’exécution de l’agent.

Le générateur connection configure la cible dev de votre projet pour dépendre 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.