Prismaを導入してローカルでの確認ができたのでAppEngineにデプロイして動作確認したところエラーが発生した
Prisma Client could not locate the Query Engine for runtime "debian-openssl-1.1.x". This happened because Prisma Client was generated for "debian-openssl-3.0.x", but the actual deployment required "debian-openssl-1.1.x". Add "debian-openssl-1.1.x" to `binaryTargets` in the "schema.prisma" file and run `prisma generate` after saving it: generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-1.1.x"] }
調べたところ、これはPrismaが利用しようとしているOpenSSLのバージョンがOSのバージョンと一致していないことが原因とわかった
binaryTargets
に何か指定しろとのことなので、どうすべきか調べる
バイナリターゲット
Prisma Client はコードを実行するプラットフォームに応じたバイナリターゲットを指定する必要がある
上のエラーメッセージになるnative
とdebian-openssl-1.1.x
については
ドキュメントによるとnative
を指定すると、Prisma Client が現在のOSを検出し、そのOSに対する正しいバイナリ ターゲットを自動的に指定してくれるみたい
例えば、macOSの2つのバージョン違い(Intel x86 と ARM64)を自動に検知してくれるので指定しておくと良さそう
次に、debian-openssl-1.1.x
はデプロイするOSに応じて指定するもの
Linux debian系であれば以下から選択する
https://www.prisma.io/docs/orm/reference/prisma-schema-reference#linux-debian-x86_64
なので、AppEngineにデプロイするOSを調べる必要がある
OSバージョン
AppEngineにデプロイするDokerイメージはgcr.io/distroless/nodejs:18
を使っている
ちょっと古いようで全く同じイメージについては調べられなかったが以下をみると、debian11かdebian10を使っていそうということがわかった
distroless/nodejs at main · GoogleContainerTools/distroless · GitHub
先ほどのPrismaの表と照らし合わせるとdebian-openssl-1.1.x
を指定すれば良いことがわかった
ということで、schema.prismaに以下を記述したら無事に動いた
generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-1.1.x"] }