python Runtime.ImportModuleError:无法导入模块(lambda)

0pizxfdo  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(364)

当我检查Lambda函数的cloud watch日志时,我看到以下错误:

[ERROR] Runtime.ImportModuleError: Unable to import module 'trigger_bitbucket_pipeline_from_s3': No module named 'requests'

文件结构:

/bin
    --trigger_bitbucket_pipeline_from_s3.zip
/src
   --trigger_bitbucket_pipeline_from_s3.py
   --/requests (lib folder)
   

lambda.tf

Lambda.tf:

data "archive_file" "lambda_zip" {
  type             = "zip"
  source_file      = "${path.module}/src/trigger_bitbucket_pipeline_from_s3.py"
  output_file_mode = "0666"
  output_path      = "${path.module}/bin/trigger_bitbucket_pipeline_from_s3.zip"
}

resource "aws_lambda_function" "processing_lambda" {
  filename         = data.archive_file.lambda_zip.output_path
  function_name    = "triggering_pipleline_lambda"
  handler          = "trigger_bitbucket_pipeline_from_s3.lambda_handler"
  source_code_hash = data.archive_file.lambda_zip.output_base64sha256
  role             = aws_iam_role.processing_lambda_role.arn

  runtime = "python3.9"

}

我在src/trigger_bitbucket_pipeline_from_s3.py中的lambda函数现在非常简单:

import logging
import requests

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

def lambda_handler(event, context):

    logger.info(f'## EVENT: {event}')

    return {
        'statusCode': 200,
    }

我做错了什么?我已经仔细检查过文件名了。

f5emj3cl

f5emj3cl1#

这是因为lambda中没有名为“requests”的模块,memberr lambda是无服务器的,所以在运行它之前需要配置所有的依赖项。
解决此问题的一种方法是在项目中本地安装该依赖项:

pip install requests -t ./

然后再次创建.zip文件(包含依赖项)并上传到lambda函数。
另一种解决方法是在AWS lambda中使用一个自定义层,其中包含您需要的相关“请求”站点包。
https://dev.to/razcodes/how-to-create-a-lambda-layer-in-aws-106m

dced5bon

dced5bon2#

当你的Lambda环境在Python代码中找不到指定的库时,你通常会收到这个错误,这是因为Lambda没有和所有的Python库一起打包。
要解决此错误,请创建一个部署包或Lambda层,其中包含要在Python代码中用于Lambda的库。

确保将为Python导入的库放在/python文件夹中。

在本地环境中,通过运行以下命令将所有库文件安装到python文件夹中:
pip安装库所需内容-t python/
创建预先打包的所有python库,压缩包含所有依赖项的python,并将其放入与AWS上创建的add Layer lambda相关的层中。

相关问题