🌊

ECSからDBとして扱うEC2にアクセスできないときに設定すること

2024/07/21に公開

状況

  • 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内からの接続を許可できます。
      
  • pg_hba.confを修正していきます。
    • CIDR範囲は各自のVPCの設定を確認してください。
      pg_hba.conf
      host    all             all             <CIDR範囲>            trust
      
  • pg_hba.confの修正をし保存したら、postgresqlの再起動を行なってください。
    sudo systemctl restart postgresql
    

Discussion