Salta ai contenuti

TypeScript Agent a DynamoDB

Il generatore connection collega un TypeScript Agent 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 ts#agent
  2. Un progetto ts#dynamodb
  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

    Seleziona il tuo progetto Agent come sorgente e il tuo progetto DynamoDB come destinazione. Se il progetto contiene più componenti agent, specifica sourceComponent per disambiguare.

    Parametro Tipo Predefinito Descrizione
    sourceProject Obbligatorio string - Il progetto sorgente
    targetProject Obbligatorio string - Il progetto di destinazione a cui connettersi
    sourceComponent string - Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
    targetComponent string - Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.
    preferInstallDependencies boolean 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 target <agent-name>-dev dell’agent in project.json per dipendere dal target dev del progetto DynamoDB. Nessun file sorgente viene modificato.

    Importa le factory di entità dal pacchetto DynamoDB e utilizzale all’interno della definizione del tuo agent:

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

    Per consentire alla funzione Lambda dell’agent di accedere alla tabella DynamoDB, concedi le autorizzazioni necessarie nella tua infrastruttura.

    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 concede sia le autorizzazioni DynamoDB che KMS al ruolo di esecuzione dell’agent.

    Il generatore connection configura il target dev del tuo progetto in modo che dipenda 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.