Agent TypeScript Strands vers Base de Données Relationnelle
Le générateur connection connecte un Agent TypeScript Strands à un projet de Base de Données Relationnelle, rendant un client Prisma disponible à l’intérieur de votre factory d’agent.
Prérequis
Section intitulée « Prérequis »Avant d’utiliser ce générateur, assurez-vous d’avoir :
- Un projet
ts#strands-agent - Un projet
ts#rdb
Utilisation
Section intitulée « Utilisation »Exécuter le Générateur
Section intitulée « Exécuter le Générateur »- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - connection - Remplissez les paramètres requis
- Cliquez sur
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runSélectionnez votre projet Strands Agent comme source et votre projet de base de données relationnelle comme cible. Si le projet contient plusieurs composants d’agent, spécifiez sourceComponent pour lever l’ambiguïté.
| 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. |
Sortie du Générateur
Section intitulée « Sortie du Générateur »Le générateur modifie un seul fichier :
Répertoirepackages/my-service/src/my-agent
- agent.ts Client Prisma récupéré dans
getAgentet disponible pour les outils
- agent.ts Client Prisma récupéré dans
De plus, la cible <agent-name>-serve-local de l’agent est mise à jour pour dépendre de la cible serve-local de la base de données.
Comment ça Fonctionne
Section intitulée « Comment ça Fonctionne »Le client Prisma est récupéré directement à l’intérieur de getAgent() plutôt que d’être passé à travers les paramètres de fonction. Cela s’aligne avec la façon dont le runtime strands-agent propage le contexte de session — withSessionId enveloppe getAgent et met en cache une instance Agent par session, donc getPrisma() est appelé au maximum une fois par session.
Définition de l’Agent
Section intitulée « Définition de l’Agent »getAgent est mis à jour pour importer et appeler le getter Prisma au début de son corps :
import { getPrisma as getMyDb } from ':my-scope/my-db';
export const getAgent = async () => { const myDb = await getMyDb(); return new Agent({ /* use myDb in tools */ });};Bases de Données Multiples
Section intitulée « Bases de Données Multiples »Exécuter le générateur à nouveau avec une cible différente ajoute la deuxième base de données à côté de la première :
import { getPrisma as getMyDb } from ':my-scope/my-db';import { getPrisma as getOtherDb } from ':my-scope/other-db';
export const getAgent = async () => { const myDb = await getMyDb(); const otherDb = await getOtherDb(); return new Agent({ /* use both clients in tools */ });};Infrastructure
Section intitulée « Infrastructure »Le construct d’agent généré implémente IGrantable et IConnectable, vous pouvez donc accorder l’accès réseau et IAM à la base de données directement sur le construct.
import { MyDatabase } from ':my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });const myAgent = new MyAgent(this, 'MyAgent', { vpc, ... });
db.allowDefaultPortFrom(myAgent);db.grantConnect(myAgent);allowDefaultPortFrom ouvre la règle du groupe de sécurité afin que le runtime de l’agent puisse atteindre le port de la base de données. grantConnect accorde la permission IAM rds-db:connect au rôle d’exécution de l’agent.
Passez les sorties du module de base de données dans votre module d’agent afin qu’il puisse atteindre la base de données et lire sa configuration d’exécution :
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = module.vpc.vpc_id database_subnet_ids = module.vpc.private_isolated_subnet_ids}
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent"
appconfig_application_id = module.my_database.appconfig_application_id database_cluster_resource_id = module.my_database.cluster_resource_id database_runtime_user = module.my_database.database_runtime_user database_security_group_id = module.my_database.security_group_id database_port = module.my_database.cluster_port}Assurez-vous que le rôle d’exécution de l’agent a la permission rds-db:connect et que son groupe de sécurité peut atteindre le groupe de sécurité de la base de données sur le port de la base de données.
Développement Local
Section intitulée « Développement Local »pnpm nx <agent-name>-serve-local <project-name>yarn nx <agent-name>-serve-local <project-name>npx nx <agent-name>-serve-local <project-name>bunx nx <agent-name>-serve-local <project-name>Cela démarre l’agent et toutes les bases de données connectées. La variable d’environnement SERVE_LOCAL=true fait en sorte que chaque client Prisma se connecte à sa base de données Docker locale au lieu d’Aurora.