使用 Boto 3 将文件从 AWS S3 传输到 SFTP

Transfer file from AWS S3 to SFTP using Boto 3

我是使用 Boto3 的初学者,我想将文件从 S3 存储桶直接传输到 SFTP 服务器。

我的最终目标是为 AWS Glue 编写 Python 脚本。

我找到了一些文章,其中介绍了如何将文件从 SFTP 传输到 S3 存储桶:
https://medium.com/better-programming/transfer-file-from-ftp-server-to-a-s3-bucket-using-python-7f9e51f44e35

不幸的是,我找不到任何执行相反操作的东西。你有suggestions/ideas吗?


我的第一次错误尝试如下。

但我想避免将文件下载到我的本地内存以便将其移动到 SFTP。

import pysftp
import boto3

# get clients
s3_gl = boto3.client('s3', aws_access_key_id='', aws_secret_access_key='')

# parameters
bucket_gl = ''
gl_data = ''
gl_script = ''

source_response = s3_gl.get_object(Bucket=bucket_gl,Key=gl_script+'file.csv')
print(source_response['Body'].read().decode('utf-8'))

#---------------------------------

srv = pysftp.Connection(host="", username="", password="")

with srv.cd('relevant folder in sftp'): 
    srv.put(source_response['Body'].read().decode('utf-8')) 

# Closes the connection
srv.close()

"transfer ... directly" 可以表示很多不同的东西。

假设您要通过本地机器(运行 Python 代码的地方)传输文件,而不实际将文件的临时副本存储到本地文件系统。


SFTP上传,可以使用Paramiko library.

假设您已经准备好 Paramiko SFTPClient (sftp) 和 Boto 3 client (s3) 实例(您链接的文章中涵盖的内容你的问题),你可以简单地使用类似文件的对象将它们“粘合”在一起:

with sftp.open('/sftp/path/filename', 'wb', 32768) as f:
    s3.download_fileobj('mybucket', 'mykey', f)

关于 32768 论点的目的,请参阅 Writing to a file on SFTP server opened using pysftp "open" method is slow