cx_ Oracle проблема в AWS лямбде, построенной с использованием AWS CodeBuild - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь использовать cx_ Oracle для подключения к базе данных RDS (Oracle) из AWS лямбда-функции (python3 .7). Более того, сама функция Lambda автоматически создается из AWS CodeBuild с использованием файла buildspe c .yml. Сам CodeBuild выполняется путем настройки AWS CodePipeline таким образом, чтобы при каждом обновлении репозитория, в который я помещаю свой код (в данном случае AWS CodeCommit), он автоматически собирал материал.

Вещи, которые Я сделал: 1. У меня есть AWS лямбда-функция с кодом следующим образом.

    import cx_Oracle

    def lambda_handler(event, context):
      dsn = cx_Oracle.makedsn('www.host.com', '1521', 'dbname')
      connection = cx_Oracle.connect(user='user', password='password', dsn=dsn)

      cursor = connection.cursor()

      cursor.execute('select * from table_name')

      return cursor
Внутри buildspe c .yml У меня есть следующие команды сборки.
    version: 0.2
    phases: 
      install:
        runtime-versions:
          python: 3.7
      commands:
        - pip install cx_Oracle -t ./ # to install cx_Oracle package in the same directory as the script
        - unzip instantclient-basic-linux*.zip -d /opt/oracle # I have downloaded the zip file beforehand

    <other code>
        -  
Я также настроил template.yml лямбда-функции следующим образом
    AWSTemplateFormatVersion: '2010-09-09'
    Transform: 'AWS::Serverless-2016-10-31'
    Description: Making a test lambda function using codepipeline

    Resources:
       funcAuthorityReceive:
         Type: 'AWS::Serverless::Function'
         Properties:
            FunctionName: testFunction
            Environment: 
            Variables:
              PATH: '/opt/oracle/instantclient_19_5:$PATH'
              LD_LIBRARY_PATH : '$LD_LIBRARY_PATH:/opt/oracle/instantclient_19_5'
            Handler: lambda_function.lambda_handler
            MemorySize: 128
            Role: 'arn:aws:iam::XXXXXXXXXXXXXX:role/role-for-lambda
            Runtime: python3.7
            CodeUri: ./

Здесь все работает гладко, и сама лямбда-функция создается, но когда я запускаю лямбду, эта ошибка Появляется:

"DPI-1047: Cannot locate a 64-bit Oracle Client library: \"libclntsh.so: cannot open shared object file: No such file or directory\". See https://oracle.github.io/odpi/doc/installation.html#linux for help"

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 16 января 2020

Если вы хотите использовать cx_ Oracle для доступа к вашей базе данных oracle, в момент, когда вы заархивируете лямбда-пакет (код и другие зависимости), убедитесь, что вы сохранили символические ссылки

Oracle binaries

zip --symlinks -r lambda.zip .

Я не работал с codebuild, но я собрал пакет lambda на сервере linux, скоро я буду создавать конвейер сборки в Azure Devops.

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