Salta ai contenuti

API Smithy a DynamoDB

Il generatore connection collega un’API Smithy a un progetto TypeScript DynamoDB, configurando lo sviluppo locale in modo che entrambi si avviino automaticamente insieme.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto API TypeScript Smithy (generato con ts#api usando --framework=smithy)
  2. Un progetto ts#dynamodb

Esegui questo generatore@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
Componi il tuo comando5

Obbligatorio

Obbligatorio

Seleziona il tuo progetto backend API Smithy come sorgente e il tuo progetto DynamoDB come destinazione.

Opzioni del generatore5 opzioni
sourceProjectObbligatoriostring

Il progetto sorgente

targetProjectObbligatoriostring

Il progetto di destinazione a cui connettersi

sourceComponentstring

Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come sorgente.

targetComponentstring

Il componente destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto destinazione, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come destinazione.

preferInstallDependenciesbooleanPredefinito: true

Se preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.

Il generatore aggiorna il project.json della tua API Smithy per aggiungere una dipendenza dal suo target dev al target dev del progetto DynamoDB. Nessun file sorgente viene modificato.

Importa le factory di entità dal pacchetto DynamoDB e utilizzale all’interno delle implementazioni delle tue operazioni:

packages/api/src/operations/list-examples.ts
import { createExampleEntity } from '@my-scope/my-table';
import { ServiceContext } from '../context.js';
import { ListExamples as ListExamplesOperation } from '../generated/ssdk/index.js';
export const ListExamples: ListExamplesOperation<ServiceContext> = async () => {
const entity = await createExampleEntity();
const result = await entity.scan.go();
return { items: result.data };
};

Per consentire alle funzioni Lambda di accedere alla tabella DynamoDB, concedi le autorizzazioni necessarie nella tua infrastruttura.

Chiama grantReadWriteData sul costrutto della tabella. Questo concede sia le autorizzazioni DynamoDB che KMS richieste dal ruolo di esecuzione 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);
});

Il generatore connection configura il target dev del tuo progetto per dipendere dal target dev del progetto DynamoDB. DynamoDB Local si avvierà automaticamente insieme al tuo progetto quando esegui dev.

La variabile d’ambiente LOCAL_DEV=true viene impostata automaticamente, quindi getDynamoDBClient() e resolveTableName() si connettono all’istanza locale di DynamoDB Local invece che ad AWS.