cni*_*aou 108 copy amazon-s3 amazon-web-services
我一直在寻找一种工具来帮助我将S3存储桶的内容复制到第二个存储桶中,而无需先将内容下载到本地系统.
我尝试过AWS S3控制台复制选项但导致一些嵌套文件丢失.
我曾尝试使用Transmit app(Panic),但duplicate命令首先将文件复制到本地系统,然后再复制到第二个存储桶
Lay*_*yke 166
AWS(刚刚发布)发布了一个用于在存储桶之间进行复制的命令行界面.
$ aws s3 sync s3://mybucket-src s3://mybucket-target --exclude *.tmp
..
Run Code Online (Sandbox Code Playgroud)
这将从一个目标存储桶复制到另一个存储桶.
请参阅此处的文档:S3 CLI文档
Tre*_*owe 41
使用aws-sdk gem的简化示例:
AWS.config(:access_key_id => '...', :secret_access_key => '...')
s3 = AWS::S3.new
s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key')
Run Code Online (Sandbox Code Playgroud)
如果要在不同存储桶之间执行复制,请指定目标存储桶名称:
s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key', :bucket_name => 'target-bucket')
Run Code Online (Sandbox Code Playgroud)
KDE*_*DEx 38
您现在可以从S3管理界面执行此操作.只需进入一个桶中选择所有文件夹即可actions->copy.然后进入你的新桶actions->paste.
有可能使用最近的aws-sdk gem,请参阅代码示例:
require 'aws-sdk'
AWS.config(
:access_key_id => '***',
:secret_access_key => '***',
:max_retries => 10
)
file = 'test_file.rb'
bucket_0 = {:name => 'bucket_from', :endpoint => 's3-eu-west-1.amazonaws.com'}
bucket_1 = {:name => 'bucket_to', :endpoint => 's3.amazonaws.com'}
s3_interface_from = AWS::S3.new(:s3_endpoint => bucket_0[:endpoint])
bucket_from = s3_interface_from.buckets[bucket_0[:name]]
bucket_from.objects[file].write(open(file))
s3_interface_to = AWS::S3.new(:s3_endpoint => bucket_1[:endpoint])
bucket_to = s3_interface_to.buckets[bucket_1[:name]]
bucket_to.objects[file].copy_from(file, {:bucket => bucket_from})
Run Code Online (Sandbox Code Playgroud)
$ aws s3 cp s3://src_bucket/file s3://dst_bucket/file --source-region eu-west-1 --region ap-northeast-1
Run Code Online (Sandbox Code Playgroud)
上面的命令将文件从欧洲(eu-west-1)的桶复制到日本(ap-northeast-1).您可以使用以下命令获取存储桶区域的代码名称:
$ aws s3api get-bucket-location --bucket my_bucket
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在S3 Web控制台中使用复制和粘贴很容易,但它似乎从源存储桶下载到浏览器中,然后上传到目标存储桶.使用"aws s3"对我来说要快得多.
我创建了一个泊坞可执行的s3s3mirror工具.用于从AWS S3存储桶复制和镜像到另一个存储桶的实用程序.
它是线程允许并行COPY和非常高效的内存,它成功s3cmd完全失败.
用法:
docker run -e AWS_ACCESS_KEY_ID=FOO -e AWS_SECRET_ACCESS_KEY=BAR pmoust/s3s3mirror [OPTIONS] source_bucket[/prefix] dest_bucket[/prefix]
Run Code Online (Sandbox Code Playgroud)
有关选项的完整列表,请尝试:
docker run pmoust/s3s3mirror
Run Code Online (Sandbox Code Playgroud)
查看下面的文档.我想这就是你要找的东西. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
RightAws gem的S3Interface具有复制功能,可以执行上述操作.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
我想你现在可能已经找到了一个很好的解决方案,但对于遇到这个问题的其他人(就像我刚才那样),我已经精心设计了一个简单的工具,专门用于将一个S3存储桶镜像到另一个S3存储桶中.高度并发,但CPU和内存有效的方式.
它位于Apache许可下的github上:https://github.com/cobbzilla/s3s3mirror
当你有一个非常大的桶并且正在寻找最大性能时,它可能值得尝试.
如果您决定尝试一下,请告诉我您是否有任何反馈.
来自 AWS cli https://aws.amazon.com/cli/你可以做
aws s3 ls- 这将列出所有 S3 存储桶
aws cp --recursive s3://<source bucket> s3://<destination bucket>- 这会将文件从一个存储桶复制到另一个存储桶
注意* 在创建跨区域复制存储桶时非常有用,通过执行上述操作,您的文件都会被跟踪,并且源区域文件的更新将传播到复制存储桶。除文件删除外的所有内容均已同步。
对于 CRR,请确保您在存储桶上启用了版本控制。
| 归档时间: |
|
| 查看次数: |
112490 次 |
| 最近记录: |