I was in the need to move files with a aws-lambda from a SFTP server to my AWS account, then I've found this article:
https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/
Talking about paramiko as a SSHclient candidate to move files over ssh.
Then I've written this calss wrapper in python to be used from my serverless handler file:
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() On my local machine it works as expected (test.py):
import ftp_client sftp = ftp_client.FTPClient( "host", "myuser", "password") file = sftp.get('/testFile.txt') print(file) But when I deploy it with serverless and run the handler.py function (same as the test.py above) I get back the error:
Unable to import module 'handler': No module named 'paramiko' Looks like the deploy is unable to import paramiko (by the article above it seems like it should be available for lambda python 3 on AWS) isn't it?
If not what's the best practice for this case? Should I include the library into my local project and package/deploy it to aws?