Python AWS Lambda“;Lambda can';找不到lambda_function.py文件。确保处理程序支持以下格式:file name.method;错误

Python AWS Lambda“;Lambda can';找不到lambda_function.py文件。确保处理程序支持以下格式:file name.method;错误,python,amazon-web-services,aws-lambda,environment-variables,Python,Amazon Web Services,Aws Lambda,Environment Variables,我得到“Lambda找不到文件Lambda_function.py。请确保处理程序支持格式:file name.method。”错误就在AWS Lambda函数代码块上方。 但正如您在这个代码块中看到的,我的文件名是lambda_函数,函数名是lambda_处理程序 import boto3 import os import logging import uuid from webdriver_screenshot import WebDriverScreenshot logger = lo

我得到“Lambda找不到文件Lambda_function.py。请确保处理程序支持格式:file name.method。”错误就在AWS Lambda函数代码块上方。

但正如您在这个代码块中看到的,我的文件名是lambda_函数,函数名是lambda_处理程序

import boto3
import os
import logging
import uuid
from webdriver_screenshot import WebDriverScreenshot

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

s3 = boto3.client('s3')

def lambda_handler(event, context):
    logger.info('## ENVIRONMENT VARIABLES')
    logger.info(os.environ)
 
    screenshot_file = "{}-{}".format(''.join(filter(str.isalpha, os.environ['URL'])), str(uuid.uuid4()))
    driver = WebDriverScreenshot()

    logger.info('Generate fixed height screenshot')
    driver.save_screenshot(os.environ['URL'], '/tmp/{}-fixed.png'.format(screenshot_file), height=1024)

    logger.info('Generate full height screenshot')    
    driver.save_screenshot(os.environ['URL'], '/tmp/{}-full.png'.format(screenshot_file))

    driver.close()

    if all (k in os.environ for k in ('BUCKET','DESTPATH')):
        ## Upload generated screenshot files to S3 bucket.
        s3.upload_file('/tmp/{}-fixed.png'.format(screenshot_file), 
                    os.environ['BUCKET'], 
                    '{}/{}-fixed.png'.format(os.environ['DESTPATH'], screenshot_file))
        s3.upload_file('/tmp/{}-full.png'.format(screenshot_file), 
                    os.environ['BUCKET'], 
                    '{}/{}-full.png'.format(os.environ['DESTPATH'], screenshot_file))
我的代码文件夹是,主python代码在。在AWS Lambda中,我的文件夹正在查找。我不明白是什么问题

更糟糕的是,当我尝试在AWS Lambda环境中测试代码时,出现了。它说:

无法导入模块“lambda_函数”:没有名为“boto3”的模块

但我有boto3模块,它是从我的S3存储桶上传的。这是成功的

我唯一怀疑的是,我可能把环境变量写错了,如图所示:由于我是编码和AWS Lambda的初学者,我只是从某处复制了路径和PYTHONPATH

我不知道下一步该做什么,需要一些支持


谢谢。

不用担心,我可以帮你。对于第一个
Lambda找不到文件Lambda_function.py
问题,请尝试在函数配置中将
src/
前置到处理程序值,因为Python脚本不在顶级目录中。对于与lambda层相关的第二个问题,您确实弄乱了
PYTHONPATH
环境变量。如果使用层,则不需要覆盖此变量。保持不变。

当我尝试在lambda_函数中使用外部模块时,我遇到了同样的问题,在我的例子中,OpenCV作为lambda层。为了使Opencv工作,我必须更改环境变量,使键
PYTHONPATH
具有本节中描述的值
/opt/
。然后我遇到了您描述的相同问题
无法导入模块'lambda_function':没有名为'boto3'的模块
,这有点奇怪,因为boto3假设集成在lambda路径中。在我的理解中,这只是与目录的冲突


它为我解决的方法是将环境变量的值从
/opt/
更改为
/opt:/var/runtime
。希望它能帮助您。

感谢您的快速响应。我真的很感激。我删除了已编辑的环境变量。正如我在第一个地方找到的那样编写“PATH:/var/task/bin”和“PYTHONPATH:/var/task/src:/var/task/lib”。对于第一部分,我应该在运行时设置中写“src/lambda_function.lambda_handler”,还是必须在不同的位置添加它?对不起,如果我问了一些愚蠢的问题,我是一个非常初学者。谢谢。是的,你应该输入
src/lambda_函数。lambda_处理器
@bilalsedefI按照你的建议做了,现在我有另一个错误<代码>“errorMessage:“无法导入模块'src/lambda_函数'”
“无法导入模块'src/lambda_函数”:没有名为'boto3'的模块。
请尝试在代码中打印出
PYTHONPATH
,查看它是否被覆盖。没有更改,仍然会出现boto3错误。即使我把两句话都说出来。