Pular para o conteúdo

API tRPC para DynamoDB

O gerador connection conecta uma API tRPC a um projeto TypeScript DynamoDB, configurando o desenvolvimento local para que ambos iniciem juntos automaticamente.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto de API tRPC (gerado com ts#api)
  2. Um projeto ts#dynamodb

Execute este gerador@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
Monte seu comando5

Obrigatório

Obrigatório

Selecione seu projeto de API tRPC como origem e seu projeto DynamoDB como destino.

Opções do gerador5 opções
sourceProjectObrigatóriostring

O projeto de origem

targetProjectObrigatóriostring

O projeto de destino para conectar

sourceComponentstring

O componente de origem a partir do qual conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.

targetComponentstring

O componente de destino ao qual conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.

preferInstallDependenciesbooleanPadrão: true

Se deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

O gerador atualiza o project.json da sua API tRPC para adicionar uma dependência do seu target dev para o target dev do projeto DynamoDB. Nenhum arquivo de código-fonte é modificado.

Importe as factories de entidades do pacote DynamoDB e use-as dentro dos seus procedures tRPC:

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;
});

Para permitir que funções Lambda acessem a tabela DynamoDB, conceda as permissões necessárias em sua infraestrutura.

Chame grantReadWriteData no construto da tabela. Isso concede tanto as permissões do DynamoDB quanto do KMS exigidas pela função de execução do Lambda:

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);
});

O gerador connection configura o target dev do seu projeto para depender do target dev do projeto DynamoDB. O DynamoDB Local será iniciado automaticamente junto com seu projeto ao executar dev.

A variável de ambiente LOCAL_DEV=true é definida automaticamente, então getDynamoDBClient() e resolveTableName() se conectam à instância local do DynamoDB Local em vez da AWS.