TypeScript Agent a Database Relazionale
Il generatore connection collega un TypeScript Agent a un progetto Relational Database, rendendo disponibile un client Prisma all’interno della tua agent factory.
Prerequisiti
Sezione intitolata “Prerequisiti”Prima di utilizzare questo generatore, assicurati di avere:
Utilizzo
Sezione intitolata “Utilizzo”Eseguire il Generatore
Sezione intitolata “Eseguire il Generatore”- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
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:connectionPuoi anche eseguire una prova per vedere quali file verrebbero modificati
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-runSeleziona il tuo progetto Agent come sorgente e il tuo progetto di database relazionale come destinazione. Se il progetto contiene più componenti agent, specifica sourceComponent per disambiguare.
Opzioni
Sezione intitolata “Opzioni”| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| sourceProject Obbligatorio | string | - | Il progetto sorgente |
| targetProject Obbligatorio | string | - | Il progetto di destinazione a cui connettersi |
| sourceComponent | string | - | Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente. |
| targetComponent | string | - | Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione. |
Output del Generatore
Sezione intitolata “Output del Generatore”Il generatore modifica due file nella directory sorgente del tuo agent:
Directorypackages/my-service/src/my-agent
- agent.ts Client Prisma recuperato all’interno di
getAgente disponibile per i tools - Dockerfile Bundle CA RDS installato per connessioni SSL ad Aurora
- agent.ts Client Prisma recuperato all’interno di
Inoltre, il target <agent-name>-serve-local dell’agent viene aggiornato per dipendere dal target serve-local del database.
Come Funziona
Sezione intitolata “Come Funziona”Il client Prisma viene istanziato all’interno di getAgent(). Poiché il generatore ts#agent configura un singolo Agent per sessione, il client viene anche riutilizzato per la durata della sessione.
Definizione dell’Agent
Sezione intitolata “Definizione dell’Agent”getAgent viene aggiornato per importare e chiamare il getter Prisma all’inizio del suo corpo:
import { getPrisma as getMyDb } from ':my-scope/my-db';
export const getAgent = async () => { const myDb = await getMyDb(); // ... return new Agent({ /* use myDb in tools */ });};Database Multipli
Sezione intitolata “Database Multipli”Eseguire nuovamente il generatore con una destinazione diversa aggiunge il secondo database accanto al primo:
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 */ });};Infrastruttura
Sezione intitolata “Infrastruttura”Il costrutto agent generato implementa IGrantable e IConnectable, quindi puoi concedere l’accesso di rete e IAM al database direttamente sul costrutto.
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 apre la regola del security group in modo che il runtime dell’agent possa raggiungere la porta del database. grantConnect concede il permesso IAM rds-db:connect al ruolo di esecuzione dell’agent.
Passa gli output del modulo database nel tuo modulo agent in modo che possa raggiungere il database e leggere la sua configurazione di runtime:
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}Assicurati che il ruolo di esecuzione dell’agent abbia il permesso rds-db:connect e che il suo security group possa raggiungere il security group del database sulla porta del database.
Requisiti SSL per la Connessione Senza RDS Proxy
Sezione intitolata “Requisiti SSL per la Connessione Senza RDS Proxy”Sviluppo Locale
Sezione intitolata “Sviluppo Locale”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>Questo avvia l’agent e tutti i database connessi. La variabile d’ambiente SERVE_LOCAL=true fa sì che ogni client Prisma si connetta al suo database Docker locale invece che ad Aurora.