首页 > 解决方案 > 使用 AWS SAM CLI 安装 PyODBC 以进行本地调试时出现问题

问题描述

我正在用 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 以使其在本地运行,但没有成功。

标签: pythonaws-lambdapyodbcaws-sam-cli

解决方案


对于本地调试,您需要提取 zip 文件的内容并引用图层的文件路径。

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

在此处输入图像描述

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

将你的 template.yaml 文件修改为

在此处输入图像描述


推荐阅读