跳转到内容

TypeScript Agent 到 DynamoDB

connection 生成器将 TypeScript Agent 连接到 TypeScript DynamoDB 项目,配置本地开发环境使两者自动一起启动。

在使用此生成器之前,请确保您拥有:

  1. 一个 ts#agent 项目
  2. 一个 ts#dynamodb 项目

运行此生成器@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
构建你的命令5

必需

必需

选择您的 Agent 项目作为源,选择您的 DynamoDB 项目作为目标。如果项目包含多个 agent 组件,请指定 sourceComponent 以消除歧义。

生成器选项5 个选项
sourceProject必需string

源项目

targetProject必需string

要连接到的目标项目

sourceComponentstring

要连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。

targetComponentstring

要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。

preferInstallDependenciesboolean默认值: true

是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。

生成器会更新 agent 的 <agent-name>-dev 目标(在 project.json 中),使其依赖于 DynamoDB 项目的 dev 目标。不会修改任何源文件。

从 DynamoDB 包中导入实体工厂,并在您的 agent 定义中使用它们:

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

要允许 agent 的 Lambda 函数访问 DynamoDB 表,请在您的基础设施中授予必要的权限。

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 向 agent 的执行角色授予 DynamoDB 和 KMS 权限。

connection 生成器会配置您的项目的 dev 目标,使其依赖于 DynamoDB 项目的 dev 目标。当运行 dev 时,DynamoDB Local 将与您的项目一起自动启动。

LOCAL_DEV=true 环境变量会自动设置,因此 getDynamoDBClient()resolveTableName() 会连接到本地的 DynamoDB Local 实例,而不是 AWS。