버전이 지정된 S3 버킷을 특정 시점으로 복원


16

버킷에 S3 버전 관리가 활성화되어 있다고 가정 해 보겠습니다. http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

그런 다음 누군가 (예 : 후배 직원)가 S3 버킷을 엉망으로 만들 수 있습니다 (실수로 일부 파일 삭제 등).

그런 다음 전체 버전의 버킷을 특정 시점으로 복원하려면 어떻게해야합니까? 나는 이것이 S3의 API를 감안할 때 가능해야한다고 생각하지만, 무언가를 잃어 버릴 염려가 있기 때문에 직접 스크립트를 작성할 필요는 없습니다 (AWS 전문가는 아닙니다).

이 문제에 대한 좋은 해결책이 있습니까? S3 버킷을 Rails 앱의 이미지 저장소로 사용하고 있기 때문에 레이크 작업으로 사용할 수있는 Ruby 기반의 것이 이상적입니다.

답변:


17

당신이 사용할 수있는 s3-pit-restore

S3 시점 복원 은 다음과 같이 버킷 또는 버킷의 하위 집합을 지정된 시점으로 정확하게 복원하는 데 사용할 수있는 도구입니다.

s3-pit-restore --bucket my-bucket --dest my-restored-bucket --timestamp "06-17-2016 23:59:50 +2"

s3-pit-restore가 실제로 제공하는 것 :

  • 타임 스탬프가 지정된 파일보다 적은 모든 파일 복원
  • 전체 버킷 또는 버킷 접두사 복원
  • 전체 속도가 빠른 여러 파일의 병렬 다운로드
  • 병렬 작업자의 커스터마이징으로 대역폭 사용량 최적화
  • 활성화 된 경우 s3 버킷 버전 또는 빙하에서 복원

이것은 나를 위해 작동하지 않는 것 같습니다. 대상은 도구 설명에도 불구하고 로컬 디렉토리 만 작성합니다.
Arthur

당신은 내 하루를 저장했습니다. 놀라운 도구를 알려 주셔서 감사합니다.
cyberrspiritt

2

설명서를 올바르게 이해하면 버전 관리를 활성화 한 상태에서 파일을 삭제하면 "최신"버전이 한 버전 번호로 되돌아갑니다. 그러나 이것은 전체 버킷을 복원하는 기능을 제공 하지 않습니다 . 따라서 S3의 이전 버전은 사용자의 요구에 적합하지 않습니다 (예 : 삭제 복구).

만일을 위해서도 백업을 다른 곳에 보관하십시오. 스택 오버플로에는를 사용하여 질문 / 답변이 s3cmd있습니다. 루비 기반 스크립트를 찾거나 필요한 경우 해당 사이트에서 도움을 요청할 수 있습니다.


옳은. 버킷 전체가 아닌 버킷의 각 개별 객체를 버전 관리하고 있습니다.
EEAA

1
아, 다 이해합니다 그것이 내가 그렇게 간단하지 않다는 것을 깨닫는 이유입니다. 버킷의 모든 파일을 탐색하고 각 파일의 버전 정보를 얻은 다음 "되돌리려는"날짜를 기준으로 올바른 항목 (있는 경우)을 선택해야합니다. 그렇게 간단하지 않습니다. 나는 아마존이 그런 일반적인 유스 케이스를 위해 무언가를 가지고 있다고 생각했지만 아아, 아니오 ... 그래서 누군가 가이 지루한 스크립트를 이미 작성했는지 궁금합니다. 에 대해 살펴 보 s3cmd겠지만 S3에서 버전이 지정된 스냅 샷도 좋아합니다.
elsurudo

이 답변에는 잘못된 정보가 포함되어 있습니다. 단순 delete삭제 마커를 삽입하면 향후 요청이 이전 버전이 아닌 404를 반환합니다. 복원하려면 이전 버전을 새 버전으로 복사하거나 delete특정 버전의 현재 객체로 복사하면 차후에 get최신 버전이 제공됩니다. docs.aws.amazon.com/AmazonS3/latest/dev/… 공평하게 말하면 , 버킷 버전 관리 관련 문서는 모호하고 부족한 경향이 있습니다.
keen

@keen이 질문은 거의 3 년 전에 답변되었습니다. 문서를 업데이트했을 가능성이 높습니다. 그래도 잘 잡는다.
Nathan C

docu에 대해 언급 된 링크는 복구 (최고 수준의 복구보기)에 관한 것이며 변경되지 않았습니다. 공평하게 말하면 삭제에 대해 이야기 할 때 약간 혼란 스럽습니다. 아무도 이것을 보지 못하도록하고 싶고 "버전이 지정된 s3 버킷에서 객체를 삭제하면 이전 버전이 반환되기 시작한다는 것을 의미합니다."-CAN이 발생하지만 현재 버전을 구체적으로 삭제해야합니다 (... / key ? versionId = xyz) 그 일이 일어날 ...
keen

1

다음은 버전 관리를 사용하여 백업 버킷에서 버킷을 복원하는 데 사용되는 편리한 작은 PHP 스크립트입니다.

버전 관리를 켠 상태에서 버킷으로 다시 실행하려면

#CONFIGURATION
export bucket_to_backup='example-of-a-bucket-name';
export backup_bucket='example-of-a-backup-bucket-name'; 
export AWS_ACCESS_KEY_ID=ASDFDSAFADSFDASF;
export AWS_SECRET_ACCESS_KEY=adsfdsaf86adsf5adsf568aadf75ads;
#you will need to download and install the s3cmd tool at the following url:
#http://s3tools.org/
s3cmd --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --recursive sync s3://$bucket_to_backup s3://$backup_bucket;

이 두 타임 스탬프간에 버전이 지정된 파일에서 백업 복원

export startSnapShotTimeStamp=1427577934;
export endSnapShotTimeStamp=1427577939;
#do the restore with php script
php awsUtil.php sync example-of-a-backup-bucket-name example-of-a-bucket-name $startSnapShotTimeStamp-$endSnapShotTimeStamp

여기에서 PHP 스크립트를 다운로드 할 수 있습니다 : http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.