首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未在AWS lambda层工作的pysftp库

未在AWS lambda层工作的pysftp库
EN

Stack Overflow用户
提问于 2020-04-21 06:11:13
回答 1查看 4.7K关注 0票数 6

我希望使用EC2 pysftp库(Python )将文件上传到实例。因此,我创建了一个小Python脚本,它使用下面的行来连接

代码语言:javascript
复制
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库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-21 07:03:06

我构建了pysftp层并使用python3.8在我的lambda上测试了它。只是为了看一下导入和基本打印:

代码语言:javascript
复制
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做的是:

代码语言:javascript
复制
# 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命令基于该链接中的内容)。

希望这能有所帮助

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61337007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档