Bỏ qua để đến nội dung

FastAPI đến DynamoDB

Trình tạo connection kết nối một FastAPI với dự án Python DynamoDB, cấu hình phát triển cục bộ để cả hai khởi động cùng nhau tự động.

Trước khi sử dụng trình tạo này, hãy đảm bảo bạn có:

  1. Một dự án py#fast-api
  2. Một dự án py#dynamodb
  1. Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
  2. Mở Nx Console trong VSCode
  3. Nhấp Generate (UI) trong phần "Common Nx Commands"
  4. Tìm kiếm @aws/nx-plugin - connection
  5. Điền các tham số bắt buộc
    • Nhấp Generate

    Chọn dự án FastAPI của bạn làm nguồn và dự án DynamoDB của bạn làm đích.

    Tham số Kiểu Mặc định Mô tả
    sourceProject Bắt buộc string - Dự án nguồn
    targetProject Bắt buộc string - Dự án đích để kết nối tới
    sourceComponent string - Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
    targetComponent string - Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.
    preferInstallDependencies boolean true Có nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

    Trình tạo cập nhật project.json của FastAPI để thêm phụ thuộc từ target dev của nó đến target dev của dự án DynamoDB, và thêm gói DynamoDB làm phụ thuộc workspace. Không có tệp nguồn nào được sửa đổi.

    Import các lớp entity từ gói DynamoDB và sử dụng chúng bên trong các route handler của bạn:

    packages/my_api/my_api/api.py
    from my_scope.my_table.entities.example import ExampleModel
    @app.get("/examples")
    def list_examples():
    return list(ExampleModel.scan())

    Để cho phép các hàm Lambda truy cập bảng DynamoDB, hãy cấp các quyền cần thiết trong cơ sở hạ tầng của bạn.

    Gọi grantReadWriteData trên table construct. Điều này cấp cả quyền DynamoDB và KMS cần thiết cho vai trò thực thi Lambda:

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

    Trình tạo connection cấu hình target dev của dự án để phụ thuộc vào target dev của dự án DynamoDB. DynamoDB Local sẽ tự động khởi động cùng với dự án của bạn khi chạy dev.

    Biến môi trường LOCAL_DEV=true được thiết lập tự động, do đó is_local() trả về True và các entity PynamoDB của bạn kết nối với instance DynamoDB local thay vì AWS.