Нужна некоторая поддержка в создании облачной функции, которая вызывает базу данных Oracle, написала код Python, и он находится в репозитории, и функция вызывает его с помощью триггера HTTP, так что это хорошо.
Для подключения к Oracle требуется клиентская библиотека Oracle, которая загружается в корзину облачного хранилища.
Итак, теперь репозиторий, ведро и функция настроены и находятся в одном регионе, но функция выдает ошибку, что она не может настроить клиентскую библиотеку оракула.
Вот код, если это важно
import cx_Oracle
def queryOracleDatabase(request):
# Oracle Database Connection
username = 'x'
password = 'y'
connStr = '00.00.00.00:0000/abcd'
try:
conn = cx_Oracle.connect(username, password, connStr)
except cx_Oracle.DatabaseError as e:
error = e.args
print('Error: ', error.message)
return
# Execute the query
try:
cursor = conn.cursor()
cursor.execute('select * table')
data = cursor.fetchall()
except cx_Oracle.DatabaseError as e:
error = e.args
print('Error: ', error.message)
return
# Clean up
cursor.close()
conn.close()
return data
И это ошибка, которую он выдает
Ошибка: DPI-1047: не удается найти 64-разрядную клиентскую библиотеку Oracle: «libclntsh.so: невозможно открыть общий объектный файл: нет такого файла или каталога»
Как связать функцию с ведром?
Это может вам помочь: Как вызвать Oracle DB из Google Cloud Functions в Node.js
Спасибо, но в этих сообщениях много недостающей информации, плюс я сомневаюсь, что проблема в oracledb, я полагаю, что это связано с конфигурацией.
Я написал статью несколько лет назад. Ранее только JAVA поддерживала соединение с Oracle без мгновенного клиента. Это может вам помочь medium.com/google-cloud/…
Почему вы загрузили клиентскую библиотеку Oracle в облачное хранилище? Облачное хранилище предназначено для хранения ресурсов данных...
@Fabio, где еще я могу загрузить клиентскую библиотеку оракула, чтобы облачная функция могла ее использовать?
Обычно функции могут импортировать внешние библиотеки, перечисляя их как зависимости (я думаю, в python вы называете их «требованиями»). Итак, вы должны обратиться к способу получения пакетов Python
@ФабиоБ. Клиентская библиотека Oracle не является библиотекой python, библиотека python - это cx_Oracle, и она находится в файле requirements.txt.
Учитывая дополнительный контекст, предоставленный комментариями, облачные функции не так хорошо подходят для варианта использования, поскольку они не предоставляют постоянный диск, на котором вы можете хранить свою клиентскую библиотеку оракула.
Облачные функции — это очень специализированный сервис, такая специализация обеспечивает очень низкую кривую внедрения и делает его лучшим выбором, когда вариант использования и технический стек соответствуют такой специализации (например: нет необходимости в FS, если только /tmp
, или нет необходимости настраивать среду выполнения /ОПЕРАЦИОННЫЕ СИСТЕМЫ).
Вместо этого, когда вариант использования требует определенной настройки контейнера, в котором работает функция, оживает Cloud Run. Просто определив контейнер докеров, вы можете разместить в нем клиентскую библиотеку оракула в FS (везде, где вам нужно), а также запустить свою функцию, повторно используя ваш текущий код почти как есть.
Я предполагаю, что ваш стек teck довольно стандартный, поэтому я бы проверил концентратор докеров на наличие образа на основе python и, возможно, даже необходимого вам SDK оракула. Это было бы легкой отправной точкой.
О доступе к клиенту оракула, размещенному в ведре: облачная функция может загрузить его в хранилище /temp, но я не уверен, что вы действительно можете загрузить оттуда библиотеку. Такой подход хранения библиотек в ведрах для меня непривычен (просто личный опыт).
Спасибо, я думаю, мне нужно полагаться на работу в облаке, а не на работу
Пробовали ли вы использовать последнюю версию cx_Oracle, теперь известную как python-oracledb , поскольку по умолчанию Instant Client не требуется. Смотрите анонс релиза.