하나의 Amazon Simple Storage Service(S3) 버킷에서 다른 버킷으로 모든 객체를 복사하거나 이동하고 싶습니다.
간략한 설명
한 S3 버킷에서 다른 버킷으로 객체를 복사하려면 다음 옵션 중 하나를 선택합니다.
- AWS Command Line Interface(AWS CLI)에서 sync 명령 실행
- 객체가 많이 포함된 버킷에 S3 배치 작업 사용
sync 명령은 크기가 그리 크지 않은 버킷에 적합합니다. sync 명령을 실행하여 수백만 개의 객체가 포함된 대형 버킷을 복사하면 비용이 많이 들고 복사 작업에서 시간 초과가 발생할 수 있습니다. 버킷을 복사할 때 제한 시간이 초과되는 경우 Amazon CloudWatch 지표를 사용하여 버킷의 객체 크기 및 수를 계산하십시오. S3 버킷에 수백만 개의 객체가 있는 경우 S3 배치 작업을 사용하여 객체를 복사하는 것이 좋습니다.
참고: 버킷의 객체를 다른 AWS 계정이 소유한 버킷으로 복사하려면 AWS Identity and Access Management(IAM)를 사용하여 교차 계정 권한을 설정하십시오. IAM 역할에 소스 객체에 대한 s3:GetObjectTagging 권한과 대상 객체에 대한 s3:PutObjectTagging 권한이 있는지 확인합니다.
동기화 성능을 높이고 객체를 더 빠르게 복사하려면 다음 중 하나 이상을 수행하십시오.
해결 방법
참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
S3 버킷 간 객체 복사
한 버킷에서 다른 버킷으로 객체를 복사하려면 다음 단계를 완료하십시오.
-
Amazon Simple Storage Service Glacier 스토리지 클래스에 S3 객체를 보관했다면 해당 객체를 복원합니다.
-
다음 sync 명령을 실행하되 example_source_bucket 및 example_target_bucket을 S3 버킷 이름으로 바꾸십시오.
aws s3 sync s3://example_source_bucket s3://example_target_bucket
참고: sync 명령은 대상 버킷에 아직 없는 객체만 복사합니다. 모든 객체를 명시적으로 복사하려면 sync 명령 대신 cp 명령을 사용하십시오. 버전이 지정된 버킷에서 sync 명령을 사용하면 각 객체의 현재 버전만 복사됩니다. 기본적으로 이 동작은 객체 메타데이터를 보존합니다.
-
(선택 사항) 제한 시간이 초과되면 CloudWatch get-metric-statistics 명령을 사용하여 버킷 크기와 객체 수를 계산합니다.
버킷 크기를 계산하려면 다음 명령을 실행합니다.
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json
버킷의 객체 수를 계산하려면 다음 명령을 실행합니다.
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json
버킷 크기가 크고 수백만 개의 객체가 포함된 경우에는 sync 명령을 사용하지 마십시오. 대신 버킷을 복사할 때 S3 배치 작업을 사용하십시오.
중요: sync 명령을 실행할 때 액세스 제어 목록(ACL)은 소스 버킷에서 대상 버킷으로 복사되지 않습니다. 소스와 대상 버킷에 모두 활성 ACL이 있는 경우 대상 객체 ACL은 복사를 수행한 계정에 FULL_CONTROL 권한을 부여합니다. sync 명령 관련 문제를 해결하려면 두 Amazon S3 버킷 간에 객체를 복사할 수 없는 이유는 무엇입니까?를 참조하십시오.
객체가 복사되었는지 확인
객체가 복사되었는지 확인하려면 다음 단계를 완료하십시오.
- 소스 및 대상 버킷의 내용을 확인하려면 다음 ls 명령을 실행합니다.
aws s3 ls --recursive s3://example_source_bucket --summarize > bucket-contents-source.txt
aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
참고: 대규모 버킷의 경우 ls 명령의 제한 시간이 초과될 수 있습니다. 대규모 버킷의 경우 ls 명령 대신 CloudWatch 지표를 사용하여 버킷 크기와 총 객체 수를 계산하십시오. 하지만 Amazon CloudWatch 지표는 하루에 한 번만 가져오므로 CloudWatch 결과는 ls 명령 결과와 다를 수 있습니다.
- 이전 ls 명령에서 출력한 텍스트 파일을 사용하여 소스 버킷과 대상 버킷 간의 객체를 비교합니다. 출력은 다음 예와 비슷합니다.
2017-11-20 21:17:39 15362 s3logo.png
Total Objects: 1 Total Size: 15362
참고: 소스 버킷에 대한 API 호출을 수행하는 애플리케이션 또는 워크로드가 있는 경우 해당 API 호출을 대상 버킷으로 업데이트하십시오. 쓰기가 빈번한 경우 소스 버킷과 대상 버킷 간의 불일치를 해결하기 위해 sync 명령을 실행해야 할 수 있습니다.
관련 정보
Amazon S3 요금
디렉터리 버킷에 객체 복사
Amazon S3에서 대량 삭제를 수행한 후 응답하지 않는 목록 명령 문제를 해결하려면 어떻게 해야 합니까?
다른 AWS 계정에서 Amazon S3 객체를 복사하려면 어떻게 합니까?