![](/img/trans.png)
[英]How to use chrome-aws-lambda module with AWS lambda functions?
[英]Cannot use Requests-Module on AWS Lambda
我需要在每天運行一次的 python 腳本中進行休息調用。 我無法使用 AWS Lambdas 將“請求”包打包到我的 python 包中。 我收到錯誤消息:“無法導入模塊‘lambda_function’:沒有名為 lambda_function 的模塊”
我將其分解為 hello_world 預定義腳本。 我可以將它打包成一個 zip 文件並上傳。 一切正常。 一旦我將“導入請求”放入文件中,就會收到此錯誤。
這是我已經做過的:
一切的命名看起來像這樣:
我最終要運行的文件如下所示:
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'
我很高興能提供任何幫助。 我已經在這個問題上使用了多個小時。
編輯:在 2019 年 10 月 21 日,Botocore 刪除了請求的供應商版本: https : //github.com/boto/botocore/pull/1829 。
編輯 2:(2020 年 3 月 10 日):Lambda 服務在 AWS 開發工具包中捆綁請求模塊的棄用日期現在是 2021 年 1 月 30 日。https: //aws.amazon.com/blogs/compute/upcoming-changes -to-the-python-sdk-in-aws-lambda/
要使用 requests 模塊,您可以簡單地從botocore.vendored
導入requests
。 例如:
from botocore.vendored import requests
def lambda_handler(event, context):
response = requests.get("https://httpbin.org/get", timeout=10)
print(response.json())
您可以查看此要點以了解更多可以直接在 AWS lambda 中導入的模塊。
如果您在 AWS Lambda 上使用 Python,並且需要使用requests ,則最好使用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
我終於解決了這個問題:我的 zip 文件中的結構被破壞了。 重要的是,python 腳本和打包的依賴項(作為文件夾)位於 zip 文件的根目錄中。 這解決了我的問題。
如果您在數小時的嘗試和失敗后發現如此簡單的錯誤,這有點令人沮喪。
我相信您在 Lambda 控制台上有lambda_function.py
。 您需要先創建 Lambda 函數部署包,然后使用控制台上傳包。
project-dir
(本地)project-dir
創建lambda_function.py
,從 lambda 控制台復制lambda_function.py
的內容並將其粘貼到project-dir/lambda_function.py
pip install requests -t /path/to/project-dir
project-dir
目錄的內容,也就是你的部署包(壓縮目錄內容,不是目錄)轉到 Lambda 控制台,在代碼條目類型中選擇上傳 zip 文件並上傳您的部署包。 導入請求應該可以正常工作而不會出現任何錯誤。
使用此命令下載文件夾包
pip install requests -t .
在您的本地機器上運行此命令,然后壓縮您的工作目錄,然后上傳到 aws。
蟒蛇 3.8 視窗 10
lambda 正在尋找特定的文件夾結構,我們將在以下步驟中以這種方式重新創建 ( https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-創建):
現在您可以像這樣導入請求:
import json
import requests
def lambda_handler(event, context):
# TODO implement
response = requests.get('your_URL')
return {
'statusCode': 200,
'body': json.dumps(response.json())
}
從 AWS lambda 控制台復制lambda_function
中的任何內容並將其粘貼到新的 python 腳本中,並將其另存為lambda_function.py
。
創建一個新文件夾(我將其命名為package )並通過在終端中運行以下代碼將requests
模塊保存在其中: pip install -t package requests
將lambda_function.py
移動到文件夾 ( package ) 中。
轉到文件夾並選擇所有內容並壓縮它們。
返回 AWS Lambda 控制台。 選擇函數並在函數代碼部分下,單擊“操作”(在右側)並選擇Upload a .zip file
。
上傳文件夾。 lambda_function 應該自動上傳。
運行和享受。
大多數在某種程度上是正確的,但對於 AWS 初學者來說信息量不夠。 這是我的長篇簡歷,訪問請求功能需要做什么:
% mkdir lambda-function
% cd lambda-function
% vi lambda_function.py
import requests
def lambda_handler(event, context):
response = requests.get("https://www.test.com/")
print(response.text)
return response.text
% pip install --target ./package requests
% cd package
zip -r ../deployment-package.zip .
% cd ..
% zip -g deployment-package.zip lambda_function.py
通過指定此 arn (ap-south-1) 向您的 lambda 函數添加一個層
arn:aws:lambda:ap-south-1:770693421928:layer:Klayers-p38-requests-html:10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.