首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AWS CodeBuild构建AWS Lambda中的cx_Oracle问题

问用AWS CodeBuild构建AWS Lambda中的cx_Oracle问题
EN

Stack Overflow用户
提问于 2020-01-16 06:40:16
回答 1查看 382关注 0票数 1

我试图使用cx_Oracle从AWS函数(python3.7)中连接到RDS(Oracle)数据库。此外,Lambda函数本身是由AWS CodeBuild使用buildspec.yml文件自动生成的。CodeBuild本身是通过配置AWS CodePipeline来运行的,每当我将代码放在其中的存储库(在本例中是AWS CodeCommit)被更新时,它就会自动构建这些内容。

我所做的事情: 1.我有一个AWS函数,其代码如下所示。

代码语言:javascript
复制
    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

  1. I buildspec.yml我有以下构建命令.

代码语言:javascript
复制
    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>
        -  

  1. I还配置了Lambda函数的template.yml,如下所示:

代码语言:javascript
复制
    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: ./

在这里,一切运行顺利,Lambda函数本身也被构建,但是当我运行lambda时,会出现这样的错误:

代码语言:javascript
复制
"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"

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-01-16 10:40:20

当您想使用cx_Oracle到达oracle数据库时,在压缩lambda包(代码和其他依赖项)时,请确保保留符号链接。

​

​

代码语言:javascript
复制
zip --symlinks -r lambda.zip .

我还没有使用代码构建,但是我已经在linux服务器中构建了lambda包,不久我将在Azure Devops中创建一个构建管道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59764209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档