无法连接到在EC2实例中运行的Postgres

时间:2019-09-03 13:50:09

标签: postgresql amazon-ec2 aws-lambda

在EC2实例中连接到PSQL数据库时遇到一些麻烦。我知道这里有很多问题要解决,但是我似乎无法解决这个问题。

这是我完成的所有配置。

这是我的postgresql.conf文件。我已经在文件上添加了最后一个

# Directory for PostgreSQL sockets, lockfiles and stats tempfiles
d /run/postgresql 2775 postgres postgres - -
# Log directory
d /var/log/postgresql 1775 root postgres - -

listen_addresses = '*'

这是我的pg_hba.conf文件。我已经在文件中添加了最后两行

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

host    all             all              0.0.0.0/0              md5
host    all             all              ::/0                   md5

我的EC2s安全组中的入站设置 enter image description here

我正在尝试通过lambda函数连接到数据库。 Lambda与EC2实例位于同一安全组,VPC和子网中。

这是lambda函数

exports.handler = async (event) => {
const { Client } = require('pg');  
const client = new Client();
let response = {};
try {
   await client.connect();
   await client.end();
   response = {
      statusCode: 200,
      result: "WooHoo connected to the DB"
  };
} catch (e) {
  response = {
  statusCode: 500,
  result: "Cant connect to DataBase" + e
  };
client.end();
}
return response;
};

测试lambda时,我得到以下响应

{
    "statusCode": 500,
    "result": "Cant connect to DataBaseError: connect ECONNREFUSED 172.31.29.67:5432"
}

172.31.29.67是EC2实例的专用IP。

我正在使用here中所述的步骤在lambda上添加一层以添加'pg'。

这些是我为lambda函数设置的环境变量

enter image description here

问题:

  • 为什么我的数据库拒绝连接?
  • 我是否可以配置EC2安全组入站,以便只有Lambda可以连接EC2实例?

1 个答案:

答案 0 :(得分:1)

结果是我根本没有编辑postgresql.conf文件,而是其他一些随机文件。不知道怎么回事。如果您有类似的问题,请使用以下命令搜索postgresql.conf文件

locate postgresql.conf

您正在寻找的文件看起来像

/etc/postgresql/11/main/postgresql.conf

,然后将其添加到网络连接中的文件中。

listen_addresses = '*'

您将需要重新启动psql服务以使更改生效

sudo service postgresql restart

其余与我在问题中描述的相同。