Облачная функция, которая запрашивает базу данных Oracle

Нужна некоторая поддержка в создании облачной функции, которая вызывает базу данных 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: невозможно открыть общий объектный файл: нет такого файла или каталога»

Как связать функцию с ведром?

Пробовали ли вы использовать последнюю версию cx_Oracle, теперь известную как python-oracledb , поскольку по умолчанию Instant Client не требуется. Смотрите анонс релиза.

Christopher Jones 15.02.2023 21:39

Это может вам помочь: Как вызвать Oracle DB из Google Cloud Functions в Node.js

Christian Paul Andaya 15.02.2023 22:06

Спасибо, но в этих сообщениях много недостающей информации, плюс я сомневаюсь, что проблема в oracledb, я полагаю, что это связано с конфигурацией.

Gojoe 16.02.2023 12:17

Я написал статью несколько лет назад. Ранее только JAVA поддерживала соединение с Oracle без мгновенного клиента. Это может вам помочь medium.com/google-cloud/…

guillaume blaquiere 16.02.2023 16:22

Почему вы загрузили клиентскую библиотеку Oracle в облачное хранилище? Облачное хранилище предназначено для хранения ресурсов данных...

Fabio B. 16.02.2023 23:28

@Fabio, где еще я могу загрузить клиентскую библиотеку оракула, чтобы облачная функция могла ее использовать?

Gojoe 17.02.2023 15:12

Обычно функции могут импортировать внешние библиотеки, перечисляя их как зависимости (я думаю, в python вы называете их «требованиями»). Итак, вы должны обратиться к способу получения пакетов Python

Fabio B. 17.02.2023 17:08

@ФабиоБ. Клиентская библиотека Oracle не является библиотекой python, библиотека python - это cx_Oracle, и она находится в файле requirements.txt.

Gojoe 19.02.2023 09:09
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
8
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учитывая дополнительный контекст, предоставленный комментариями, облачные функции не так хорошо подходят для варианта использования, поскольку они не предоставляют постоянный диск, на котором вы можете хранить свою клиентскую библиотеку оракула.

Облачные функции — это очень специализированный сервис, такая специализация обеспечивает очень низкую кривую внедрения и делает его лучшим выбором, когда вариант использования и технический стек соответствуют такой специализации (например: нет необходимости в FS, если только /tmp, или нет необходимости настраивать среду выполнения /ОПЕРАЦИОННЫЕ СИСТЕМЫ).

Вместо этого, когда вариант использования требует определенной настройки контейнера, в котором работает функция, оживает Cloud Run. Просто определив контейнер докеров, вы можете разместить в нем клиентскую библиотеку оракула в FS (везде, где вам нужно), а также запустить свою функцию, повторно используя ваш текущий код почти как есть.

Я предполагаю, что ваш стек teck довольно стандартный, поэтому я бы проверил концентратор докеров на наличие образа на основе python и, возможно, даже необходимого вам SDK оракула. ​​Это было бы легкой отправной точкой.

О доступе к клиенту оракула, размещенному в ведре: облачная функция может загрузить его в хранилище /temp, но я не уверен, что вы действительно можете загрузить оттуда библиотеку. Такой подход хранения библиотек в ведрах для меня непривычен (просто личный опыт).

Спасибо, я думаю, мне нужно полагаться на работу в облаке, а не на работу

Gojoe 21.02.2023 12:49

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