我需要使用 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 吗?
最佳答案
全面的指南教程位于:
https://serverless.com/blog/serverless-python-packaging/
使用 serverless-python-requirements 包 作为无服务器节点插件。
在部署到 AWS lambda 之前,需要创建一个虚拟环境和 Docker Deamon 来打包您的无服务器项目
关于python-3.x - 为什么我得到 : Unable to import module 'handler' : No module named 'paramiko' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51970095/