Python 无法在AWS Lambda上使用请求模块
我需要在python脚本中执行rest调用,该脚本每天运行一次。 我无法使用AWS Lambdas将“requests”包打包到python包中。我收到错误:“无法导入模块‘lambda_函数’:没有名为lambda_函数的模块” 我将其分解为hello_world预定义脚本。我可以把它打包成一个zip文件并上传。一切正常。一旦我将“导入请求”放入文件中,就会出现此错误 以下是我已经做过的:Python 无法在AWS Lambda上使用请求模块,python,python-2.7,amazon-web-services,aws-lambda,Python,Python 2.7,Amazon Web Services,Aws Lambda,我需要在python脚本中执行rest调用,该脚本每天运行一次。 我无法使用AWS Lambdas将“requests”包打包到python包中。我收到错误:“无法导入模块‘lambda_函数’:没有名为lambda_函数的模块” 我将其分解为hello_world预定义脚本。我可以把它打包成一个zip文件并上传。一切正常。一旦我将“导入请求”放入文件中,就会出现此错误 以下是我已经做过的: zip和项目文件夹(包括子文件夹)的权限设置为“chmod 777”。所以权限应该不是问题 脚本本身位于
import requests
import json
def lambda_handler(event, context):
url = 'xxx.elasticbeanstalk.com/users/login'
headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
response = requests.put(url, headers=headers, verify=False)
return 'hello lambda_handler'
import json
import requests
def lambda_handler(event, context):
# TODO implement
response = requests.get('your_URL')
return {
'statusCode': 200,
'body': json.dumps(response.json())
}
- zip文件:lambda_function.zip
- py文件:lambda_function.py
- 处理程序方法:lambda_处理程序(事件、上下文)
- “webconfig:lambda_function.lambda_处理程序”中的处理程序定义
import requests
import json
def lambda_handler(event, context):
url = 'xxx.elasticbeanstalk.com/users/login'
headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
response = requests.put(url, headers=headers, verify=False)
return 'hello lambda_handler'
import json
import requests
def lambda_handler(event, context):
# TODO implement
response = requests.get('your_URL')
return {
'statusCode': 200,
'body': json.dumps(response.json())
}
我很高兴能得到任何帮助。我已经在这个问题上花了好几个小时。我终于解决了这个问题:我的zip文件中的结构被破坏。重要的是python脚本和打包的依赖项(作为文件夹)位于zip文件的根目录中。这解决了我的问题
如果在数小时的尝试和失败后发现如此简单的错误,那就有点令人沮丧了。我相信您在lambda控制台上有
lambda_function.py
。您需要首先创建lambda function部署包,然后使用控制台上载包
- 您可以在系统(本地)上创建目录,例如
project dir
- 在
中创建project dir
,从lambda控制台复制lambda_function.py
的内容,并将其粘贴到lambda_function.py
project dir/lambda_function.py
pip安装请求-t/path/to/project dir
- 压缩
目录的内容,这是您的部署包(压缩目录内容,而不是目录)project dir
转到Lambda控制台,选择“在代码输入类型中上载zip文件”并上载部署包。导入请求应无任何错误。编辑:2019年10月21日,Botocore删除了请求的供应商版本: 编辑2:(2020年3月10日):Lambda服务捆绑AWS SDK中的请求模块的弃用日期现在是2021年1月30日。 要使用请求模块,您只需从
botocore.vendored
导入请求即可。例如:
from botocore.vendored import requests
def lambda_handler(event, context):
response = requests.get("https://httpbin.org/get", timeout=10)
print(response.json())
您可以查看了解更多可直接导入AWS lambda的模块。使用此命令下载文件夹包
pip install requests -t .
在本地计算机上运行此命令,然后压缩工作目录,然后上载到aws。如果您在aws Lambda上使用Python,并且需要使用请求,您最好使用,aws Lambda当前支持它,您可以直接导入它,请查看urllib3站点上的示例
导入urllib3
http=urllib3.PoolManager()
r=http.request('GET','http://httpbin.org/robots.txt')
r、 资料
#b'用户代理:*\n默认:/deny\n'
r、 地位
# 200
从AWS lambda控制台复制lambda_函数中的所有内容,并将其粘贴到新的python脚本中,并将其另存为lambda_函数.py
创建一个新文件夹(我将其命名为package),并通过在终端中运行以下代码将请求
模块保存在其中:pip install-t package requests
将lambda_function.py
移动到文件夹(包)中
转到文件夹,选择所有内容并将其压缩
返回AWS Lambda控制台。选择功能,在功能代码部分下,单击“操作”(右侧)并选择上载.zip文件
上传文件夹。lambda_函数应自动上传
快跑,尽情享受
python 3.8 windows 10
lambda正在寻找一个特定的文件夹结构,我们将按照以下步骤()以这种方式重新创建:
在桌面上创建一个名为“python”的文件夹,打开一个cmd终端:cd desktop
pip安装——目标python请求
右键单击python文件夹并将其压缩,然后将压缩重命名为“requests.zip”-现在,如果查看压缩内部,您应该会看到python文件夹
aws控制台>lambda>图层>创建图层=>命名图层/upload requests.zip
aws控制台>功能>创建功能=>在“设计器”框中选择图层,然后选择“添加图层”。选择自定义图层并选择
你的图层
单击设计器框中的lambda符号返回函数屏幕。现在您可以再次看到“函数代码”。单击lambda_function.py
现在,您可以像这样导入请求:
import requests
import json
def lambda_handler(event, context):
url = 'xxx.elasticbeanstalk.com/users/login'
headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
response = requests.put(url, headers=headers, verify=False)
return 'hello lambda_handler'
import json
import requests
def lambda_handler(event, context):
# TODO implement
response = requests.get('your_URL')
return {
'statusCode': 200,
'body': json.dumps(response.json())
}
在您的问题中,-t
选项在pip install
命令中的位置不正确-它一定是pip install requests-t PATH_TO_ROOT_FOLDER
。您是键入错误,还是这就是您真正运行它的方式?@Leon:对。只是检查了历史记录,我按照您在这里提到的那样做了。:)所以这并没有导致错误问题。你在本地使用什么版本的Python?@Leon:2.7.12(15个字符)你看过指南了吗?你的脚本会返回json吗?我也在尝试类似的操作,但会一直得到“not json serialisable”。但是我没有“import json”…没有“import json”的代码在本地可以正常工作,所以不确定为什么它不会在Lambda中运行。@kafka你可能需要导入json库。虽然不确定,但AWS