ins*_*son 11 amazon-web-services python-2.7 aws-lambda
我是AWS的新手,我遇到了一些问题.这是我的代码:
from __future__ import print_function
from urllib2 import Request, urlopen, URLError
import requests
import boto3
import json
def lambda_handler(event, context):
url = "https://globalcurrencies.xignite.com/xGlobalCurrencies.json/GetHistoricalRatesRange?Symbol=BTCUSD&PriceType=Mid&StartDate=01/01/2017&EndDate=10/27/2017&PeriodType=Daily&FixingTime=22:00&_token=some_token_xyz"
response = requests.get(url).json()
# print json.dumps(response, indent=4) # gives a syntax error
return response
Run Code Online (Sandbox Code Playgroud)
该文件的名称是lambda_function.py; 我已经检查了stackoverflow上的类似问题,有些人提到我必须更改文件命名.但它没有帮助.以下是python方法的命名方式:
这是我得到的错误:
START RequestId: cf24e9be-bbef-11e7-97b4-d9b586307f3e Version: $LATEST
Unable to import module 'lambda_function': No module named requests
当尝试打印时,它给我一个语法错误.抱歉格式化.有什么建议?
Unb*_*ess 33
NB requests已包含在运行时 Python 3.7 的 lambda 函数中:
实际上:
from pkg_resources import working_set
def lambda_handler(event, context):
for p in list(working_set):
print(p.project_name, p.version)
Run Code Online (Sandbox Code Playgroud)
urllib3 1.26.6 六 1.16.0 s3transfer 0.6.0 请求 2.26.0 python-dateutil 2.8.2 jmespath 1.0.1 idna 2.10 字符集标准化器 2.0.12 chardet 4.0.0 certifi 2020.11.8 botocore 1.29.90 boto3 1.26.90安装工具 47.1.0 点 22.0.4
对于所有其他运行时,请参见下文。
如果您想包含不属于Python标准库的库,例如requests,您可以使用lambda的层。
1.创建zip
这是一个 zip 文件,其中包含您希望 lambda 函数使用的所有库。首先,创建一个名为的文件夹python:
$ mkdir python
$ cd python
Run Code Online (Sandbox Code Playgroud)
然后,在其中安装您需要的 Python 库。您可以使用单个库来完成此操作:
$ pip install --target . requests
Run Code Online (Sandbox Code Playgroud)
或使用库列表(requirements.txt)
$ pip install --target . -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
最后,拉上所有东西的拉链。
...在重击中:
$ zip -r dependencies.zip ../python
Run Code Online (Sandbox Code Playgroud)
...在 Powershell 中:
$ Compress-Archive -Path . -DestinationPath dependencies.zip
Run Code Online (Sandbox Code Playgroud)
2. 创建图层
您可以在 AWS 控制台或 CLI 中执行此操作。请遵循这些说明。
3. 将层添加到 lambda 函数
您可以使用Add a layerlambda 页面或 CLI 中的选项来执行此操作。请遵循这些说明。
Nil*_*_DS 24
请求不是AWS lambda中的标准库.
所以有两种解决方法:
1-从Botocore库堆栈导入它:
from botocore.vendored import requests
Run Code Online (Sandbox Code Playgroud)
这里有一个列表,列出了要在lambda中导入的所有可用库
2- 使用virtualenv 创建部署包.
小智 6
这是因为在lambda中运行时缺少请求库-它可能已全局安装在本地计算机上。如果您pip install requests -t .
在与源代码相同的目录中运行:
将请求包安装在该目录中,那么您可以将其与lambda_function.py一起上传到lambda。您可能需要对boto3和json执行相同的操作:
pip install boto3 -t .
pip install json -t .
小智 -9
你必须在Python代码中这样命名你的lambda:
def lambda_function(event, context):
Run Code Online (Sandbox Code Playgroud)
并在 lambda 控制台处理程序中:
main.lambda_function
Run Code Online (Sandbox Code Playgroud)
对于您的请求错误,在上传到 lambda 之前,您的 .zip 中必须包含该模块的文件夹。
| 归档时间: |
|
| 查看次数: |
16867 次 |
| 最近记录: |