TypeScript Agent para Banco de Dados Relacional
O gerador connection conecta um TypeScript Agent a um projeto de Banco de Dados Relacional, disponibilizando um cliente Prisma dentro da sua fábrica de agente.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de usar este gerador, certifique-se de ter:
Executar o Gerador
Seção intitulada “Executar o Gerador”- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
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:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
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-runSelecione seu projeto Agent como origem e seu projeto de banco de dados relacional como destino. Se o projeto contiver múltiplos componentes de agente, especifique sourceComponent para desambiguar.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| sourceProject Obrigatório | string | - | O projeto de origem |
| targetProject Obrigatório | string | - | O projeto de destino para conectar |
| sourceComponent | string | - | O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem. |
| targetComponent | string | - | O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador modifica dois arquivos no diretório de origem do seu agente:
Directorypackages/my-service/src/my-agent
- agent.ts Cliente Prisma buscado dentro de
getAgente disponível para ferramentas - Dockerfile Pacote CA do RDS instalado para conexões SSL ao Aurora
- agent.ts Cliente Prisma buscado dentro de
Além disso, o alvo <agent-name>-serve-local do agente é atualizado para depender do alvo serve-local do banco de dados.
Como Funciona
Seção intitulada “Como Funciona”O cliente Prisma é instanciado dentro de getAgent(). Como o gerador ts#agent configura um único Agent por sessão, o cliente também é reutilizado durante o tempo de vida da sessão.
Definição do Agente
Seção intitulada “Definição do Agente”getAgent é atualizado para importar e chamar o getter do Prisma no início de seu 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 */ });};Múltiplos Bancos de Dados
Seção intitulada “Múltiplos Bancos de Dados”Executar o gerador novamente com um destino diferente adiciona o segundo banco de dados junto com o primeiro:
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 */ });};Infraestrutura
Seção intitulada “Infraestrutura”O construto de agente gerado implementa IGrantable e IConnectable, então você pode conceder acesso de rede e IAM ao banco de dados diretamente no construto.
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 abre a regra do grupo de segurança para que o runtime do agente possa alcançar a porta do banco de dados. grantConnect concede permissão IAM rds-db:connect à função de execução do agente.
Passe as saídas do módulo do banco de dados para o módulo do seu agente para que ele possa alcançar o banco de dados e ler sua configuração de 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}Certifique-se de que a função de execução do agente tenha permissão rds-db:connect e que seu grupo de segurança possa alcançar o grupo de segurança do banco de dados na porta do banco de dados.
Requisitos SSL ao Conectar Sem RDS Proxy
Seção intitulada “Requisitos SSL ao Conectar Sem RDS Proxy”Desenvolvimento Local
Seção intitulada “Desenvolvimento 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>Isso inicia o agente e todos os bancos de dados conectados. A variável de ambiente SERVE_LOCAL=true faz com que cada cliente Prisma se conecte ao seu banco de dados Docker local em vez do Aurora.