当我检查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,
}
我做错了什么?我已经仔细检查过文件名了。
2条答案
按热度按时间f5emj3cl1#
这是因为lambda中没有名为“requests”的模块,memberr lambda是无服务器的,所以在运行它之前需要配置所有的依赖项。
解决此问题的一种方法是在项目中本地安装该依赖项:
然后再次创建.zip文件(包含依赖项)并上传到lambda函数。
另一种解决方法是在AWS lambda中使用一个自定义层,其中包含您需要的相关“请求”站点包。
https://dev.to/razcodes/how-to-create-a-lambda-layer-in-aws-106m
dced5bon2#
当你的Lambda环境在Python代码中找不到指定的库时,你通常会收到这个错误,这是因为Lambda没有和所有的Python库一起打包。
要解决此错误,请创建一个部署包或Lambda层,其中包含要在Python代码中用于Lambda的库。
确保将为Python导入的库放在/python文件夹中。
在本地环境中,通过运行以下命令将所有库文件安装到python文件夹中:
pip安装库所需内容-t python/
创建预先打包的所有python库,压缩包含所有依赖项的python,并将其放入与AWS上创建的add Layer lambda相关的层中。