我需要在python脚本中进行休息调用,每天运行一次。 我无法打包"请求"使用AWS Lambdas打包到我的python-package中。我收到错误:"无法导入模块' lambda_function':没有名为lambda_function的模块"
我将其分解为hello_world预定义脚本。我可以把它打包成拉链并上传。一切正常。一旦我提出"导入请求"进入文件,我收到此错误。
这是我已经做过的事情:
一切的命名如下:
我想在最后运行的文件如下所示:
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'
我很高兴能得到任何帮助。我已经在这个问题上花了几个小时。
答案 0 :(得分:133)
要使用“请求”模块,您只需从requests
导入botocore.vendored
即可。例如:
from botocore.vendored import requests
def lambda_handler(event, context):
response = requests.get("https://example.com/")
print response.json()
您可以看到this gist了解更多可以直接在AWS lambda中导入的模块
答案 1 :(得分:16)
如果您在AWS Lambda上使用Python,并且需要使用请求,则最好使用urllib3,它目前在AWS Lambda上受支持,您可以直接将其导入,请在urllib3网站上查看示例。
import urllib3
http = urllib3.PoolManager()
r = http.request('GET', 'http://httpbin.org/robots.txt')
r.data
# b'User-agent: *\nDisallow: /deny\n'
r.status
# 200
答案 2 :(得分:14)
我终于解决了问题:我的zip文件中的结构被破坏了。重要的是python脚本和打包的依赖项(作为文件夹)位于zip文件的根目录中。这解决了我的问题。
如果在经过数小时的尝试和失败后发现如此简单的错误,这有点令人沮丧。
答案 3 :(得分:6)
我相信你在Lambda控制台上有lambda_function.py
。您需要首先创建Lambda函数部署包,然后使用控制台上载包。
project-dir
(本地)lambda_function.py
中创建project-dir
,从lambda控制台复制lambda_function.py
的内容并将其粘贴到project-dir/lambda_function.py
pip install requests -t /path/to/project-dir
project-dir
目录的内容,这是您的部署包(Zip目录内容,而不是目录)转到Lambda控制台,选择代码条目类型的上传zip文件并上传部署包。导入请求应该没有任何错误。
答案 4 :(得分:4)
python 3.8 视窗 10
lambda 正在寻找特定的文件夹结构,我们将在以下步骤中以这种方式重新创建 (https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-create):
现在您可以像这样导入请求:
import json
import requests
def lambda_handler(event, context):
# TODO implement
response = requests.get('your_URL')
return {
'statusCode': 200,
'body': json.dumps(response.json())
}
答案 5 :(得分:3)
使用此命令下载文件夹包
pip install requests -t .
在本地计算机上运行此命令,然后压缩您的工作目录,然后将其上传到aws。
答案 6 :(得分:1)
复制while True:
command = input("Enter a command (factor, isprime, end): ")
command = command.lower()
if command != "factor" and command != "isprime" and command != "end":
print("Command", command,"not recognized. Try again!")
elif command == "factor":
num = int(input("Enter an integer > 1: "))
# primeFactorsOf(num)
print("")
elif command == "isprime":
num = int(input("Enter an integer > 1: "))
# findPrime(num)
print("")
elif command == "end":
print("Thanks for using our service! Goodbye.")
break
fron AWS lambda控制台中的内容,并将其粘贴到新的python脚本中,然后另存为lambda_function
。
新建一个文件夹(我将其命名为 package ),并通过在终端中运行以下代码在其中保存lambda_function.py
模块: pip install -t < em>打包请求
将requests
移至文件夹( package )。
转到该文件夹并选择所有内容并压缩它们。
返回AWS Lambda控制台。选择功能,然后在“功能代码”部分下,单击“操作”(在右侧),然后选择lambda_function.py
。
上传文件夹。 lambda_function应该自动上传。
尽情享受。