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



我是使用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

不幸的是,我找不到任何能起相反作用的东西。你有什么建议/想法吗?


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

但我希望避免将while文件下载到本地内存,以便将其移动到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()

"转移直接">可以指许多不同的事物。

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


对于SFTP上传,您可以使用Paramiko库。

假设您已经准备好了ParamikoSFTPClient(sftp(和Boto 3client(s3(实例(您在问题中链接的文章中涵盖了什么(,您可以简单地";"胶水";它们一起使用类似文件的对象:

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

对于32768参数的目的,请参阅写入使用Paramiko/pysftp打开的SFTP服务器上的文件";打开";方法很慢


有关相反的方向,请参阅:
使用Paramiko 将文件从SFTP传输到S3

最新更新