콘텐츠로 이동

tRPC API에서 DynamoDB로

connection 생성기는 tRPC APITypeScript DynamoDB 프로젝트에 연결하여, 로컬 개발 시 두 프로젝트가 자동으로 함께 시작되도록 구성합니다.

이 생성기를 사용하기 전에 다음이 필요합니다:

  1. tRPC API 프로젝트 (ts#api로 생성됨)
  2. ts#dynamodb 프로젝트
Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

소스로 tRPC API 프로젝트를 선택하고 타겟으로 DynamoDB 프로젝트를 선택하세요.

매개변수타입기본값설명
sourceProject 필수string-소스 프로젝트
targetProject 필수string-연결할 대상 프로젝트
sourceComponent string-연결을 시작할 소스 컴포넌트 (컴포넌트 이름, 소스 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 소스로 명시적으로 선택하려면 '.'을 사용하세요.
targetComponent string-연결할 대상 컴포넌트 (컴포넌트 이름, 대상 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 대상으로 명시적으로 선택하려면 '.'을 사용하세요.
preferInstallDependencies booleantrue생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번만 설치합니다.

생성기는 tRPC API의 project.json을 업데이트하여 dev 타겟에서 DynamoDB 프로젝트의 dev 타겟으로의 의존성을 추가합니다. 소스 파일은 수정되지 않습니다.

DynamoDB 패키지에서 엔티티 팩토리를 가져와서 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;
});

Lambda 함수가 DynamoDB 테이블에 액세스할 수 있도록 하려면 인프라에서 필요한 권한을 부여하세요.

테이블 구성에서 grantReadWriteData를 호출하세요. 이는 Lambda 실행 역할에 필요한 DynamoDB 및 KMS 권한을 모두 부여합니다:

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

connection 생성기는 프로젝트의 dev 타겟이 DynamoDB 프로젝트의 dev 타겟에 의존하도록 구성합니다. DynamoDB Local은 dev를 실행할 때 프로젝트와 함께 자동으로 시작됩니다.

LOCAL_DEV=true 환경 변수가 자동으로 설정되므로, getDynamoDBClient()resolveTableName()이 AWS 대신 로컬 DynamoDB Local 인스턴스에 연결됩니다.