한 Amazon S3 버킷의 모든 객체를 다른 버킷으로 복사하려면 어떻게 해야 하나요?

5분 분량
0

하나의 Amazon Simple Storage Service(S3) 버킷에서 다른 버킷으로 모든 객체를 복사하거나 이동하고 싶습니다. S3 버킷 간에 객체를 마이그레이션하고 싶습니다.

간략한 설명

한 S3 버킷에서 다른 S3 버킷으로 객체를 복사하려면 다음 단계를 따르세요.

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

2.    시스템에 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.

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

참고: 대규모 버킷(1,000만 개 이상의 객체)에 aws s3 ls 또는 aws s3 sync 명령을 사용하면 비용이 많이 들고, 제한 시간 초과가 발생할 수 있습니다. 대규모 버킷으로 인해 제한 시간 초과가 발생하는 경우 Amazon CloudWatch 지표를 사용하여 버킷의 객체 크기 및 수를 계산하는 것을 고려해 보세요. 또한 S3 배치 작업을 사용하여 객체를 복사하는 것도 고려해 보세요.

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

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

시작하기 전에 다음 사항을 고려하세요.

해결 방법

새 S3 버킷 생성

1.    Amazon S3 콘솔을 엽니다.

2.    버킷 생성을 선택합니다.

3.    새 버킷의 DNS 호환 이름을 선택합니다.

4.    AWS 리전을 선택합니다.

: 리전 간 트래픽으로 인한 성능 문제를 피하려면 소스 버킷과 동일한 리전에 대상 버킷을 생성하세요.

5.    필요에 따라 기존 버킷에서 설정 복사를 선택하여 소스 버킷의 구성을 미러링할 수 있습니다.

AWS CLI 설치 및 구성

1.    AWS CLI를 설치합니다.

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

aws configure

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

3.    액세스 키(액세스 키 ID 및 비밀 액세스 키)를 입력합니다.

4.    기본 리전 및 기본 출력 옵션을 건너뛰려면 Enter 키를 누르세요. Amazon S3 Region 파라미터에 대한 자세한 내용은 AWS 서비스 엔드포인트를 참조하세요.

참고: AWS CLI 출력은 JSON, 텍스트 또는 테이블이지만 모든 명령이 각 출력 유형을 지원하는 것은 아닙니다. 자세한 내용은 ](https://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html)AWS CLI의 명령 출력 제어[를 참조하세요.

S3 버킷 간 객체 복사

1.    Amazon Simple Storage Service Glacier 스토리지 클래스에 S3 객체를 보관했다면 해당 객체를 복원하세요.

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

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

참고: 소스 및 대상 버킷 이름을 포함하도록 sync 명령을 업데이트합니다.

sync 명령은 CopyObject API를 사용하여 S3 버킷 간에 객체를 복사합니다. sync 명령은 소스 및 대상 버킷을 나열하여 소스 버킷에는 있지만 대상 버킷에는 없는 객체를 식별합니다. 또한 이 명령은 소스 버킷에서 LastModified 날짜가 대상 버킷에 있는 객체와 다른 객체를 식별합니다. 버전이 지정된 버킷에서 sync 명령을 사용하면 객체의 현재 버전만 복사되고 이전 버전은 복사되지 않습니다. 기본적으로 이 동작은 객체 메타데이터를 보존합니다.

소스 버킷에 액세스 제어 목록(ACL)이 활성화되어 있는 경우, 이 ACL이 대상 버킷에 복사되지 않습니다. 대상 버킷에서의 ACL 활성화 여부와는 관계없이 그러합니다. 소스와 대상 버킷 모두에 ACL이 활성화된 경우 대상 객체 ACL은 복사를 수행한 계정에 FULL_CONTROL을 부여합니다. 작업이 실패하면 이전에 복사한 객체를 복제하지 않고 sync 명령을 다시 실행할 수 있습니다. 동기화 작업 관련 문제를 해결하려면 두 Amazon S3 버킷 간에 객체를 복사할 수 없는 이유가 무엇인가요?를 참조하세요.

3.    (선택 사항) 제한 시간이 초과되면 cloudwatch get-metric-statistics 명령을 사용하여 버킷의 객체 수를 계산하세요.

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

4.    (선택 사항) 제한 시간이 초과되면 cloudwatch get-metric-statistics 명령을 사용하여 버킷 크기를 검색하세요.

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

참고: Listcall은 비용이 매우 많이 들어 명령 제한 시간이 초과될 수 있습니다. 대규모 버킷의 경우 대신 Amazon CloudWatch 지표를 사용하여 버킷 크기와 총 객체 수를 계산하는 것을 고려해 보세요. 하지만 Amazon CloudWatch 지표는 하루에 한 번만 가져오므로 보고된 객체 수와 버킷 크기가 list 명령 결과와 다를 수 있습니다.

객체가 복사되었는지 확인

1.    다음 명령을 실행하여 소스 및 대상 버킷의 콘텐츠를 확인합니다.

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

참고: 소스 및 대상 버킷 이름을 포함하도록 list 명령을 업데이트합니다.

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

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

  Total Objects: 1        Total Size: 15362

기존 API 직접 호출을 대상 버킷 이름으로 업데이트

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

관련 정보

Amazon S3 요금

객체를 폴더에 복사

Amazon S3에서 대규모 삭제 작업을 수행한 후 list 명령이 응답하지 않습니다. 이 문제를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전