AWS Lambda, на предварительной базе данных, / etc / host, ORA-12545 - PullRequest
0 голосов
/ 13 декабря 2018

Я настраиваю лямбду внутри VPC.У меня есть две частные подсети, и я хочу получить доступ к локальной БД, группа безопасности имеет все входящие соединения TCP для открытого порта 22 и все исходящие открытые.Вот моя лямбда:

  • Время выполнения: Python 2.7
  • Зависимость: cx_Oracle 7.0.0
  • Oracle Instant Client: instantclient-basiclite-linux.x64-18.3.0.0.0dbru.zip
  • Oracle Instant Client SDK: instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip
    • Библиотеки Libaio

Код:

import cx_Oracle
import os

host_file = '''
{} localhost
'''
with open('/tmp/HOSTALIASES', 'w') as hosts_file:
    hosts_file.write(host_file.format(os.uname()[1]))

def lambda_handler(event, context):
    con = cx_Oracle.connect('user_name/password@10.xxx.xxx.xxx:1521/service_name

Файловая структура моей лямбды выглядит следующим образом:

  • access_db.py
  • / lib
  • cx_Oracle-7.0.0.dist-info
  • cx_Oracle-doc
  • cx_Oracle.so

/ lib содержит мгновенный клиент оракула + sdk + libaio

Используя тот же код, я могу подключиться к базе данных из EC2.(тот же vpc, та же самая частная подсеть, та же самая настройка в группе безопасности).Я указал LD_LIBRARY_PATH и ORACLE_HOME на папку lib.Теперь ЕДИНСТВЕННОЕ различие, которое я вижу, состоит в том, что на EC2 я заполняю свой / etc / host своим псевдонимом oracle DB IP, и если я их удаляю, у меня возникает та же ошибка.

Так что я думаю, чтопроблема оттуда.Но в лямбде я пытаюсь использовать / tmp / HOSTALIASES (потому что кажется, что мы не можем редактировать / etc / hosts), и это не работает.(Я также поместил переменную окружения HOSTALIASES = / tmp / HOSTALIASES в мое облачное образование.

Теперь я пытаюсь прекратить использование / etc / host на моем ec2 и скопировать весь контент в / tmp / HOSTALIASES. Но этотерпеть неудачу, как в лямбде. Кто-нибудь знает, как я могу сделать эту работу? и почему мне нужно заполнить мой файл / etc / host, даже если я использую IP своей базы данных напрямую.

РЕДАКТИРОВАТЬ: OracleБД, к которой я подключаюсь, находится в кластере. Вероятно, это связано с этим: https://www.oracle.com/webfolder/community/oracle_database/3961128.html

Спасибо!

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