为了账号安全,请及时绑定邮箱和手机立即绑定

pysftp 库在 AWS lambda 层中不起作用

pysftp 库在 AWS lambda 层中不起作用

慕虎7371278 2022-10-18 16:44:39
我想使用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)该脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。现在我想使用具有 API Gateway功能的 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 库?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

我使用 python 3.8 在我的 lambda 上构建pysftp层并对其进行了测试。只是为了查看导入和基本打印:


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图层:


https://github.com/lambci/docker-lambda

所以我所做的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为 python 3.8 并在我的测试 lambda 函数中使用它。


您还可以在此处查看如何使用此 docker 工具(我使用的 docker 命令基于该链接中的内容)。


希望这可以帮助


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信