Vik*_*wad 4 python amazon-web-services pysftp aws-lambda aws-lambda-layers
我想使用pysftp库(Python 脚本)将文件上传到 EC2 实例。所以我创建了小的 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)
Run Code Online (Sandbox Code Playgroud)
此脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。
现在我想使用具有 API 网关功能的AWS lambda来执行此操作。
所以我已将 Python 脚本上传到 AWS lambda。现在我不确定如何在 AWS lambda 中使用 pysftp 库,所以我找到了在 AWS lambda 层中添加 pysftp 库层的解决方案。我做到了
pip3 安装 pysftp -t ./library_folder
我制作了上述文件夹的 zip 并添加到 AWS lambda 层中。
但是我仍然有很多错误,比如一个一个:-
没有名为“pysftp”的模块
没有名为“paramiko”的模块
未定义符号:PyInt_FromLong
无法从部分初始化的模块 'bcrypt' 导入名称 '_bcrypt'(很可能是由于循环导入)
找不到 cffi 模块
我只是淡出上述错误我没有找到合适的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?
我构建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!')
}
Run Code Online (Sandbox Code Playgroud)
我使用以下 docker 工具来构建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 .
Run Code Online (Sandbox Code Playgroud)
剩下的就是将 zip 上传到 s3,在 AWS 控制台中创建新层,设置Compatible runtime为 python 3.8 并在我的测试 lambda 函数中使用它。
您还可以在此处查看如何使用此 docker 工具(我使用的 docker 命令基于该链接中的内容)。
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |