Amazon S3 버킷 간에 객체를 복사하려면 어떻게 해야 합니까?

최종 업데이트: 2019년 4월 12일

Amazon Simple Storage Service(S3) 버킷 간에 객체를 모두 이동해야 합니다. S3 버킷 간에 객체를 마이그레이션하려면 어떻게 해야 합니까? 

간략한 설명

S3 버킷 간에 객체를 복사하려면 다음 단계를 따르십시오.

1.    새 S3 버킷을 생성합니다.

2.    AWS CLI(AWS 명령줄 인터페이스)를 설치하고 구성합니다.

3.    S3 버킷 간에 객체를 복사합니다.

4.    객체가 복사되었는지 확인합니다.

5.    기존 API 호출을 새 버킷 이름으로 업데이트합니다.

시작하기 전에, 더 많은 동시 실행 수를 사용하도록 AWS CLI를 튜닝하여 동기화 프로세스의 성능을 높이는 것이 좋습니다. 구성 옵션에 대한 자세한 내용은 AWS CLI S3 구성을 참조하십시오. 데이터 전송 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하십시오.

S3 버킷에 객체(1,000만 개 이상)가 많은 경우, Amazon S3 인벤토리 보고서Amazon CloudWatch 지표를 사용하는 것이 좋습니다. 이들 보고서는 복사한 객체를 확인하는 데 따른 비용과 성능을 최적화하는 데 도움이 됩니다. 또한 sync 명령을 다양한 접두사별로 분할하여 S3 버킷 성능을 최적화할 수 있습니다. 워크로드의 성능을 최적화하는 방법에 대한 자세한 내용은 요청 속도 및 성능 지침을 참조하십시오.

​해결 방법

새 S3 버킷 생성

1.    Amazon S3 콘솔을 엽니다.

2.    [Create Bucket]을 선택합니다.

3.    새 버킷에 [DNS-compliant name]을 사용하도록 선택합니다.

4.    AWS 리전을 선택합니다.
참고: 모범 사례로서, 소스 버킷과 동일한 리전에 새 버킷을 생성해야 리전 간 트래픽으로 인한 성능 문제를 방지할 수 있습니다.

5.    필요한 경우 [Copy settings from an existing bucket]을 선택하여 소스 버킷의 구성을 미러링합니다.

AWS CLI(AWS 명령줄 인터페이스) 설치 및 구성

1.    AWS CLI를 설치합니다.

2.    다음 명령을 실행하여 AWS CLI를 구성합니다.

aws configure

3.    [Access Keys (Access Key ID and Secret Access Key)]를 입력합니다.

4.    Enter 키를 눌러 기본 리전 및 기본 출력 옵션을 건너뜁니다. 리전 파라미터에 대한 자세한 내용은 Amazon S3의 AWS 리전 및 엔드포인트를 참조하십시오.
참고: AWS CLI 출력은 JSON, 텍스트 또는 테이블 형식이지만, 명령에 따라 일부 출력 형식을 지원하지 않을 수 있습니다. 선택한 형식이 명령 출력에서 지원되지 않을 경우, 기본적으로 자체 형식으로 출력됩니다. 자세한 내용은 AWS CLI의 명령 출력 제어를 참조하십시오.

S3 버킷 간에 객체 복사

1.    Amazon Simple Storage Service Glacier에 S3 객체를 아카이빙한 경우 Amazon S3 Glacier에 저장된 객체를 복원합니다.

2.    다음 sync 명령을 실행하여 소스 버킷과 대상 버킷 간에 객체를 복사합니다.

aws s3 sync s3://SOURCE_BUCKET_NAME s3://NEW_BUCKET_NAME

참고: 대상 및 소스 버킷 이름을 포함하도록 명령을 업데이트하십시오.

sync 명령은 CopyObject API를 사용하여 S3 버킷 간에 객체를 복사합니다. sync 명령은 소스 및 대상 버킷을 나열함으로써 소스 버킷에는 있지만 대상 버킷에는 없는 객체를 식별합니다. 또한 이 명령은 소스 버킷의 객체 중, 마지막으로 수정한 날짜가 대상 버킷의 객체와 다른 객체를 식별합니다. 버전이 지정된 버킷에 대한 sync 명령은 현재 버전의 객체만 복사합니다. 이전 버전은 복사되지 않습니다. 기본적으로 이 명령은 객체 메타데이터를 보존하지만, ACL(액세스 제어 목록)이 AWS 계정에 대해 FULL_CONTROL로 설정되며, 이에 따라 추가 ACL이 제거됩니다. 작업이 실패하면 이전에 복사한 객체를 복제하지 않고 sync 명령을 다시 실행할 수 있습니다.

객체가 복사되었는지 확인

1.    다음 명령을 실행하여 소스 및 대상 버킷의 내용을 확인합니다.

aws s3 ls --recursive s3://SOURCE_BUCKET_NAME --summarize > bucket-contents-source.txt
aws s3 ls --recursive s3://NEW_BUCKET_NAME --summarize > bucket-contents-new.txt

참고: 소스 및 대상 버킷 이름을 포함하도록 명령을 업데이트하십시오.

2.    AWS CLI 디렉터리의 파일에 저장되는 출력을 사용하여 소스 및 대상 버킷의 객체를 비교합니다. 다음 예제 출력을 참조하십시오.

$ aws s3 ls --recursive s3://BUCKETNAME --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

기존 API 호출을 새 버킷 이름으로 업데이트

새 버킷 이름을 사용하도록 기존 애플리케이션 또는 워크로드를 업데이트합니다. 쓰기 작업이 빈번하게 실행되는 경우 소스 버킷과 대상 버킷 간 불일치를 해결하기 위해 sync 명령을 실행해야 할 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?