我希望使用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)此脚本将使用EC2文件将文件从本地Windows机器上传到.pem实例,并且工作正常。
现在,我希望使用具有API 功能的AWS来执行此操作。
因此,我已经将Python脚本上传到AWS。现在我不知道如何在AWS lambda中使用pysftp库,所以我找到了在AWS lambda层中添加pysftp库层的解决方案。我和他一起做的
pip3安装pysftp -t ./-t_-t
我把上面的文件夹拉链并添加到层中。
但我还是犯了很多错误,就像一个接一个:-
没有名为“pysftp”的模块
没有名为“paramiko”的模块
未定义符号: PyInt_FromLong
无法从部分初始化模块'bcrypt‘导入名称'_bcrypt’(很可能是因为循环导入)
未找到cffi模块
我只是淡出了上面的错误,我没有找到正确的解决办法。如何在AWS lambda中无缝地使用pysftp库?
发布于 2020-04-21 07:03:06
我构建了pysftp层并使用python3.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!')
}我使用了以下对接工具来构建pysftp层:
所以我为pysftp做的是:
# 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设置为python3.8,并在我的测试lambda函数中使用它。
您还可以检查here如何使用这个对接工具(我使用的docker命令基于该链接中的内容)。
希望这能有所帮助
https://stackoverflow.com/questions/61337007
复制相似问题