【问题标题】:How to transfer files between AWS s3 and AWS ec2如何在 AWS s3 和 AWS ec2 之间传输文件
【发布时间】:2013-04-01 09:22:11
【问题描述】:

我正在使用 AWS ec2 实例。在这种情况下,我会生成一些文件。这些操作由用户数据完成。

现在我想通过在用户数据本身中编写代码来将这些文件存储在 s3 上。

  • 那么如何将这些文件存储在 s3 上?
  • 有相关教程吗?

【问题讨论】:

  • 你有什么运气吗?

标签: amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

我假设您需要从新实例复制到 s3。首先创建一个 IAM 角色,这样您就不需要运行 aws configure,这一切都应该在启动时工作。其次安装 cli,然后在用户数据中使用 aws cli 定义您的复制作业。下面是 Ubuntu 18 的示例。将 IAM 角色分配给您的实例。

用户数据:

#!/bin/bash
apt-get update -y
apt install awscli -y
aws s3 cp *Path of data* s3://*destination bucket*  -recursive *--other options*

创建 IAM 角色 1. 访问 IAM 控制台https://console.aws.amazon.com/iam/ 2. 在左侧窗格中,选择角色,然后单击创建角色。 3. 对于选择受信任实体的类型,选择 AWS 服务。选择 EC2。 选择下一步:权限。 4. 对于附加权限策略,选择 AWS 托管策略 包含所需权限或创建自定义策略。 5.点击服务选择服务,在查找服务框中输入S3,点击 S3,选择操作(全部或读取+写入以及您可能需要的其他操作) 6. 点击资源,选择资源(可以输入所有资源或 使用 ARN 限制到特定存储桶) 7. 单击下一步:查看策略。输入名称和描述。点击 创建策略。 8.返回创建角色页面,点击刷新,按你的名字过滤策略 分配,选择策略。 9. 单击下一步:标签,然后添加任何所需的标签 10. 在 Review 页面上,输入角色的名称和描述,然后 点击创建角色。

参考文献

【讨论】:

    【解决方案2】:

    我认为实际上最好的答案实际上是上面的,使用aws 命令,但是对于您不想安装其他任何东西的情况,还值得一提的是,您可以下载文件通过 HTTPS,例如打开浏览器并导航到:

    https://s3.amazonaws.com/(bucketName)/(relativePath)/(fileName)

    这也意味着您可以只使用wgetcurl 从shell 提示符进行传输。

    【讨论】:

      【解决方案3】:

      在 AWS CLI 上,我使用以下命令将 zip 文件从 EC2 实例复制到 S3

      aws s3 cp file-name.zip s3://bucket-name/
      

      【讨论】:

        【解决方案4】:

        安装s3cmd包为:

        yum install s3cmd
        

        sudo apt-get install s3cmd
        

        取决于您的操作系统。然后用这个复制数据:

        s3cmd get s3://tecadmin/file.txt
        

        ls 也可以列出文件。

        更多细节见this

        【讨论】:

          【解决方案5】:

          所有将 s3 挂载为伪文件系统的尝试都是有问题的。它是对象存储,而不是块设备。 如果您必须挂载它,因为您有必须具有本地文件路径的遗留代码,请尝试 goofys。它比 s3fs 快约 50 倍。 https://github.com/kahing/goofys

          s3cmd 这些天有点长。如今,AWS cli 是一个更好的选择。语法有点不方便,但它是您需要保留的少一个工具。

          如果你能坚持http访问。从长远来看,它会让你的生活更轻松。

          【讨论】:

            【解决方案6】:

            使用最新的 AWS CLI (http://aws.amazon.com/cli/),您可以使用以下命令将文件从 Ec2 实例甚至本地计算机复制到 S3 存储。

            aws s3 cp myfolder s3://mybucket/myfolder --recursive
            

            然后你会得到类似的东西:

            upload: myfolder/file1.txt to s3://mybucket/myfolder/file1.txt 
            upload: myfolder/subfolder/file1.txt to s3://mybucket/myfolder/subfolder/file1.txt
            

            如果这是您第一次使用 aws CLI 工具,那么您需要运行:

            aws configure

            这将要求您输入访问密钥和密码以及指定默认区域。

            【讨论】:

            • aws cli 比 s3cmd 好很多。
            • @ajtrichards 有没有办法使用命令行参数提供访问密钥和秘密?
            • @EmptyData 您可以使用--profile PROFILE_NAME 标志来指示要使用哪组凭据?如果您在命令行上设置了多个 AWS 配置文件。
            • 在实例级别使用 IAM 角色是一个更好的主意,这样您就不需要在服务器上存储凭证。 source
            • 100% 您应该在 EC2 中使用 IAM 角色来管理凭据和访问权限。
            【解决方案7】:

            为此使用s3cmd

            s3cmd get s3://AWS_S3_Bucket/dir/file
            

            看看如何安装s3cmd here:

            这对我有用...

            【讨论】:

              【解决方案8】:

              有多种方法可以将文件发送到 S3。我在下面列出了它们以及相关的安装和文档。

              PHP 实现示例:

              <?php
              
                  // Simple PUT:
                  if (S3::putObject(S3::inputFile($file), $bucket, $uri, S3::ACL_PRIVATE)) {
                      echo "File uploaded.";
                  } else {
                      echo "Failed to upload file.";
                  }
              
              ?>
              

              s3cmd 的一个例子:

              s3cmd put my.file s3://bucket-url/my.file
              

              编辑

              另一个值得一提的选项是 AWS CLI http://aws.amazon.com/cli/ 这是广泛可用的,例如它已经包含在 AmazonLinux 中,并且可以通过 Python 下载(安装在包括 linux 和 windows 在内的许多系统上)。

              http://docs.aws.amazon.com/cli/latest/reference/s3/index.html

              可用命令,cp ls mb mv rb rm 同步网站

              http://docs.aws.amazon.com/cli/latest/reference/s3api/index.html 用于与 S3 交互

              【讨论】:

              • 伟大的朋友 .. 只是在找这个 :)
              【解决方案9】:

              我正在使用s3cmd 来存储从我的 ec2 实例中导出的每晚导出的数据库备份文件。配置 s3cmd 后,您可以在他们的网站上阅读,然后您可以运行如下命令:

              s3cmd put ./myfile s3://mybucket

              【讨论】:

              • 你看到我的回答了吗?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-29
              • 1970-01-01
              • 2011-11-15
              • 2020-07-17
              • 1970-01-01
              相关资源
              最近更新 更多