tRPC API에서 DynamoDB로
connection 생성기는 tRPC API를 TypeScript DynamoDB 프로젝트에 연결하여, 로컬 개발 시 두 프로젝트가 자동으로 함께 시작되도록 구성합니다.
사전 요구 사항
섹션 제목: “사전 요구 사항”이 생성기를 사용하기 전에 다음이 필요합니다:
- tRPC API 프로젝트 (
ts#api로 생성됨) ts#dynamodb프로젝트
사용법
섹션 제목: “사용법”생성기 실행
섹션 제목: “생성기 실행”이 제너레이터 실행@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- 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
- VSCode에서 Nx 콘솔 열기
- 클릭
Generate (UI)"Common Nx Commands" 섹션에서 - 검색
@aws/nx-plugin - connection - 필수 매개변수 입력
- 클릭
Generate
명령 구성하기5
필수
필수
소스로 tRPC API 프로젝트를 선택하고 타겟으로 DynamoDB 프로젝트를 선택하세요.
sourceProject필수string소스 프로젝트
targetProject필수string연결할 대상 프로젝트
sourceComponentstring연결할 소스 컴포넌트 (컴포넌트 이름, 소스 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 소스로 명시적으로 선택하려면 '.'을 사용하세요.
targetComponentstring연결할 대상 컴포넌트 (컴포넌트 이름, 대상 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 대상으로 명시적으로 선택하려면 '.'을 사용하세요.
preferInstallDependenciesboolean기본값:true생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번만 설치합니다.
생성기 출력
섹션 제목: “생성기 출력”생성기는 tRPC API의 project.json을 업데이트하여 dev 타겟에서 DynamoDB 프로젝트의 dev 타겟으로의 의존성을 추가합니다. 소스 파일은 수정되지 않습니다.
프로시저에서 DynamoDB 사용하기
섹션 제목: “프로시저에서 DynamoDB 사용하기”DynamoDB 패키지에서 엔티티 팩토리를 가져와서 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; });인프라
섹션 제목: “인프라”Lambda 함수가 DynamoDB 테이블에 액세스할 수 있도록 하려면 인프라에서 필요한 권한을 부여하세요.
테이블 구성에서 grantReadWriteData를 호출하세요. 이는 Lambda 실행 역할에 필요한 DynamoDB 및 KMS 권한을 모두 부여합니다:
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);});Lambda 실행 역할에 DynamoDB 테이블 및 KMS 암호화 키에 대한 액세스 권한을 부여하세요:
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
resource "aws_iam_role_policy" "dynamodb_access" { role = module.my_api.lambda_execution_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] }, ] })}로컬 개발
섹션 제목: “로컬 개발”connection 생성기는 프로젝트의 dev 타겟이 DynamoDB 프로젝트의 dev 타겟에 의존하도록 구성합니다. DynamoDB Local은 dev를 실행할 때 프로젝트와 함께 자동으로 시작됩니다.
LOCAL_DEV=true 환경 변수가 자동으로 설정되므로, getDynamoDBClient() 및 resolveTableName()이 AWS 대신 로컬 DynamoDB Local 인스턴스에 연결됩니다.