San*_*tty 3 amazon-web-services python-3.x aws-lambda
我正在创建一个 lambda 函数来分析股票价格并将结果作为 .csv 文件上传到我的 s3 存储桶中。为了做到这一点,我正在使用s3fs. 但我无法将 s3fs 导入我的 lambda 函数。错误信息是
{
"errorMessage": "cannot import name 'resolve_checksum_context' from 'botocore.client' (/var/runtime/botocore/client.py)",
"errorType": "ImportError",
"requestId": "314d356c-c114-4c97-84a2-deb388f6cf8a",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n import s3fs\n",
" File \"/mnt/packages/s3fs/__init__.py\", line 1, in <module>\n from .core import S3FileSystem, S3File\n",
" File \"/mnt/packages/s3fs/core.py\", line 20, in <module>\n import aiobotocore.session\n",
" File \"/mnt/packages/aiobotocore/session.py\", line 7, in <module>\n from .client import AioClientCreator, AioBaseClient\n",
" File \"/mnt/packages/aiobotocore/client.py\", line 2, in <module>\n from botocore.client import logger, PaginatorDocstring, ClientCreator, \\\n"
]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我做了什么?
s3fs包。压缩所需的s3fs包文件并将其作为图层上传(当我将其导入到本地计算机上的虚拟环境时,相同的包没有错误)。错误信息与上面相同
压缩文件具有 AWS 文档中提到的文件结构。AWS 文档
我什至尝试过
sys.path.append('/opt/python/lib/python3.9/site-packages')
import s3fs
Run Code Online (Sandbox Code Playgroud)
/opt是作为图层上传的文件所在的位置
使用 EC 实例将所有包下载到我的 EFS 文件系统中(这包括所有其他 pip 包,包括 boto3、NumPy、pandas 等)。我提到的其他包在加载到我的 lambda 函数中时没有出现任何问题。
sys.path.append("/mnt/packages")
import s3fs
Run Code Online (Sandbox Code Playgroud)
/mnt/packages是 lambda 函数中我的 EFS 文件系统的本地挂载路径。
Name: s3fs
Version: 0.4.2
Run Code Online (Sandbox Code Playgroud)
上述两种方法都显示相同的错误。
相同版本的软件包在我的本地计算机、虚拟环境和 Docker 构建中没有任何问题。该错误似乎仅出现在我的 AWS lambda 函数中。
由于最终目标是从 S3 读取 .cvs 文件并更新结果并重新上传相同的文件。因此,我也愿意了解任何其他可以规避 s3fs 使用的方法。
{
"errorMessage": "Unable to import module 'lambda_function': Install s3fs to access S3",
"errorType": "Runtime.ImportModuleError",
"requestId": "aee2b9a8-699e-43eb-949a-2c0e427696aa",
"stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)
编辑:我能够使用 boto3 上传。解决方案可以在这里找到。但是,是的,当使用 s3fs 时它不起作用。
我遇到了同样的问题,我已经能够通过使用来解决它s3fs==2021.10.0。它涉及其他依赖项中的一些大版本更改,因此可能其中之一导致了问题。这是要求更改版本时诗歌的输出。我认为 botocore 或 aiobotocore 版本是导致问题的原因。
\xe2\x80\xa2 Updating jmespath (1.0.0 -> 0.10.0)\n \xe2\x80\xa2 Updating botocore (1.24.21 -> 1.20.106)\n \xe2\x80\xa2 Updating s3transfer (0.5.2 -> 0.4.2)\n \xe2\x80\xa2 Updating boto3 (1.21.21 -> 1.17.106)\n \xe2\x80\xa2 Updating aiobotocore (2.3.2 -> 1.4.2)\n \xe2\x80\xa2 Updating fsspec (2022.5.0 -> 2021.10.0)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4670 次 |
| 最近记录: |