title | emoji | type | topics | published | |||||
---|---|---|---|---|---|---|---|---|---|
(Prisma) Connections using insecure transport are prohibited. の解決 |
💨 |
tech |
|
true |
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 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}"