我想使用将文件上传到 EC2 实例pysftp库(Python 脚本)。所以我创建了一个小的Python脚本,它使用下面的行来连接
pysftp.Connection(
host=Constants.MY_HOST_NAME,
username=Constants.MY_EC2_INSTANCE_USERNAME,
private_key="./mypemfilelocation.pem",
)
some code here .....
pysftp.put(file_to_be_upload, ec2_remote_file_path)
该脚本将使用 .pem 文件将文件从我的本地 Windows 计算机上传到 EC2 实例,并且它可以正常工作。
现在我想使用以下方法执行此操作AWS lambda 与 API 网关功能。
所以我已经将Python脚本上传到AWS lambda。现在我不确定如何在AWS lambda中使用pysftp库,所以我找到了在AWS lambda层中添加pysftp库层的解决方案。我用它做了
pip3 install pysftp -t ./library_folder
我将上述文件夹压缩并添加到 AWS lambda 层中。
但我仍然遇到了很多错误,就像一一一样:-
没有名为“pysftp”的模块
没有名为“paramiko”的模块
未定义的符号:PyInt_FromLong
无法从部分初始化的模块“bcrypt”导入名称“_bcrypt”(很可能是由于循环导入)
未找到 cffi 模块
我只是淡出上述错误,但没有找到正确的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?
I build pysftp
层并使用 python 3.8 在我的 lambda 上进行了测试。只是为了查看导入和基本打印:
import json
import pysftp
def lambda_handler(event, context):
# TODO implement
print(dir(pysftp))
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
我使用以下 docker 工具来构建pysftp
layer:
- https://github.com/lambci/docker-lambda
所以我做了什么pysftp
was:
# create pysftp fresh python 3.8 environment
python -m venv pysftp
# activate it
source pysftp/bin/activate
cd pysftp
# install pysftp in the environemnt
pip3 install pysftp
# generate requirements.txt
pip freeze > requirements.txt
# use docker to construct the layer
docker run --rm -v `pwd`:/var/task:z lambci/lambda:build-python3.8 python3.8 -m pip --isolated install -t ./mylayer -r requirements.txt
zip -r pysftp-layer.zip .
剩下的就是将 zip 上传到 s3,在 AWS 控制台中创建新层,设置Compatible runtime
到 python 3.8 并在我的测试 lambda 函数中使用它。
您还可以检查here如何使用这个 docker 工具(我使用的 docker 命令基于该链接中的内容)。
希望这可以帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)