ハードウェアエンジニアの備忘録

電子工学(半導体物性)→応用光学・半導体プロセス→アナログ回路→C/C++→C#/.NETと低レイヤーから順調に(?)キャリアを登ってきているハードウェアエンジニアの備忘録。ブログ開始時点でiOSやサーバーサイドはほぼ素人です。IoTがマイブーム。

環境変数でパスワード等を設定したときに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を行うと、普通に動いた。