【问题标题】:connecting sftp server with in AWS在 AWS 中连接 sftp 服务器
【发布时间】:2017-02-26 22:26:50
【问题描述】:

我正在尝试创建一个作业来连接来自 aws 服务的 sftp 服务器,以将文件带入 aws 中的 s3 存储。这将是一项每天晚上运行并将数据带入 S3 的自动化作业。我已经看到有关如何手动连接 aws 并将数据导入 S3 的文档。但是,我没有发现任何关于连接外部 SFTP 服务器以将数据带入 S3 的信息。不知道是否可行?

【问题讨论】:

  • S3 不接受直接连接——至少我从未听说过。由于无法生成 ssh 密钥对,因此无法使用 sftp 或 ssh 登录。此外,它可能是一个集群,而不是服务器。我相信以编程方式与 S3 存储桶交互的唯一方法是使用他们的 SDK。
  • 使用简单的 C# 控制台应用程序,您可以轻松地从 FTP 服务器(FTPS、SFTP)读取文件并将其上传到 S3。
  • 我没有提到文件的内容。它们都是 zip 文件,并且可能使此过程自动化的唯一方法是利用 SDK 库。有没有办法安排工作并定期进行。使用我的 java 或 C# 代码在 AWS 中自动执行此过程的工作。最终这些文件将被加载到 hdfs 中。
  • 如果你在windows机器上部署你的代码,你可以使用任务调度器。
  • 嘿@Mahdi,感谢您的建议。现在我们使用 SQL Server Int.Service 包来执行此过程但是我的目标是将此过程完全移动到云中并且我希望最少的交互,更糟糕的情况是我将使用 SSIS 从 sftp 中提取数据并将文件解压缩到本地文件服务器然后上传这些文件到 s3。

标签: amazon-web-services amazon-s3 sftp amazon-redshift emr


【解决方案1】:

您现在可以使用 AWS 的托管 SFTP 服务。它提供了一个完全托管的 SFTP 服务器,该服务器易于设置,并且可靠、可扩展且耐用。它使用 S3 作为后端来存储文件。

【讨论】:

    【解决方案2】:

    使用 S3FS 直接配置到 S3 的 sftp 连接。

    您需要做的就是安装 S3FS https://github.com/s3fs-fuse/s3fs-fuse/wiki/Installation-Notes

    1. 为 fuse 和 s3cmd 安装依赖项。

      CentOS/RHEL 用户:

    # yum install gcc libstdc++-devel gcc-c++ curl-devel libxml2-devel openssl-devel mailcap

    Ubuntu 用户:

    $ sudo apt-get install build-essential libcurl4-openssl-dev libxml2-dev mime-support
    
    1. 下载并编译最新的fuse

    https://github.com/libfuse/libfuse/releases/download/fuse-2.9.7/fuse-2.9.7.tar.gz

    # cd fuse-2.9.7
    # ./configure --prefix=/usr/local
    # make && make install
    # export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    # ldconfig
    # modprobe fuse
    
    1. 下载并编译最新的 S3FS

    https://code.google.com/archive/p/s3fs/downloads

    # cd /usr/src/
    # wget https://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
    # tar xzf s3fs-1.74.tar.gz
    # cd s3fs-1.74
    # ./configure --prefix=/usr/local
    # make && make install
    

    4。设置访问密钥

    # echo AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY > ~/.passwd-s3fs
    # chmod 600 ~/.passwd-s3fs
    
    1. 安装 S3 存储桶

      # mkdir /tmp/cache

      # mkdir /s3mnt

      # chmod 777 /tmp/cache /s3mnt

      # s3fs -o use_cache=/tmp/cache mydbbackup /s3mnt

    将您的挂载点设为 ftp 用户主目录,这会将使用 sftp 传输的文件定向到 S3。

    注意:不要忘记向您的 S3 存储桶添加权限以允许经过身份验证的 AWS 用户

    【讨论】:

    • S3FS 不是 SFTP。由于 S3 不是传统的文件系统,S3FS 很少是一个好主意。
    • 好吧,我猜 S3 不是执行此任务的好地方,如果我只是从其中一个 EC2 实例连接到外部文件服务器怎么办?
    • 您可以这样做,但它只是在两个 SFTP 服务器之间同步数据。您将无法像存储在 S3 或 Glacier 中那样舒适和安全地维护数据。
    • 我同意你的观点@jbird,S3FS 不是 SFTP,而是使用 FTP 将文件传输到 S3,这是我们目前唯一的选择......当然你会面临延迟问题....@ac_sql 您为什么不尝试在您的 SFTP 服务器上安装 S3 CLI/SDK 并运行将同步所有数据的 cron 作业。如果您不使用 SFTP 将实时数据传输到 S3,这是一个更好的选择,并且您还可以避免延迟问题。
    • @Ali Entertainment SFTP 服务器属于客户,我们没有任何管理员级别的访问权限来在该服务器上安装任何东西。我们所做的就是通过和 etl 工作将数据带入我们当前的环境。但是,当我们将系统迁移到 AWS 时,我们希望直接访问客户的文件服务器,而不是将他们的数据带入我们的环境。
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2020-05-28
    • 2020-10-22
    • 2013-10-17
    • 2011-05-21
    相关资源
    最近更新 更多