먼저 콘텐츠를 로컬 파일 시스템에 다운로드하지 않고 AWS S3 버킷의 콘텐츠를 두 번째 AWS S3 버킷에 복사하는 데 도움이되는 도구를 찾고있었습니다.
AWS S3 콘솔 복사 옵션을 사용하려고했지만 일부 중첩 된 파일이 누락되었습니다.
Transmit 앱 (by Panic)을 사용해 보았습니다. 복제 명령은 먼저 파일을 로컬 시스템에 다운로드 한 다음 두 번째 버킷에 다시 업로드하므로 매우 비효율적입니다.
답변
S3 버킷 간 복사
AWS (최근)는 버킷 간 복사를위한 명령 줄 인터페이스를 출시했습니다.
$ aws s3 sync s3://mybucket-src s3://mybucket-target --exclude *.tmp
..
이것은 한 대상 버킷에서 다른 버킷으로 복사 됩니다.
여기에서 설명서를 참조하십시오. S3 CLI 설명서
답변
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')
서로 다른 버킷간에 복사를 수행하려면 대상 버킷 이름을 지정하십시오.
s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key', :bucket_name => 'target-bucket')
답변
이제 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})
자세한 내용 : aws-s3 gem을 사용하여 버킷간에 파일을 복사하는 방법
답변
다른 지역의 버킷 간 복사
$ aws s3 cp s3://src_bucket/file s3://dst_bucket/file --source-region eu-west-1 --region ap-northeast-1
위의 명령은 유럽 (eu-west-1)의 버킷에서 일본 (ap-northeast-1)으로 파일을 복사합니다. 다음 명령을 사용하여 버킷 리전의 코드 이름을 가져올 수 있습니다.
$ aws s3api get-bucket-location --bucket my_bucket
그건 그렇고, S3 웹 콘솔에서 복사 및 붙여 넣기를 사용하는 것은 쉽지만 소스 버킷에서 브라우저로 다운로드 한 다음 대상 버킷에 업로드하는 것 같습니다. “aws s3″를 사용하는 것이 훨씬 더 빨랐습니다.
답변
s3s3mirror 의 Docker 실행 파일 을 만들었습니다. 도구 . 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]
전체 옵션 목록을 보려면 다음을 시도하십시오.
docker run pmoust/s3s3mirror
답변
아래 문서를 확인하세요. 나는 당신이 찾고있는 것 같아요.
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