ローカル環境やVercelでのデプロイ環境では動くのに何故かAWSのAmplify環境ではPrismaが動かない!
今回はその解決方法と忘備録です。
0からのNext.js学習としてORM(Prisma)を用いてデータを取得するサイトの開発を行っており、「一旦本番環境(Amplify)にデプロイするかぁ...!」と思いデプロイ。
findMany()を使用してデータ一覧を表示することは出来たが、api/sample/[id]からデータを取得して表示を行うページでは何故かPrismaClientがerrorを返してくる。
Amplifyでデプロイするのは初めてで使い方が悪いのかもしれないと思い、Vercelにデプロイ。すると一覧のページもapiのページも正常に動く....
「じゃあAmplifyの環境変数かビルドの設定がおかしいんじゃない?!」と仮定し、色々いじってみたりする...動かない!(原因はそこでは無かった為)
謎!
「Amplifyのログを確認すれば良いのでは...?」
CloudWatchでログを確認した所、以下のような文章が
Error [PrismaClientInitializationError]: Prisma Client could not locate the Query Engine for runtime "rhel-openssl-1.0.x".
This happened because Prisma Client was generated for "rhel-openssl-3.0.x", but the actual deployment required "rhel-openssl-1.0.x".
...?
どうやら、Amplifyのデプロイではprisma.schemaのgerate clientに binaryTargets = ["native", "rhel-openssl-1.0.x"] を設定しないといけないらしい。
まとめ
本番環境でのエラーを解消するには
- ログを見る
- ビルド設定を見る
- コードを見る
の順番が良さそうですね...?