跳到主要內容

部署到 AWS 平臺時的注意事項

以下描述了您在部署到不同 AWS 平臺時可能遇到的一些注意事項。

AWS RDS Proxy

Prisma ORM 與 AWS RDS Proxy 相容。然而,由於 RDS Proxy 固定連線的方式,使用它進行連線池對於 Prisma ORM 沒有益處。

“您與代理的連線可能會進入一種稱為固定的狀態。當連線被固定時,後續的每次事務都使用相同的底層資料庫連線,直到會話結束。在會話結束之前,其他客戶端連線也無法重用該資料庫連線。當 Prisma Client 的連線斷開時,會話結束。”——AWS RDS Proxy 文件

任何大小的預處理語句或大於 16 KB 的查詢語句都會導致 RDS Proxy 固定會話。由於 Prisma ORM 對所有查詢都使用預處理語句,因此您在使用 RDS Proxy 和 Prisma ORM 時不會看到任何好處。

AWS Elastic Beanstalk

AWS Elastic Beanstalk 是一種類似 PaaS 的部署服務,它抽象了基礎設施,讓您可以快速將應用程式部署到 AWS。

當使用 Prisma Client 部署應用程式到 AWS Elastic Beanstalk 時,Prisma ORM 會將 Prisma Client 程式碼生成到 node_modules 中。這通常在 package.json 中定義的 postinstall 鉤子中完成。

由於 Beanstalk 限制了在 postinstall 鉤子中寫入檔案系統的能力,您需要在專案根目錄中建立一個 .npmrc 檔案並新增以下配置:

.npmrc
unsafe-perm=true

啟用 unsafe-perm 強制 npmroot 身份執行,從而避免檔案系統訪問問題,允許 postinstall 鉤子中的 prisma generate 命令生成您的程式碼。

錯誤:@prisma/client 尚未初始化

發生此錯誤是因為 AWS Elastic Beanstalk 不安裝 devDependencies,這意味著它不會安裝 Prisma CLI。要解決此問題,您可以:

  1. prisma CLI 包新增到您的 dependencies 而不是 devDependencies。(確保之後執行 npm install 以更新 package-lock.json)。
  2. 或者在 AWS Elastic Beanstalk 例項上安裝您的 devDependencies。為此,您必須將 AWS Elastic Beanstalk 的 NPM_USE_PRODUCTION 環境變數設定為 false。

AWS RDS Postgres

當您將 Prisma ORM 與 AWS RDS Postgres 一起使用時,在遷移或執行時可能會遇到連線問題或以下錯誤:

Error: P1010: User <username> was denied access on the database <database>

原因

AWS RDS 預設強制執行 SSL 連線,並且 Prisma 解析資料庫連線字串時帶有 rejectUnauthorized: true,這需要有效的 SSL 證書。如果證書配置不正確,Prisma 將無法連線到資料庫。

解決方案

為了解決此問題,更新 DATABASE_URL 環境變數以包含 sslmode=no-verify 選項。這將繞過嚴格的 SSL 證書驗證,並允許 Prisma 連線到資料庫。按如下方式更新您的 .env 檔案:

DATABASE_URL=postgresql://<username>:<password>@<host>/<database>?sslmode=no-verify&schema=public

為什麼這有效

sslmode=no-verify 設定透過 pg-connection-string 包將 rejectUnauthorized: false 傳遞給 SSL 配置。這會停用嚴格的證書驗證,允許 Prisma 與 RDS 資料庫建立連線。

注意

雖然使用 sslmode=no-verify 可以作為快速修復,但它繞過了 SSL 驗證,可能不符合生產環境的安全要求。在這種情況下,請確保正確配置了有效的 SSL 證書。

AWS Lambda 上傳限制

AWS Lambda 定義了**部署包上傳限制**,其中包括:

注意

截至 v6.7.0,Prisma ORM 具有 queryCompiler 預覽功能。

啟用後,您的 Prisma Client 將在沒有基於 Rust 的查詢引擎二進位制檔案的情況下生成。:

generator client {
provider = "prisma-client-js"
previewFeatures = ["queryCompiler", "driverAdapters"]
}

請注意,queryCompiler 需要同時啟用 驅動介面卡 預覽功能。

Lambda 的部署包 (.zip) 大小限制為 50MB。當您準備部署包時,請刪除函式在生產環境中不需要的任何檔案,以使最終的 .zip 檔案儘可能小。這包括一些不需要的 Prisma ORM 引擎二進位制檔案

刪除不需要的 Prisma ORM 引擎

Prisma CLI 會下載在生產環境中**不需要**的額外引擎二進位制檔案。您可以刪除以下檔案和資料夾:

  1. 整個 node_modules/@prisma/engines 資料夾(參考 Prisma 端到端測試使用的示例 bash 指令碼

  2. node_modules/.prisma/client 資料夾中刪除您開發平臺的**本地引擎檔案**。例如,如果您在 Debian (native) 上開發但部署到 AWS Lambda (rhel-openssl-3.0.x),您的 schema 可能會定義以下 binaryTargets

    binaryTargets = ["native", "rhel-openssl-3.0.x"]

    在這種情況下:

    • 保留 node_modules/.prisma/client/query-engine-rhel-openssl-3.0.x,這是 AWS Lambda 使用的引擎檔案。
    • 刪除 node_modules/.prisma/client/query-engine-debian-openssl-1.1.x,它僅在本地需要。

    **注意**:當使用 Node.js 18 或更早版本時,AWS Lambda 對應的 binaryTargetrhel-openssl-1.0.xrhel-openssl-3.0.x 是 Node.js 18 以上版本的正確 binaryTarget

© . This site is unofficial and not affiliated with Prisma Data, Inc.