我正在使用AWS ec2实例。在这个例子中,我得到了一些文件。这些操作由用户数据完成。
现在我想通过在用户数据本身中编写代码来将这些文件存储在s3上。
答案 0 :(得分:59)
使用最新的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
这将要求您输入访问密钥&秘密以及指定默认区域。
答案 1 :(得分:32)
有多种方法可以将文件发送到S3。我在下面列出了它们以及相关的安装和文档。
S3CMD :( http://s3tools.org/s3cmd)您可以通过apt-get install s3cmd轻松地在debian / ubuntu上安装它,然后从命令行运行。您可以将其合并到bash脚本或程序中。
S3FS :( http://www.pophams.com/blog/howto-setups3fsonubuntu1104x64和https://code.google.com/p/s3fs/wiki/InstallationNotes)...这会挂载一个s3存储桶,使其看起来就像本地磁盘一样。设置需要花费更多的精力,但是一旦安装了磁盘,您就不需要做任何特殊的事情来获取存储桶中的文件。
如果你使用CMS(让我们使用Drupal作为例子)你可以选择使用模块来处理对你的存储桶的访问,例如http://drupal.org/project/storage_api
最后,您可以使用编程语言实现来自行处理所有逻辑,对于PHP,您可以从此http://undesigned.org.za/2007/10/22/amazon-s3-php-class开始,并参阅此处的文档http://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation < / p>
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进行互动
答案 2 :(得分:10)
将 s3cmd 打包为:
yum install s3cmd
或
sudo apt-get install s3cmd
取决于您的操作系统。然后用以下方法复制数据:
s3cmd get s3://tecadmin/file.txt
ls
也可以列出文件。
有关更多信息,请参阅this
答案 3 :(得分:8)
我正在使用s3cmd来存储我的ec2实例中每晚导出的数据库备份文件。在配置了s3cmd(您可以在其站点上阅读)之后,您可以运行如下命令:
s3cmd put ./myfile s3://mybucket
答案 4 :(得分:5)
答案 5 :(得分:4)
将s3作为伪文件系统挂载的所有尝试都存在问题。它是一个对象存储,而不是一个块设备。 如果您必须安装它,因为您的遗留代码必须具有本地文件路径,请尝试使用goofys。它比s3fs快约50倍。 https://github.com/kahing/goofys
这些天s3cmd牙齿有点长。如今,AWS cli是更好的选择。语法不太方便,但它需要保留的工具少一个。如果你坚持使用http访问。从长远来看,它会让你的生活更轻松。
答案 6 :(得分:2)
我认为一般来说,最好的答案是使用aws
命令,但是对于不希望安装其他任何东西的情况,值得一提的是您可以下载通过HTTPS的文件,例如打开浏览器并导航到:
https://s3.amazonaws.com/
(bucketName) /
(relativePath) /
(fileName) >
这也意味着您可以只使用wget
或curl
从shell提示中进行传输。
答案 7 :(得分:0)
在AWS CLI上,我使用以下命令将zip文件从EC2实例复制到S3
aws s3 cp file-name.zip s3://bucket-name/
答案 8 :(得分:0)
我假设您需要从新实例复制到s3。首先创建一个IAM角色,这样您就不需要运行aws configure,这应该在启动时就可以了。其次,安装cli,然后在用户数据中使用aws cli定义您的复制作业。下面的示例适用于Ubuntu18。为您的实例分配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.单击“服务”,然后单击“选择服务”,在“查找服务”框中键入S3,然后单击“确定”。 S3,选择操作(全部或读+写以及您可能需要的其他操作) 6.单击资源,选择资源(您可以输入所有资源或 限制到具有ARN的特定存储桶) 7.单击下一步:查看策略。输入名称和描述。请点击 创建策略。 8.返回“创建角色”页面,单击刷新,按名称过滤策略 分配,选择策略。 9.单击“下一步:标签”,然后添加所有必需的标签 10.在“审阅”页面上,输入角色的名称和说明,然后 点击创建角色。
参考