跳转到内容

tRPC API 到 DynamoDB

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

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

  1. 一个 tRPC API 项目(使用 ts#api 生成)
  2. 一个 ts#dynamodb 项目
  1. 安装 Nx Console VSCode Plugin 如果您尚未安装
  2. 在VSCode中打开Nx控制台
  3. 点击 Generate (UI) 在"Common Nx Commands"部分
  4. 搜索 @aws/nx-plugin - connection
  5. 填写必需参数
    • 点击 Generate

    选择您的 tRPC API 项目作为源,选择您的 DynamoDB 项目作为目标。

    参数 类型 默认值 描述
    sourceProject 必需 string - 源项目
    targetProject 必需 string - 要连接到的目标项目
    sourceComponent string - 要从其连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。
    targetComponent string - 要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。
    preferInstallDependencies boolean true 是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。

    生成器会更新您的 tRPC API 的 project.json,添加从其 dev 目标到 DynamoDB 项目的 dev 目标的依赖关系。不会修改源文件。

    从 DynamoDB 包中导入实体工厂,并在 tRPC procedures 中使用它们:

    packages/api/src/procedures/example.ts
    import { createExampleEntity } from ':my-scope/my-table';
    import { publicProcedure } from '../init.js';
    export const listExamples = publicProcedure
    .query(async () => {
    const entity = await createExampleEntity();
    const result = await entity.scan.go();
    return result.data;
    });

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

    在表构造上调用 grantReadWriteData。这将授予 Lambda 执行角色所需的 DynamoDB 和 KMS 权限:

    packages/infra/src/stacks/application-stack.ts
    import { MyTable } from ':my-scope/common-constructs';
    const table = new MyTable(this, 'Table');
    const api = new Api(this, 'Api', {
    integrations: Api.defaultIntegrations(this).build(),
    });
    Object.entries(api.integrations).forEach(([, integration]) => {
    table.grantReadWriteData(integration.handler);
    });

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

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