AWS Lambda python套接字异常:不允许操作(1)

时间:2018-07-26 13:46:51

标签: python amazon-web-services aws-lambda paramiko

我有一个Python 3.6 AWS Lambda函数“ ftp_sender”,该函数由来自S3的ObjectCreated事件触发。然后下载文件并将其发送到SFTP服务器。

在CloudWatch日志中,我不断看到这样的消息:

[ERROR] 2018-07-26T12:30:21.543Z a56f9678-90c9-11e8-bf10-ddb8557d0ff0 Socket exception: Operation not permitted (1)

此消息甚至在功能开始工作之前就出现在随机位置,例如:

def ftp_sender(event, context):
    # The error can be triggered here
    print(event)

这似乎不是真正的错误,但也许有人知道它的含义吗?

[编辑] 看来是paramiko图书馆造成的问题。我在函数内有以下类:

    class SftpSender:

    def __init__(self, hostname, username, the_password, sftp_port=22, working_directory=''):
        self.hostname = hostname
        self.username = username
        print('SFTP port: %s' % sftp_port)
        self.transport = paramiko.Transport((hostname, sftp_port))
        self.transport.connect(username=username, password=the_password)
        self.sftp = paramiko.SFTPClient.from_transport(self.transport)
        # self.transport.set_missing_host_key_policy(paramiko.WarningPolicy())
        self.folder = working_directory

    def send_file(self, filename, retries=4, timeout_between_retries=10, verb=True, the_lambda_mode=False):
        retry_number = 0
        sending_result = 'Not run'
        if the_lambda_mode:
            os.chdir("/tmp/")

        if not os.path.isfile(filename):
            return "Error: File %s is not found" % filename

        while retry_number < retries:
            if verb:
                print('Sending %s to %s@%s (to folder "%s") retry %s of %s\n' % (filename, self.username, self.hostname, self.folder, retry_number, retries))

            try:
                destination_name = self.folder + '/' + filename
                sending_result = self.sftp.put(filename, destination_name)
                return 'OK'
            except Exception as e:
                print('Error: The following exception occured: "%s", result: "%s"' % (e, sending_result))
                sleep(timeout_between_retries)
                retry_number += 1
                return 'Error: failed to send file %s (%s)' % (filename, e)

0 个答案:

没有答案