【问题标题】:Problem installing PyODBC for local debugging with AWS SAM CLI使用 AWS SAM CLI 安装 PyODBC 以进行本地调试时出现问题
【发布时间】:2023-11-27 09:14:02
【问题描述】:

我正在用 Python 开发一个 lambda 函数。该函数使用 pyodbc 库访问 RDS 数据库。要使用我正在使用图层的库。我的 SAM 模板看起来像这样,并且在部署到 AWS 时一切正常。

Resources:

    # ODBC Lambda Layer
    PyODBCLayer:
      Type: AWS::Serverless::LayerVersion
      Properties:
        ContentUri: pyodbc_layer.zip

    # Lambda function
    TaskIDFunction:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: taskid/
            Handler: app.lambda_handler
            Layers:
              - !Ref PyODBCLayer
            Role: !GetAtt TaskIDFunctionIamRole.Arn
            Runtime: python3.6
            Environment:
              Variables:
                ODBCINI: /opt/bin/odbcinst.ini
                ODBCSYSINI: /opt/bin
            Events:
              SendTaskID:
                Type: Api 
                Properties:
                      Path: /task/{id}
                      Method: get

当我尝试使用 sam build && sam local invoke -d 5890 TaskIDFunction --event myEvent.json 在本地运行它时,问题就开始了

我收到错误消息Unable to import module 'app': No module named 'pyodbc',我理解,通常解决方案是将pyodbc 添加到requiremens.txt 文件中以进行本地调试。

但是,在我这样做之后,sam build 命令失败并显示以下消息

Build Failed
Error: PythonPipBuilder:ResolveDependencies - {pyodbc==4.0.26(wheel)}

我可以pip install pyodbc 没有问题,但由于某种原因,sam build 失败了。

我尝试了各种组合,从模板中删除图层并手动安装 PyODBC 以使其在本地运行,但没有成功。

【问题讨论】:

    标签: python aws-lambda pyodbc aws-sam-cli


    【解决方案1】:

    本地调试需要解压zip文件的内容,并引用图层的文件路径。

    我创建了一个名为 lambda-layers 的文件夹并提取了文件夹内的 zip 文件内容

    在 template.yaml 文件中给出文件夹路径

    将你的 template.yaml 文件修改为

    【讨论】:

    • 我已经为 python3.8 尝试过这个,它似乎对我不起作用。
    最近更新 更多