環境変数でパスワード等を設定したときにSequelizeConnectionErrorが出てしまい接続できない問題の解決
背景
TypeScriptでAWS上のPostgresに接続を行いたいとき、DBの接続ユーザー名、パスワードなどを環境変数に書くことが一般的かと思う。 そこで、以下のようにVSCodeからconfig.tsを記述し、.profileに環境変数を設定し記述することを試みた。
config.ts
export const config = { "dev": { "username": process.env.POSTGRESS_USERNAME, "password": process.env.POSTGRESS_PASSWORD, "database": process.env.POSTGRESS_DATABASE, "host": process.env.POSTGRESS_HOST, "dialect": "postgres", "aws_region": process.env.AWS_REGION, "aws_profile": process.env.AWS_PROFILE, "aws_media_bucket": process.env.AWS_MEDIA_BUCKET } }
.profile
# For AWS export POSTGRESS_USERNAME=namae; export POSTGRESS_PASSWORD=password; export POSTGRESS_DATABASE=dbnonamae; export POSTGRESS_HOST=dbhost.region.rds.amazonaws.com; export AWS_REGION=us-west-2; export AWS_PROFILE=default; export AWS_MEDIA_BUCKET=bucketnonamae;
npm run dev
上記を設定して、ターミナルから
$ source ~/.profile
をして、
$ npm run dev
を行うと、、、
MacBook-Pro-15-Mid-2017:udacity-c2-restapi toshiki$ npm run dev (中略) Using ts-node version 8.3.0, typescript version 3.5.3 (node:22365) UnhandledPromiseRejectionWarning: SequelizeConnectionError: password authentication failed for user "namae" (中略)
あれ、、、環境変数に設定されているはずなのに、うまく認証が行かない。
調査
ターミナルから試すも、
$ echo $POSTGRESS_PASSWORD $ password
きちんと設定されているようだ。
結論
実は、今まで書いていなかったが、npm run devはVSCodeのターミナルから、source ~/.profileはMacの端末(ターミナル)から行っていた。
そのため、環境変数の変更がVSCodeには反映されておらず、npm run devできなかったというわけ。
VSCodeのターミナルから source ~/.profileを行った上で、npm run devを行うと、普通に動いた。