Как подключить Lambda в VPC к RDS?

Для этого есть несколько вопросов / ответов, но ни одно из решений, похоже, не работает.

Моя текущая настройка:

  • Лямбда (со средой выполнения Python 2.7) в VPC
  • Экземпляр RDS (postgres) в том же VPC
  • Лямбда-роль имеет политику чтения / записи в определенные сегменты S3 и AWSLambdaVPCAccessExecutionRole.
  • Таблица маршрутов подсети Lambda имеет доступ к локальным IP-адресам и к конечной точке VPC для S3.
  • Таблица маршрутизации подсети RDS имеет доступ к локальным IP-адресам.
  • Группа безопасности Lambda (SG) имеет правила для входящего и исходящего трафика для конечных точек Postgres и VPC.
  • RDS SG имеет входящие и исходящие правила для идентификатора Lambda SG.

Я использую psycopg2 для подключения, который находится в моем файле requirements.txt. Я попробовал простой запрос SELECT, как показано ниже:

conn = psycopg2.connect(dbname=os.environ['DB_NAME'], user=os.environ['USERNAME'], password=os.environ['PASSWORD'])
cursor = conn.cursor()
query = "SELECT * from {};".format(os.environ['TABLE'])
cursor.execute(query)
records = cursor.fetchall()

Что дает мне ошибку:

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
: OperationalError
Traceback (most recent call last):
File "/var/task/mylambda.py", line 31, in call
conn = psycopg2.connect(dbname=os.environ['DB_NAME'], 
user=os.environ['USERNAME'], password=os.environ['PASSWORD'])
File "/tmp/sls-py-req/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

Что мне не хватает? Как я могу успешно подключиться к RDS с моей Lambda? Спасибо!

Если вы запустите это на экземпляре EC2 в той же подсети, что и функция Lambda, и с тем же SG, сможете ли вы подключиться?

jarmod 04.04.2018 16:47

Во фрагменте кода не отображаются значения для host или port в вызове connect(). Вы просто не скопировали их в вопрос или их нет в вашем коде?

kdgregory 04.04.2018 20:02

@kdgregory, черт возьми, ты прав! Я добавлю это и посмотрю, исправит ли это.

Katherine 04.04.2018 22:05

@kdgregory вот и все! Я смотрел на это слишком долго и совершенно упустил из виду. Я даже включил host в переменные окружения, но не думал, что он отсутствует в моем коде. Спасибо!

Katherine 04.04.2018 22:11

@Katherine, раздача здесь была в сообщении об ошибке ... Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? ... это дает вам две части информации, которые указывают на то, что ваш код не пытался подключиться к отдельному серверу: "Сервер работает локально?" Вы не пытались подключиться к локальному серверу, вы пытались подключиться к удаленному ... и "сокет домена unix" никогда не подключает вас к другому компьютеру, только к локальному.

Michael - sqlbot 05.04.2018 00:35

В этом есть смысл @ Michael-sqlbot, спасибо за это объяснение.

Katherine 05.04.2018 10:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
652
0

Другие вопросы по теме