본문 바로가기
Amazon Web Service

[AWS] S3 파일 삭제 후 파일 및 디렉토리 복구하기(Terraform<-> S3 연동 시 Terraform state 삭제 시 발생하는 문제)

by 클수저 2024. 4. 30.
728x90
반응형

AWS에서 저장하는 스토리지로 가장 많이 활용하는 S3이다.

최근에 Terraform을 연동해서 AWS 리소스를 생성하는 작업을 하면서 테스트를 하던 와중에 Terraform State 파일 디렉토리가 잘못되어서 다시 설정하기 위해서 무의식적으로 기존에 있던 디렉토리를 삭제했다.

 

그러고 terraform destory 명령어가 작동하지 않았다.  👉 state 파일이 없기 때문에 삭제도 불가능...

어쩌면, Terraform의 가장 큰 단점이기도 하다.

 

여기서 매우매우 중요한 사실! 

Terraform State 즉,   Terraform 상태 파일에는 현재 관리 중인 리소스의 상세 정보가 저장되어있다.

이 파일을 삭제하면 Terraform은 AWS에 존재하는 리소스에 대한 정보를 잃어버려, 해당 리소스를 인식하거나 관리할 수 없음!! 👉 Terraform destroy 명령어 인식이 불가!!!

파일 복구 솔루션

 해당하는 S3의 버킷에 들어가서 객체 파일이 보이는 화면 가운데 버전 표시

 

 

이전에 삭제하거나 S3에 담겨있던 파일과 디렉토리가 언제 수정되었는지 타임테이블까지 확인이 가능하다.

내가 기존에 삭제했던 파일 또는 디렉토리를 클릭!

 

삭제된 파일들이 쭉 나오면서 원하는 파일을 클릭 후 다운로드를 한다.

그러면 기존에 사용했던 파일을 다운로드해서 사용이 가능하다.

 

여기까지가 기본적으로 S3에서 삭제한 내용을 다운로드해서 복구하는 방법이다.

하지만, 작성자는 Terraform으로 state파일연동해야하기 때문에 추가적인 작업이 아래에 더 있다.
(Terraform이나 추가적인 내용이 필요없다면 여기서 끝내셔도 무방하다)


여기서 문제!!!!!!!!!! 👉 기본적으로 S3는 정적데이터를 보관한다. 그렇기 때문에 기본 확장자가 json형식!!!

다운로드 받은 파일을 확장자명을 변경해줘야하는데, 기본값이 json으로 설정이 되어있어서 이름만 바꾸는것으로 불가능하다.

 

<윈도우 컴퓨터 기준>

보기 👉 파일확장명 체크 👉  이름변경하기 👉 json 확장자를 지우고 원하는 이름으로 변경

 

그리고 기존에 main.tf 코드에서 backend s3 key값의 경로와 동일하게 만들고, 해당 파일을 디렉토리에 추가한다.

그리고 다시 terraform destroy하면 정상적으로 destroy명령어가 작동한다.

 

여기서 작업하면서 중요한 사실은 TEST를 하는 와중에 기존 제품과 연결되어있는 AWS서비스가 있기 때문에 사실상 수기로 직접 삭제하다가 기존에 있는 서비스를 건드릴 수 있는 우려점이 있었다.

물론, 네이밍을 잘 해두었다면 삭제하는데 문제가 없지만 무지성으로 삭제만 하다가 보안그룹, iam role, vpc를 삭제하면 기존에 있는 제품에도 문제가 발생하는 큰 불상사가 생긴다.

 

그래서 이번에 S3에서 파일을 복구하는 것과 다시 terraform destroy를 사용하는 것을 기록으로 남겨보았다.

728x90
반응형