Rubby: AWS 3이 있는 파일을 다른 통에 모아 복사하는 방법
컨디션
Rails 중 하나로 해냈지만 Rails 없이도 가능하다.
하고 싶은 일.
S3의
bucket/folder
에 있는 모든 파일another_bucket/folder
을 구조를 유지한 상태로 복사하고 싶습니다.절차.
복사할 때 사용하는 프로그램을 소개합니다.
Rails 중 하나로 완료되었습니다.
bundle add aws-sdk-s3
를 실행하고 AWS의 SDK를 추가합니다.# S3 SDK reference: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html
require 'uri'
namespace :s3 do
namespace :something do
task copy: :environment do
s3_client = build_s3_client
copy_bucket_to_bucket(s3_client, 'bucket', 'another_bucket', 'folder/')
end
end
def build_s3_client
Aws::S3::Client.new(
access_key_id: Rails.configuration.x.s3_user.access_key,
secret_access_key: Rails.configuration.x.s3_user.access_secret,
region: 'ap-northeast-1'
)
end
# @param [Aws::S3::Client] s3_client
# @param [String] source_bucket
# @param [String] destination_bucket
# @param, [String] prefix
def copy_bucket_to_bucket(s3_client, source_bucket, destination_bucket, prefix = '')
s3_client.list_objects(bucket: source_bucket, prefix: prefix).to_h[:contents].each do |object|
puts "copy #{object[:key]}"
option = {
#acl: 'public-read',
bucket: destination_bucket,
copy_source: URI::encode("/#{source_bucket}/" << object[:key]),
key: object[:key],
}
s3_client.copy_object(option)
end
end
end
copy_bucket_to_bucket
실제로 S3 내에서 복제하는 방법주의
기본 Bucket을 설정하면 Access Denied 오류
acl: 'public-read',
가 발생합니다.다음 그림과 같이 Bucket 설정에서 두 개의 확인란을 닫을 때
acl: 'public-read'
사용할 수 있습니다.Reference
이 문제에 관하여(Rubby: AWS 3이 있는 파일을 다른 통에 모아 복사하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KenjiOtsuka/items/361ba42930cfe5da4dbb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)