Лямбда-функция не может подключиться к redshift: FATAL: нет записи pg_hba.conf для хоста

#python #ssl #aws-lambda #amazon-redshift #psycopg2

#python #ssl #aws-lambda #amazon-redshift #psycopg2

Вопрос:

Я понимаю, что есть несколько вопросов, связанных с этими проблемами. Я видел их, но не смог найти правильное решение.

Я использую AWS Secret Manager для хранения учетных данных и прямо сейчас пытаюсь подключиться к AWS Redshift с помощью AWS Lambda-функции.

Вот мой lambda.py

 import json
import boto3
import base64
import psycopg2
from botocore.exceptions import ClientError


def get_secret(secret_name):
  try:
      session = boto3.session.Session()
      client = session.client(service_name='secretsmanager', region_name='xx')
      get_secret_value_response = client.get_secret_value( SecretId=secret_name )
      secret = get_secret_value_response['SecretString']
      secret = json.loads(secret)
      

      return secret 
    
    
def lambda_handler(event, context):
  s = get_secret('secretname')
  
  conn = psycopg2.connect(database = s['xx'], 
                            user = s['username'],
                            password = secret['password'],
                            host = secret['host'], 
                            port = secret['port']
                           )
                            
  print('connected')
  cur = conn.cursor()
  cur.execute("""Select * from table1;""")
  rows = cur.fetchall()

  for row in rows:
      print(row[0])
  
  

ОШИБКА: ФАТАЛЬНО: нет записи pg_hba.conf для хоста «:: ffff: xx.xxx.xxx.xxx», пользователя «xxxx», базы данных «xxx», SSL отключен

Я использую psycopg2.

Я попытался вставить «sslmode = ‘require'», не работает.

Любая помощь будет оценена

Комментарии:

1. брандмауэр базы данных блокирует, но не уверен, почему

2. Можете ли вы проверить, находится ли ваш lambda в VPC, и sg имеет надлежащий доступ к маршруту

3. связано ли это с моим psycopg2?

4. порт должен быть 5439, принимает ли он этот порт?

5. Дважды проверьте имя пользователя и пароль, могут быть неправильные учетные данные, попробуйте распечатать в консоли в качестве теста. Как упоминал @Prashanna, проверьте, разрешает ли правила безопасности (входящие и исходящие) порт 5439 для протокола TCP.