我想要实现什么
使用 AWS Lambda 抓取网站并将数据保存在 S3 上。
我遇到的问题
当我执行 Lambda 时,出现以下错误消息。
{“errorMessage”:“无法导入模块'lambda_function':不能
从“urllib3.util.ssl_”导入名称“DEFAULT_CIPHERS”
(/opt/python/urllib3/util/ssl_.py)”,“错误类型”:
“运行时.ImportModuleError”,“requestId”:
“fb66bea9-cbad-4bd3-bd4d-6125454e21be”,“stackTrace”:[]}
Code
最小 Lambda 代码如下。
import requests
import boto3
def lambda_handler(event, context):
s3 = boto3.client('s3')
upload_res = s3.put_object(Bucket='horserace-dx', Key='/raw/a.html', Body='testtext')
return event
Lambda 上添加了一层。文件保存在python
使用以下命令创建文件夹,冻结在 zip 文件中,然后作为层上传到 AWS Lambda。
!pip install requests -t ./python --no-user
!pip install pandas -t ./python --no-user
!pip install beautifulsoup4 -t ./python --no-user
- 水桶
horserace-dx
exists
- 文件夹
raw
exists
- Lambda 的角色已正确设置。它可以读取和写入S3
- Lambda 的运行时是 Python 3.9。本地计算机的python版本是3.9.13。
到目前为止我做了什么
我搜索“无法从'urllib3.util.ssl_'导入名称'DEFAULT_CIPHERS'”并找到了一些建议。我用以下代码制作了图层,然后再次尝试,但没有成功。
!pip install requests -t ./python --no-user
!pip install pandas -t ./python --no-user
!pip install beautifulsoup4 -t ./python --no-user
!pip install urllib3==1.26.15 -t ./python --no-user
那么我应该怎样做才能达到我想要达到的目的呢?任何建议将不胜感激。
无法从“urllib3.util.ssl_”导入名称“DEFAULT_CIPHERS”
您遇到此问题是因为您使用的 botocore 尚不支持 urllib3 2.0。
由于您要部署到 AWS Lambda,因此您需要显式固定到urllib3<2
在您的项目中,以确保 urllib3 2.0 不会带入您的环境中。
(Source https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html#importerror-cannot-import-name-default-ciphers-from-urllib3-util-ssl)
urllib3<2
Follow 本指南 https://docs.aws.amazon.com/lambda/latest/dg/python-package.html了解如何使用 .zip 文件存档部署 Python Lambda 函数。
如果您无法通过 .zip 文件使其工作,请考虑通过容器映像进行部署,而不是按照以下方式进行部署本指南 https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-create-from-base.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)