【问题标题】:When testing my aws lambda getting error:- "Unable to import module 'app': No module named 'pyodbc'",测试我的 aws lambda 时出现错误:-“无法导入模块‘app’:没有名为‘pyodbc’的模块”,
【发布时间】:2020-01-10 20:53:56
【问题描述】:

pyodbc 包含在 zip 中,但在尝试测试 lambda 函数时仍然报错。

使用 pip3 安装 pyodbc 并在创建 lambda zip 时包含 lib 文件。

import logging
import rds_config
import pyodbc

# import requests

#rds settings
rds_host  = rds_config.server
name = rds_config.username
password = rds_config.password
db_name = rds_config.database

logger = logging.getLogger()
logger.setLevel(logging.INFO)

try:
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+rds_host+';DATABASE='+db_name+';UID='+name+';PWD='+ password);
except pyodbc.Error as e:
    logger.error("ERROR: Unexpected error: Could not connect to mssql server instance.")
    logger.error(e)
    sys.exit()

应该可以运行aws lambda函数的测试。

【问题讨论】:

  • 能否请您检查以下答案是否有帮助

标签: amazon-web-services aws-lambda python-3.7 pyodbc


【解决方案1】:

要将所有内容安装在同一目录中,请使用以下命令

pip install pyodbc -t .

或者,如果您提到了 requirements.txt 中的所有内容

pip install -r requirements.txt -t .

之后,压缩整个目录并上传到 Lambda 控制台。

【讨论】:

  • 我在帖子中找到了上述步骤并尝试了但仍然没有成功。
  • Python 库 pymssql 给出错误 "(20002, 'DB-Lib 错误消息 20002, 严重性 9:\\nAdaptive Server connection failed) 如果您的 RDS 实例通过将 rds.force_ssl 值设置为强制 SSL 1 和使用的 pymssql 模块没有 SSL 支持。
【解决方案2】:
  • 确保您的代码具有处理程序 lambda_handler,并且在 UI 上配置相同的处理程序只是为了交叉检查。
import json

def lambda_handler(event, context):
    # TODO implement 
    # All your code
    # goes here
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

  • Handler – Handler 是 AWS Lambda 调用以开始执行您的 Lambda 函数的函数。您在创建 Lambda 函数时确定处理程序。当调用 Lambda 函数时,AWS Lambda 通过调用处理函数开始执行您的代码。 AWS Lambda 将任何事件数据作为第一个参数传递给此处理程序。您的处理程序应处理传入的事件数据,并可能在您的代码中调用任何其他函数/方法。

  • lambda_function 文件导出一个名为 lambda_handler 的函数,该函数接受一个事件对象和一个上下文对象。这是调用函数时 Lambda 调用的处理函数。 Python 函数运行时从 Lambda 获取调用事件并将它们传递给处理程序。在函数配置中,handler值为lambda_function.lambda_handleraws docs

  • lambda_handler 文件 (.py) 应位于创建的 zip 的根目录。

  • 值得使用pip install -r requirements.txt -t .pip install pyodbc -t .安装。

  • lambda 还需要一个 iam role

  • github example 这可能对 iam 角色和 lambda 有帮助。您还可以查看其他存储库(s3-trigger-lambda、lambda-invoking-lambda)。

【讨论】:

  • 我已经处理了突出显示的选项并尝试了但仍然没有运气。我会检查 iam 角色。
  • @dkm007 我添加了一个 github 代码库,它可能有助于识别 iam 角色和其他 sutff。请检查上面的更新答案。
猜你喜欢
  • 2021-08-16
  • 2023-01-05
  • 2020-11-06
  • 2021-08-28
  • 2016-12-09
  • 2021-06-28
  • 2018-08-01
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多