잘못 이해한 개념이 있을 수 있습니다.
TL;DR
terraform의 remote state를 실수로 삭제했고, 그 이후에 벌어진 카오스
도입을 고려하시는 분들은 아래 글을 참고하셔도 좋을 것 같습니다.
우아한 형제들 - 좌충우돌 Terraform 입문기
사내의 개발환경을 EC2에서 Fargate로 옮기면서,
AWS 환경을 GUI가 아닌 CLI로 자동으로 구축해주는 terraform도 함께 도입했는데,
그 과정에서 해서는 안 되는 것들에 대해 실제로 부딪치면서 알게 된 것을 남긴다.
간단히 알게된 Fargate, ECR, terraform 에 대해서 글로 남기고, 실패한 이유및 시도해 본 방법들에 대해서도 남기고자 한다.
service를 나누는 것과, task를 나누는 것의 차이는?
1) network의 차이. 하나의 서비스는 하나의 localhost이다.. service를 나누면 위에서 언급한 것처럼 DNS로 이름풀이를 해야한다.
2) deploy를 하면 정의된 task의 increment가 증가하는데, 서비스를 나누면 이 increment가 과도하게 증가하지 않게 된다.
환경변수는 container에 넣고, 소스관리가 됩니다. 보안이 필요한 내용은, AWS의 secret manager로 관리한다. (소스관리 대상에서 제외시킴으로써 보안강화)
EX) 향후 동작방향
circle ci -> docker build -> image build -> task에서 정의한 ECR
인프라 베이스의 코드관리.
・remote state(S3)
・variables
・local
・main
・module
init -> .terraform 에 .tfstate가 작성됨. 초기화
plan -> diff가 표시된다. 반드시 차이를 확인하자!
apply -> 실행
destroy -> 기존 구성을 삭제
가장 큰 실패 요인 : S3에 있는 remote state를 실수로 삭제해 버린것...
명확한 이유가 없는 이상 해서는 안 된다... ㅠㅠ
S3에 있는 remote state를 지워버린 후, init, plan, apply, destroy 등의 명령어가 제대로 실행되지 않게 되었다.
already scheduled for deletion
에러가 뜨면서 다시 문제가 발생.우선 S3에 있는 remote state는 정말로 필요한 경우가 아니면 수정해서는 안 된다는 것을 깊이 깨달았다. 그 이후는 정말 혼란에 빠지는 상황이 발생...
개발서버라서 다행이지 실제 서비스였으면 정말 큰 일 날뻔했다.