Не удается подключиться к EC2 Postgres DB из лямбда-нодейс - PullRequest
0 голосов
/ 11 января 2019

Я не могу подключиться к EC2 Postgres DB из своей функции лямбды

Я создал лямбда-функцию после события S3 createAll. В этой лямбда-функции мне нужно обновить данные в моей БД. То, что я сделал, я протестировал соединение с БД на локальном компьютере. Работает нормально. Однако после публикации в lambda все console.log внутри функции client.connect не будут запускаться. Я думал, что это будет разрешением моей лямбда-роли, поэтому я дал администратору доступ к этой роли. Кроме того, в правиле EC2 я делаю входящий трафик открытым для всех. и общительный для всех. 1. EC2 - это Ubuntu, Postgres как DB 2. Узлы для лямбда-функции

const { Client } = require('pg');
exports.handler = async (event,context,callback) => {
context.callbackWaitsForEmptyEventLoop = true;
var client = new Client({
    host:'example.com',
    port:5432,
    user:'postgres',
    password:'examplepassword',
    database:'db'
});
console.log('start connecting db : log client');
client.connect().then(() => {
    console.log('DB is connected');
    const text1 = 'SELECT * FROM unime.lecture_content';
    const text = 'INSERT INTO uni.institute_type(name) VALUES($1) 
RETURNING *';
    const values = ['Test Data 2'];
    callback('DB Connected')
}).catch(e => {console.error('connection error', e.stack)
  callback('DB failure',e.stack)
 })
 };

Мой пакет.json

  {
 "name": "node_postgres",
 "version": "1.0.0",
 "description": "node postgres api",
 "main": "index.js",
 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "deploy": " — zip-file fileb://Lambda-Deployment.zip",
    "predeploy": "zip -r Lambda-Deployment.zip * -x *.zip *.log"
 },
 "keywords": [
    "postgres"
 ],
 "author": "JUNXILI",
 "license": "ISC",
 "dependencies": {
     "pg": "^7.0.3"
 }
}

enter image description here

Я хочу показать весь журнал в функции client.connect. пожалуйста, помогите мне спасибо

1 Ответ

0 голосов
/ 25 марта 2019

Возможно, ваша проблема связана с группой безопасности EC2, поскольку вы обнаружите, что можете подключиться с локального компьютера, но не с помощью функций Lambda. Группа безопасности использует IP-адрес и белый список портов, чтобы определить, разрешать ли соединение. Когда экземпляр EC2 устанавливается впервые, его группа безопасности по умолчанию часто допускает только простой трафик, такой как HTTP / HTTPS. Он не открывает порт (5432) для PostgreSQL. Кроме того, эти соединения должны быть разрешены с любого IP-адреса, поскольку IP-адрес экземпляра поддержки функции Lambda варьируется в зависимости от вызова.

Если это так, мое решение будет:

  • Измените группу безопасности экземпляра EC2, чтобы разрешить подключения к порту PostgreSQL (5432) с любого IP.
  • Убедитесь, что ваша конфигурация PostgreSQL для вашего экземпляра EC2 допускает только безопасные соединения (те, которые сделаны с паролем и, предпочтительно, также с сертификатами). Он будет публичным, поэтому обязательно, чтобы он был безопасным.

Вы также можете использовать VPC для большей безопасности. Смотри https://docs.aws.amazon.com/lambda/latest/dg/vpc.html

Обратите внимание, если вы идете по маршруту VPC:

AWS Lambda использует эту информацию для настройки эластичных сетевых интерфейсов. (ENI), которые позволяют вашей функции безопасно подключаться к другим ресурсы в вашем личном VPC.

Использование ENI может привести к тому, что ваша Lambda будет иметь более высокое время холодного запуска, пока AWS не решит проблемы со временем подготовки ENI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...