TypeScript Agent para DynamoDB
O gerador connection conecta um TypeScript Agent a um projeto TypeScript DynamoDB, configurando o desenvolvimento local para que ambos iniciem juntos automaticamente.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de usar este gerador, certifique-se de ter:
- Um projeto
ts#agent - Um projeto
ts#dynamodb
Executar o Gerador
Seção intitulada “Executar o Gerador”Execute este gerador@aws/nx-plugin:connection
pnpm nx g @aws/nx-plugin:connection yarn nx g @aws/nx-plugin:connection npx nx g @aws/nx-plugin:connection bunx nx g @aws/nx-plugin:connection- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
Monte seu comando5
Obrigatório
Obrigatório
Selecione seu projeto Agent como origem e seu projeto DynamoDB como destino. Se o projeto contiver múltiplos componentes de agente, especifique sourceComponent para desambiguar.
sourceProjectObrigatóriostringO projeto de origem
targetProjectObrigatóriostringO projeto de destino para conectar
sourceComponentstringO 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.
targetComponentstringO 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:trueSe 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.
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador atualiza o target <agent-name>-dev do agente em project.json para depender do target dev do projeto DynamoDB. Nenhum arquivo de código-fonte é modificado.
Usando DynamoDB em Agents
Seção intitulada “Usando DynamoDB em Agents”Importe as factories de entidade do pacote DynamoDB e use-as dentro da definição do seu agente:
import { createExampleEntity } from '@my-scope/my-table';import { z } from 'zod';
const listExamples = tool({ name: 'list_examples', description: 'List all example items', inputSchema: z.object({}), callback: async () => { const entity = await createExampleEntity(); const result = await entity.scan.go(); return result.data; },});
export const getAgent = async () => { // ... return new Agent({ tools: [listExamples], });};Infraestrutura
Seção intitulada “Infraestrutura”Para permitir que a função Lambda do agente acesse a tabela DynamoDB, conceda as permissões necessárias em sua infraestrutura.
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myAgent = new MyAgent(this, 'MyAgent');
table.grantReadWriteData(myAgent);grantReadWriteData concede tanto as permissões do DynamoDB quanto do KMS ao papel de execução do agente.
Conceda ao papel de execução do agente acesso à tabela e sua chave de criptografia KMS via additional_iam_policy_statements:
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent"
additional_iam_policy_statements = [ { 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] }, ]}Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”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.