如何使用 AWS CLI 将远程文件传输到我的 S3 存储桶?

问题描述 投票:0回答:3

我尝试遵循 https://stackoverflow.com/a/18136205/6608952 提供的建议,但不确定如何在远程服务器上的 .pem 文件中共享 myAmazonKeypair 路径。

scp -i yourAmazonKeypairPath.pem  fileNameThatYouWantToTransfer.php [email protected]:

命令在几分钟后完成并显示以下内容:

ssh: connect to host

myBucketEndpointName

port 22: Connection timed out

lost connection

我有几个非常大的文件需要传输,并且不想将这些文件下载到我的本地计算机,然后将它们重新上传到 S3 存储桶。

有什么建议吗?

amazon-web-services amazon-s3 scp
3个回答
6
投票

没有直接的方法可以将文件从远程位置上传到 S3。即

URL

因此,要实现这一目标,您有两种选择:

  1. 将文件下载到本地计算机上,然后通过 AWS ConsoleAWS CLI 上传。
  2. 在AWS EC2实例中下载文件并通过AWS CLI上传到S3。

第一种方法很简单,不需要太多解释。

但是对于第二种方法,你需要这样做:

  1. 在与 S3 存储桶相同的区域中创建 EC2 实例。或者,如果您已经有一个实例,则登录/ssh 到它。
  2. 将文件从源下载到 EC2 实例。通过
    wget
    curl
    以方便为准。
  3. 在 EC2 实例上安装 AWS CLI
  4. 创建 IAM 用户并为您的 S3 存储桶授予他权限
  5. 使用您的 IAM 凭证配置您的 AWS CLI
  6. 使用 AWS CLI S3 CP 实用程序将文件上传到 S3 存储桶。
  7. 终止实例,如果您仅为此设置实例

1
投票

使用 shell 脚本轻松完成。如果 files.txt 中有 URL 列表,请按照此处的描述进行操作:

#!/bin/bash input="files.txt" while IFS= read -r line do name=$(basename "$line") echo $name wget $line aws s3 mv $name <YOUR_S3_URI> done < "$input"
或者对于一个文件:

wget <FILE_URL> | aws s3 mv <FILE_NAME> <YOUR_S3_URI>
    

0
投票
虽然仍然无法直接在 S3 中上传远程文件,但

AWS CloudShell(于 2020 年推出)提供了实现此目的的最佳方法。它具有完全在 AWS 网络中运行的性能优势,并且只需使用本地计算机即可轻松完成。

  1. 从 AWS 控制台启动 AWS CloudShell

  2. 按照

    Deepak Chaurdhary 的回答中的说明下载远程文件并将其上传到 S3(AWS CLI 已在您的 CloudShell 实例中安装和配置)。

  3. (可选)如果您的文件大于 CloudShell 中的可用存储量(~ 7GB),您可以在一行中下载/上传,而无需写入磁盘:

    curl -L https://example.com/large.file | aws s3 cp - s3://my-bucket/large.file
    
    
© www.soinside.com 2019 - 2024. All rights reserved.