Bỏ qua để đến nội dung

TypeScript Agent đến Cơ sở dữ liệu Quan hệ

Generator connection kết nối một TypeScript Agent với một dự án Relational Database, cung cấp Prisma client bên trong agent factory của bạn.

Trước khi sử dụng generator này, hãy đảm bảo bạn có:

  1. Một dự án ts#agent
  2. Một dự án ts#rdb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Bạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Chọn dự án Agent của bạn làm nguồn và dự án cơ sở dữ liệu quan hệ của bạn làm đích. Nếu dự án chứa nhiều agent component, hãy chỉ định sourceComponent để phân biệt.

Tham sốKiểuMặc địnhMô tả
sourceProject Bắt buộcstring-Dự án nguồn
targetProject Bắt buộcstring-Dự án đích để kết nối tới
sourceComponent string-Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
targetComponent string-Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.
preferInstallDependencies booleantrueCó nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

Generator sửa đổi hai file trong thư mục nguồn của agent:

  • Thư mụcpackages/my-service/src/my-agent
    • agent.ts Prisma client được lấy bên trong getAgent và có sẵn cho các tool
    • Dockerfile RDS CA bundle được cài đặt cho kết nối SSL đến Aurora

Ngoài ra, target <agent-name>-dev của agent được cập nhật để phụ thuộc vào target dev của cơ sở dữ liệu.

Sử dụng Cơ sở dữ liệu trong Agent Tools

Phần tiêu đề “Sử dụng Cơ sở dữ liệu trong Agent Tools”

Prisma client được khởi tạo bên trong getAgent(). Vì generator ts#agent cấu hình một Agent duy nhất cho mỗi phiên, client cũng được tái sử dụng trong suốt vòng đời của phiên:

packages/my-service/src/my-agent/agent.ts
import { getPrisma as getMyDb } from '@my-scope/my-db';
export const getAgent = async () => {
const myDb = await getMyDb();
// ...
return new Agent({ /* use myDb in tools */ });
};

Chạy generator lần nữa với một target khác sẽ thêm cơ sở dữ liệu thứ hai cùng với cơ sở dữ liệu đầu tiên:

packages/my-service/src/my-agent/agent.ts
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 */ });
};

Construct agent được tạo ra triển khai IGrantableIConnectable, vì vậy bạn có thể cấp quyền truy cập mạng và IAM cho cơ sở dữ liệu trực tiếp trên construct.

packages/infra/src/stacks/application-stack.ts
import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';
import { MyDatabase } from '@my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });
const myAgent = new MyAgent(this, 'MyAgent', {
networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, {
vpc,
vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS },
securityGroups: [
new SecurityGroup(this, 'MyAgentSecurityGroup', { vpc, allowAllOutbound: true }),
],
}),
});
db.allowDefaultPortFrom(myAgent);
db.grantConnect(myAgent);

allowDefaultPortFrom mở quy tắc security group để agent runtime có thể truy cập cổng cơ sở dữ liệu. grantConnect cấp quyền IAM rds-db:connect cho execution role của agent.

Yêu cầu SSL Khi Kết nối Không có RDS Proxy

Phần tiêu đề “Yêu cầu SSL Khi Kết nối Không có RDS Proxy”

Trình tạo kết nối cập nhật Dockerfile để cài đặt gói CA của Amazon RDS tại /usr/local/share/ca-certificates/rds-bundle.crt. Đặt NODE_EXTRA_CA_CERTS thành đường dẫn đó để Node.js tin tưởng chứng chỉ khi kết nối không qua RDS Proxy:

packages/infra/src/stacks/application-stack.ts
new MyAgent(this, 'MyAgent', {
...
environmentVariables: {
NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt',
},
});

Để biết thêm chi tiết, xem tài liệu Amazon RDS SSL/TLS. Khi sử dụng RDS Proxy, bạn không cần cấu hình NODE_EXTRA_CA_CERTS.

Terminal window
pnpm nx <agent-name>-dev <project-name>

Lệnh này khởi động agent và tất cả các cơ sở dữ liệu được kết nối. Biến môi trường LOCAL_DEV=true khiến mỗi Prisma client kết nối với cơ sở dữ liệu Docker cục bộ của nó thay vì Aurora.