본문 바로가기
AWS/Part 4. Ch02 테라폼을 이용한 인프라 관리

CH02_11. 테라폼 상태 관리

by Engineer-Lee 2022. 6. 3.
반응형

이번에는 테라폼 상태 관리에 대해 알아보자

terraform state는 상태 관리를 위한 명령어다.

서브 명령어 중 대표적으로 list, mv, rm 등 이 있다.


terraform state list는 현재 테라폼 워크스페이스에서 관리 중인 리소스 상태들을 확인할 수 있다.

 


terraform state show 명령어는 테라폼 코드형태로 리소스를 나타낸다.

 


terraform state mv는 테라폼 코드를 리팩토링 할 때 자주 사용된다.

위의 developer와 employee 그룹의 코드를 하나의 블록으로 합쳐보면 아래와 같다.

 

그리고 apply를 수행하면 리소스 네임이 aws_iam_group.developer, aws_iam_group.employee 에서

aws_iam_group.this["developer"], aws_iam_group.this["employee"]로 변경되었기 때문에 삭제하고 재생성된다.

이는 장애를 일으킬 수 있기에 terraform state mv '[변경 전 요소]' '[변경 후 요소]' 명령어를 이용하면 유용하다.

테라폼 상태 저장소에 변경사항을 저장되기 때문에 terraform state mv는 리소스가 삭제 후 재생성되지 않는다.

 


terraform state rm 는 상태 저장소에서 해당 상태 리소스를 제거하는 명령어이다.

이는 상태 리소스는 제거하고 실제 리소스는 그대로 유지하고 싶을 때 사용하면 좋다.

위 코드는 IAM 유저에게 권한을 부여하는 리소스 코드이다. 이를 지우고 apply를 해보면 테라폼에서 지워진 코드 부분의 리소스 또한 삭제하려한다. 이는 또 장애를 일으킬 수 있기에 terraform state list 명령어로 권한 관리 리소스에 대해 파악을 한 후

terraform state rm "aws_iam_user_policy_attachment.developer["alice"]'
terraform state rm 'aws_iam_user_policy_attachment.developer["tony"]' 명령어를 입력한다.

그리고 apply를 진행하면 분명 테라폼에서의 코드상에서 권한 관련 코드를 지웠지만 상태 저장소에서도 해당 코드를 지워서 변경사항이 없다고 뜬다.

 

AWS IAM에서 tony의 권한을 보면 관리자 권한은 그대로이고 상태 저장소안에서 권한 리소스만 지워진 걸 볼 수 있다.


 

terraform state pull 명령어는 remote state 저장소에서 상태파일을 로컬로 다운로드 받는다.

예를들어 terraform state pull > a.tfstate 는 로컬에 있는 a.tfstate 파일로 remote state 저장소에서 상태파일을 받는 것이다.

terraform state push 명령어는 remote state 저장소에 상태파일을 새로 덮어씌우는 것이다.

 

 

반응형