[amazon-s3] 두 버킷 간의 AWS S3 복사 파일 및 폴더

먼저 콘텐츠를 로컬 파일 시스템에 다운로드하지 않고 AWS S3 버킷의 콘텐츠를 두 번째 AWS S3 버킷에 복사하는 데 도움이되는 도구를 찾고있었습니다.

AWS S3 콘솔 복사 옵션을 사용하려고했지만 일부 중첩 된 파일이 누락되었습니다.

Transmit 앱 (by Panic)을 사용해 보았습니다. 복제 명령은 먼저 파일을 로컬 시스템에 다운로드 한 다음 두 번째 버킷에 다시 업로드하므로 매우 비효율적입니다.



답변

S3 버킷 간 복사

AWS (최근)는 버킷 간 복사를위한 명령 줄 인터페이스를 출시했습니다.

http://aws.amazon.com/cli/

$ 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″를 사용하는 것이 훨씬 더 빨랐습니다.


답변

s3s3mirrorDocker 실행 파일만들었습니다. 도구 . 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