Я пытаюсь получить пользовательскую модель из Node js 8.12.0
API, используя knex
и bookshelf ORM
. База данных Postgres 10.4
.
Локально работает API, но на ElasticBeanstalk EC2 и RDS, я получаю сообщение об ошибке:
Необработанный отказ TimeoutError: Knex: Тайм-аут получения
подключение. Бассейн, вероятно, полон. Вы скучаете по
.transacting (trx) вызов?
Я могу подключиться и выполнить запросы к экземпляру RDS отдельно через строку подключения / пароль (после ввода этого запроса у меня появляется pw):
psql -h myinstance.zmsnsdbakdha.us-east-1.rds.amazonaws.com -d mydb -U myuser
Группы безопасности:
- Группа безопасности EC2 (настроенная EB) -
sg-0fa31004bd2b763ce
, а RDS имеет правило безопасности для входящего трафика PostgreSQL / TCP / порт 5432 / для соответствующего источника (sg-0fa31004bd2b763ce
) - так что это не похоже на группа безопасности является проблемой
RDS был создан в VPC, но правила безопасности VPC также открыты:
- security groups attached (multiple)
- name: mysgname
- group ID: sg-05d003b66fe1a4a94
- Inbound rules:
- All Traffic (0.0.0.0/0)
- HTTP (80) for TCP (0.0.0.0/0)
- SSH (22) for TCP (0.0.0.0/0)
- PostgreSQL (5432) for TCP (0.0.0.0/0)
Общедоступно: Yes
пользовательский контроллер:
router.get('/users', function(req, res) {
new User.User({'id': 1})
.fetch({withRelated: ['addresses']})
.then((user) => {
res.send(user);
});
});
Knexfile:
production: {
client: 'pg',
version: '7.2',
connection: {
host: process.env.PG_HOST || 'localhost',
port: process.env.PG_PORT || '5432',
user: process.env.PG_USER || 'myuser',
password: process.env.PG_PASSWORD || '',
database: process.env.PG_DB || 'mydb',
charset: 'utf8',
},
pool: {
min: 2,
max: 20
},
},
Во-первых, почему это происходит только в среде AWS, а не локально. Во-вторых, как я могу решить эту проблему? Должен ли я увеличить max
для бассейнов?