我需要将aws-lambda的文件从SFTP服务器移动到我的AWS账户, 然后我找到了这篇文章:
https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/
谈论paramiko作为SSH客户端候选对象,以通过ssh移动文件。
然后,我用python编写了这个calss包装器,可用于我的无服务器处理程序文件:
import paramiko
import sys
class FTPClient(object):
def __init__(self, hostname, username, password):
"""
creates ftp connection
Args:
hostname (string): endpoint of the ftp server
username (string): username for logging in on the ftp server
password (string): password for logging in on the ftp server
"""
try:
self._host = hostname
self._port = 22
#lets you save results of the download into a log file.
#paramiko.util.log_to_file("path/to/log/file.txt")
self._sftpTransport = paramiko.Transport((self._host, self._port))
self._sftpTransport.connect(username=username, password=password)
self._sftp = paramiko.SFTPClient.from_transport(self._sftpTransport)
except:
print ("Unexpected error" , sys.exc_info())
raise
def get(self, sftpPath):
"""
creates ftp connection
Args:
sftpPath = "path/to/file/on/sftp/to/be/downloaded"
"""
localPath="/tmp/temp-download.txt"
self._sftp.get(sftpPath, localPath)
self._sftp.close()
tmpfile = open(localPath, 'r')
return tmpfile.read()
def close(self):
self._sftpTransport.close()
在我的本地计算机上,它按预期运行(test.py):
import ftp_client
sftp = ftp_client.FTPClient(
"host",
"myuser",
"password")
file = sftp.get('/testFile.txt')
print(file)
但是,当我使用无服务器部署它并运行handler.py函数(与上面的test.py相同)时,我会得到错误消息:
Unable to import module 'handler': No module named 'paramiko'
看起来部署无法导入paramiko(通过以上文章,它似乎应该适用于AWS上的lambda python 3)是不是
如果不是这种情况的最佳做法是什么?我应该将库包含在本地项目中,然后打包/部署到AWS吗?
答案 0 :(得分:1)
如果您使用
custom:
pythonRequirements:
zip: true
在serverless.yml中,您必须在处理程序的开头使用此代码段
try:
import unzip_requirements
except ImportError:
pass
所有可能的详细信息都可以在Serverless Python Requirements documentation
中找到答案 1 :(得分:0)
您必须提供未在AWS的Python运行时中安装的所有依赖项。
看看教程中的步骤7 。看起来他正在将虚拟环境的依赖项添加到zip文件中。因此,我假设您的ZIP文件包含以下内容:
请帮助我。
答案 2 :(得分:0)
全面的指南教程位于:
https://serverless.com/blog/serverless-python-packaging/
使用serverless-python-requirements软件包 作为无服务器节点插件。
在部署到AWS lambda上之前,需要创建一个虚拟环境和Docker Deamon打包无服务器项目
答案 3 :(得分:0)
您必须创建一个virtualenv,安装依赖项,然后将所有文件压缩在 sites-packages /
下sudo pip install virtualenv
virtualenv -p python3 myvirtualenv
source myvirtualenv/bin/activate
pip install paramiko
cp handler.py myvirtualenv/lib/python
zip -r myvirtualenv/lib/python3.6/site-packages/ -O package.zip
然后将 package.zip 上传到lambda