2017-10-27 13 views
0

상황 : s3의 디렉토리에서 약 1TB의 json 파일을 가져 오는 데 데이터로드 서비스를 사용하고 있습니다. 해당 파일을 배치 디렉토리에 일괄 적으로로드하여 로딩 서비스에 부담을주지 않도록합니다. 우리는 boto3 클라이언트 복사 방법을 사용하는 로컬 파이썬 스크립트로 일괄 처리를 수행하고 있습니다.s3에서 키를 복사 할 때 boto3은 GET을 수행 한 다음 PUT을 수행합니까?

import boto3 
s3 = boto3.resource('s3') 
copy_source = { 
    'Bucket': 'mybucket', 
    'Key': 'mykey' 
} 
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') 

boto3's copy method를 사용하여, 클라이언트가 키와 연관된 파일을 다운로드 한 다음 새 otherbucket/otherkey 위치에 PUT을 수행하고 있다고 생각하는 어떤 이유가 여기있다 : boto3의 문서에서 샘플입니까?

s3의 모든 작업에 요금이 부과된다는 것을 알고 있습니다. 기본적으로 우리는 그러한 요금을 부과하지 않을뿐만 아니라 우리가 대역폭을 낭비하지 않도록하기 위해 노력하고 있습니다.

답변

4

이것은 PUT+Copy입니다. 원본 버킷과 개체를 지정하여 대상 버킷으로 보낸 단일 요청입니다.

다운로드/업로드가 아니지만 대상 버킷에 대한 PUT 요청에 대해서는 요금이 부과되고 GET 요청의 경우 대상 버킷이 소스 버킷으로 전송되어 콘텐츠를 가져 오도록 요청합니다.

데이터는 S3에서 내부적으로 전송되므로 인터넷 대역폭을 사용하지 않지만 원본 및 대상 버킷이 다른 영역에 있으면 소스 버킷에 영역 간 대역폭이 청구됩니다. 이것은 "out to the internet"대역폭 요금보다 낮은 요금으로 청구됩니다.

참조 : Copying Objects in a Single Operation