🌊
ECSからDBとして扱うEC2にアクセスできないときに設定すること
状況
- EC2にpostgresqlがインストールされており、テーブルなど必要なものは揃っています
- EC2はprivate subnetに存在しています
- EC2をDBがわりに扱うことの是非は本記事では扱いません。またこれを推奨するものでもありません。
- ECSでNestJSのアプリケーションを立ち上げるときに、DB接続エラーになりました
# DB接続設定 # AWS System Managerのパラメータストアに環境変数として設定し、ECSのタスク定義で紐づけられています postgres://<ユーザー名>:<パスワード>@<EC2のプライベートIPアドレス>:<ポート>/<データベース名> # エラー内容 user access denied
ログを確認する
-
pg_hba.conf
と言うファイルがEC2内にあるので、ログを確認します。# ログ FATAL: no pg_hba.conf entry for host "10.0.140.39", user "<ユーザー名>", database "<データベース名>", no encryption
エラー内容
-
10.0.140.39
と言うIPからpostgresqlへアクセスができない、と言う内容でした。-
10.0.140.39
はデプロイされたECSコンテナのIPです。
-
対処方法
- ECSコンテナのIPアドレスはデプロイされる度に異なるものが設定されます。そのため、不変のIPを設定し、アクセスが通るようにする必要があります。
- 以下ChatGPTより
ECSタスクがEC2インスタンスと同じVPC内にある場合、プライベートIPアドレスを使って通信するのが一般的です。pg_hba.conf にVPCのCIDR範囲(例: 10.0.0.0/16)を指定することで、同じVPC内からの接続を許可できます。
- 以下ChatGPTより
-
pg_hba.conf
を修正していきます。- CIDR範囲は各自のVPCの設定を確認してください。pg_hba.conf
host all all <CIDR範囲> trust
- CIDR範囲は各自のVPCの設定を確認してください。
-
pg_hba.conf
の修正をし保存したら、postgresqlの再起動を行なってください。sudo systemctl restart postgresql
Discussion