💨

(Prisma) Connections using insecure transport are prohibited. の解決

2024/05/03に公開

Docker上で動かしているNext.jsのコンテナで、TiDBに接続してprismaを動かしたい。

https://www.prisma.io/docs/getting-started/setup-prisma/start-from-scratch/relational-databases/using-prisma-migrate-typescript-mysql
上記のページに従い、次のコマンドを実行。

npx prisma migrate dev --name init
/app $ npx prisma migrate dev --name init
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "test" at "gateway01.ap-northeast-1.prod.aws.tidbcloud.com:4000"

Error: Schema engine error:
Connections using insecure transport are prohibited. See https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters

エラーに言われたとおり、
https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters
を見る。

問題を要約すると、 一部のORMはシステムのルートCAを使わないことがある。 ということなので、

下記ページでprismaのSSL connectionに関してヘルプを調べる。
https://www.prisma.io/docs/orm/overview/databases/mysql#configuring-an-ssl-connection

sslcert=<PATH>: Path to the server certificate.

ssl certificate のPATHを指定することが出来るということなので、環境変数に以下を追加。

SSL_CERT_PATH="/etc/ssl/cert.pem"

筆者のdocker環境はalpineなので、上記の場所に証明書がある。
下記のように環境変数のパラメータを定義すれば接続できた。

DATABASE_URL="mysql://${TIDB_USER}:${TIDB_PASSWORD}@${TIDB_HOST}:${TIDB_PORT}/${TIDB_DATABASE}?sslcert=${SSL_CERT_PATH}"
GitHubで編集を提案

Discussion