60

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

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

  • 那么如何将这些文件存储在 s3 上呢?
  • 有这方面的教程吗?
4

9 回答 9

74

使用最新的 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

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

aws configure

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

于 2014-10-23T08:48:21.743 回答
33

有多种方法可以将文件发送到 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 交互

于 2013-04-10T03:23:22.910 回答
12

s3cmd包安装为:

yum install s3cmd

或者

sudo apt-get install s3cmd

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

s3cmd get s3://tecadmin/file.txt

ls可以列出文件。

有关更多详细信息,请参阅

于 2014-03-13T13:06:21.640 回答
9

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

s3cmd put ./myfile s3://mybucket

于 2013-04-09T19:19:02.717 回答
6

用于s3cmd

s3cmd get s3://AWS_S3_Bucket/dir/file

在此处查看如何安装 s3cmd :

这对我有用...

于 2013-12-09T07:42:30.100 回答
4

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

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

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

于 2016-04-21T19:13:04.117 回答
3

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

aws s3 cp file-name.zip s3://bucket-name/
于 2018-08-05T15:57:51.540 回答
2

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

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

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

于 2018-12-22T00:26:11.213 回答
0

我假设您需要从新实例复制到 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. 转到https://console.aws.amazon.com/iam/上的 IAM 控制台 2. 在左侧窗格中,选择角色,然后单击创建角色。3. 对于选择受信任实体的类型,选择 AWS 服务。选择 EC2。选择下一步:权限。4. 对于附加权限策略,选择包含所需权限的 AWS 托管策略或创建自定义策略。5. 点击Service 选择一个服务,在Find a service 框中输入S3,点击S3,选择动作(全部或read + write 和其他你可能需要的) 6. 点击Resources,选择Resource(你可以输入所有资源或限制到具有 ARN 的特定存储桶) 7. 单击下一步:查看策略。输入名称和描述。单击创建策略。8. 返回创建角色页面,单击刷新,按您分配的名称过滤策略,选择策略。9. 单击下一步:标签,然后添加任何所需的标签 10. 在 Review 页面上,

参考

于 2020-05-12T15:57:36.053 回答