반응형
Github Action을 이용해서 CDN S3 업로드 POC 진행중..
너무 오래 걸리는데?? Action log를 살펴보는데..
upload : 오호 예상대로 업로드가 잘됐군
delete : 뭐지..?
delete : 이
delete : 거
delete : 어
delete : 떻
delete : 게
delete : 멈
delete : 추
delete : 지...
제가 멍청하게 Github 지정된 폴더와 S3 버킷을 동기화하는 코드를 넣어서 S3 객체를 날리고 있었습니다..
평정심을 찾고.. 아니 끝까지 못 찾았습니다..
부랴부랴 버킷에 들어가 봅니다!
버킷 버전 관리가 활성화되어 있으면 복구가 가능합니다!!
버전 관리가 활성화되어있는 상태에서는 객체를 삭제하면 삭제 마커 버전이 생성되는데요
삭제 마커 버전을 삭제하면 전 버전으로 복구 시킬 수 있습니다.
이렇게 aws console을 이용해서 복구 시킬 수도 있지만, 저같이 대량의 파일을 삭제했을 경우에는 코드로 복구 시킬 수 있는데요.
AWS SDK를 사용해서 여러 프로그래밍 언어로 코딩하는 방법도 있지만, 저는 급한 마음에 AWS CLI를 이용해서 S3 복구를 진행하였습니다.
1. AWS CLI를 설치
AWS CLI 이용하려면 CLI 설치를 먼저 진행해야 합니다.
Homebrew를 이용해서 설치를 진행하도록 하겠습니다.
aws cli 설치 : brew install awscli
설치 확인 : aws --version
aws cli를 이용하기 위해서는 aws configure 설정을 해줘야 합니다.
aws iam 서비스에서 관련된 권한만 부여된 사용자를 생성해서 설정하는게 보안에 더 좋습니다.
저는 s3 관련 권한만 부여된 사용자를 생성하였습니다.
위와 같이 사용자를 생성하면 AWS Access Key ID와 Secret Access Key가 생성되는데요,
중요한 정보이기에 외부 유출에 유의하셔야 합니다.
aws cli 설정 : aws configure
설정값에 key와 각종 정보를 등록하셨다면 이제 aws cli를 이용해서 S3 객체를 복원해 보도록 하겠습니다.
순서는 크게 두가지 입니다.
- 오늘 날짜로 삭제된 S3 객체 목록 추출
- 추출된 리스트를 이용해서 삭제 마커 버전 삭제
2. 삭제된 S3 객체 목록 추출
cli를 이용해서 aws api를 호출하면 아래와 같이 삭제 마커가 붙은 객체를 가져올 수 있습니다.
터미널에서 조회
aws s3api list-object-versions --bucket s3_bucket_name --output text | grep DELETEMARKERS
aws s3 api를 이용해서 오늘 날짜로 삭제된 객체 목록을 txt 파일로 가져올 수 있습니다.
s3_deleted_object_list.sh
#!/bin/bash
TODAY=$(date +"%Y-%m-%d")
aws s3api list-object-versions --bucket s3_bucket_name --output text | grep DELETEMARKERS | grep $TODAY > deleted_objects_today.txt
3. 추출된 리스트를 이용해서 삭제 마커 버전 삭제
위에서 추출한 목록에서 객체의 key 값과 version_id를 이용해서 해당 버전을 삭제시킬 수 있습니다.
s3_restore.sh
#!/bin/bash
while read -r line; do
key=$(echo $line | awk '{print $3}')
versionId=$(echo $line | awk '{print $5}')
aws s3api delete-object --bucket s3_bucket_name --key "$key" --version-id "$versionId"
done < deleted_objects_today.txt
참고 : 이전 버전 복원
728x90
반응형
'AWS' 카테고리의 다른 글
AWS SAA-CO3 Certification 취득 (0) | 2024.12.08 |
---|---|
AWS ECS 이용한 서비스 배포 (0) | 2024.04.28 |
AWS를 이용한 SSL 적용하기 (0) | 2023.01.08 |