FastAPI에서 DynamoDB로
connection 생성기는 FastAPI를 Python DynamoDB 프로젝트에 연결하여, 두 프로젝트가 자동으로 함께 시작되도록 로컬 개발 환경을 구성합니다.
사전 요구 사항
섹션 제목: “사전 요구 사항”이 생성기를 사용하기 전에 다음이 필요합니다:
py#fast-api프로젝트py#dynamodb프로젝트
사용법
섹션 제목: “사용법”생성기 실행
섹션 제목: “생성기 실행”- 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
- VSCode에서 Nx 콘솔 열기
- 클릭
Generate (UI)"Common Nx Commands" 섹션에서 - 검색
@aws/nx-plugin - connection - 필수 매개변수 입력
- 클릭
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionFastAPI 프로젝트를 소스로, DynamoDB 프로젝트를 타겟으로 선택하세요.
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| sourceProject 필수 | string | - | 소스 프로젝트 |
| targetProject 필수 | string | - | 연결할 대상 프로젝트 |
| sourceComponent | string | - | 연결을 시작할 소스 컴포넌트 (컴포넌트 이름, 소스 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 소스로 명시적으로 선택하려면 '.'을 사용하세요. |
| targetComponent | string | - | 연결할 대상 컴포넌트 (컴포넌트 이름, 대상 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 대상으로 명시적으로 선택하려면 '.'을 사용하세요. |
| preferInstallDependencies | boolean | true | 생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번만 설치합니다. |
생성기 출력
섹션 제목: “생성기 출력”생성기는 FastAPI의 project.json을 업데이트하여 dev 타겟에서 DynamoDB 프로젝트의 dev 타겟으로의 의존성을 추가하고, DynamoDB 패키지를 워크스페이스 의존성으로 추가합니다. 소스 파일은 수정되지 않습니다.
라우트 핸들러에서 DynamoDB 사용하기
섹션 제목: “라우트 핸들러에서 DynamoDB 사용하기”DynamoDB 패키지에서 엔티티 클래스를 가져와 라우트 핸들러 내에서 사용하세요:
from my_scope.my_table.entities.example import ExampleModel
@app.get("/examples")def list_examples(): return list(ExampleModel.scan())인프라
섹션 제목: “인프라”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_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 타겟에 의존하도록 구성합니다. dev를 실행하면 DynamoDB Local이 프로젝트와 함께 자동으로 시작됩니다.
LOCAL_DEV=true 환경 변수가 자동으로 설정되므로 is_local()이 True를 반환하고 PynamoDB 엔티티가 AWS 대신 로컬 DynamoDB 인스턴스에 연결됩니다.