답변 2
3
안녕하세요.
결론부터 말씀드리면 문의주신 내용이 맞습니다.
------------------------------------------------------------------------------------------------
조금만 첨언을 드리면, 테라폼은 3가지 형상을 검사합니다.
1. backend의 .tfstate : 테라폼 코드가 실제 리소스에 반영된 최종 결과물입니다. 팀원들이 함께 협업을 할 때, backend에 이 .tfstate파일을 놓고 협업을 하게 되면, 다른 사람이 수정한 부분까지 함께 반영된 결과물을 의미합니다.
2. 실제 리소스 : 실제 AWS상에 생성된 리소스를 의미합니다
3. 로컬 코드(.terraform): 로컬에 현재 작성되어 있는 코드를 의미합니다.
terraform plan 명령어를 사용하시게 되면, 테라폼은 위 세가지 사항을 전부 비교합니다. 기준은 로컬 코드입니다. 즉, 아무리 실제 리소스와 .tfstate가 변경되었다고 하더라고, 로컬에서 코드를 변경하지 않으면 로컬에 정해진 리소스로 형상이 맞추어집니다. 즉, 실제 리소스에서 변경 작업을 하건, 다른 사람이 테라폼 코드를 고치건 로컬 코드를 기준으로 변경되는 사항을 보여주는 것입니다.
따라서 로컬 코드를 기준으로 리소스를 검사하기 때문에, 실제 리소스가 있더라도 로컬에서 만든 리소스가 아니면 확인할 수가 없습니다. 이 때 "검사 대상이 되는 리소스"들을 모아 놓은 곳이 바로 .terraform을 포함한 로컬코드입니다. 손쉽게 확인하실 수 있는 방법은 .terraform코드를 삭제해보시는 겁니다.(실제 환경에서는 하시면 안됩니다.) 만약 .terraform을 삭제하시고 plan을 치시면 테라폼 입장에서는 검사할 리소스가 없기 때문에 전부 새로운 리소스라고 판단하게 됩니다.
그래서 . terraform을 항상 최신으로 맞춰주는 것이 중요합니다. 여러 사람이 로컬에 각자 다른 .terraform을 가지게 되면 매번 리소스에 변경사항이 발생한다고 나올 겁니다. 그래서 이런 경우를 막기 위해 backend 라는 것을 사용하실 수 있습니다. 자세한 내용은 16강을 참조 부탁드립니다.
0