API tRPC a DynamoDB
El generador connection conecta una API tRPC a un proyecto TypeScript DynamoDB, configurando el desarrollo local para que ambos se inicien juntos automáticamente.
Requisitos previos
Sección titulada «Requisitos previos»Antes de usar este generador, asegúrate de tener:
- Un proyecto tRPC API (generado con
ts#api) - Un proyecto
ts#dynamodb
Ejecutar el generador
Sección titulada «Ejecutar el generador»- Instale el Nx Console VSCode Plugin si aún no lo ha hecho
- Abra la consola Nx en VSCode
- Haga clic en
Generate (UI)en la sección "Common Nx Commands" - Busque
@aws/nx-plugin - connection - Complete los parámetros requeridos
- Haga clic en
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:connectionTambién puede realizar una ejecución en seco para ver qué archivos se cambiarían
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-runSelecciona tu proyecto de API tRPC como origen y tu proyecto DynamoDB como destino.
Opciones
Sección titulada «Opciones»| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| sourceProject Requerido | string | - | El proyecto de origen |
| targetProject Requerido | string | - | El proyecto de destino al que conectar |
| sourceComponent | string | - | El componente de origen desde el que conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Use '.' para seleccionar explícitamente el proyecto como origen. |
| targetComponent | string | - | El componente de destino al que conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Use '.' para seleccionar explícitamente el proyecto como destino. |
| preferInstallDependencies | boolean | true | Si se prefiere instalar las dependencias después de que se ejecute el generador. Establecer en false para diferir la instalación al ejecutar múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instalar una vez al final. |
Salida del generador
Sección titulada «Salida del generador»El generador actualiza el project.json de tu API tRPC para agregar una dependencia desde su objetivo dev al objetivo dev del proyecto DynamoDB. No se modifican archivos de código fuente.
Usar DynamoDB en procedimientos
Sección titulada «Usar DynamoDB en procedimientos»Importa las factories de entidades desde el paquete DynamoDB y úsalas dentro de tus procedimientos tRPC:
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; });Infraestructura
Sección titulada «Infraestructura»Para permitir que las funciones Lambda accedan a la tabla de DynamoDB, otorga los permisos necesarios en tu infraestructura.
Llama a grantReadWriteData en el constructo de la tabla. Esto otorga tanto los permisos de DynamoDB como de KMS requeridos por el rol de ejecución de Lambda:
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);});Otorga al rol de ejecución de Lambda permiso para acceder a la tabla de DynamoDB y su clave de cifrado KMS:
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
resource "aws_iam_role_policy" "dynamodb_access" { role = module.my_api.lambda_role_name
policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", ] Resource = [ module.my_table.table_arn, "${module.my_table.table_arn}/index/*", ] }, { Effect = "Allow" Action = [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ] Resource = [module.my_table.kms_key_arn] }, ] })}Desarrollo local
Sección titulada «Desarrollo local»El generador connection configura el target dev de tu proyecto para que dependa del target dev del proyecto DynamoDB. DynamoDB Local se iniciará automáticamente junto con tu proyecto al ejecutar dev.
La variable de entorno LOCAL_DEV=true se establece automáticamente, por lo que getDynamoDBClient() y resolveTableName() se conectan a la instancia local de DynamoDB Local en lugar de AWS.