Terraform - 상태 파일 공유를 위한 원격 백엔드 구축, 환경 격리
1교시
어제 내용 복습
테라폼은 인프라뿐만 아니라 다양한 클라우드 서비스 프로비저닝 가능.
init으로 플러그인 다운로드할 것.
2~3교시
어제 대상 그룹이 비어 있던 이유?
-> aws_autoscaling_group 리소스에 대상 그룹을 지정해주지 않았다.
빼먹었던 부분 작성해도 연결이 되지 않는다. 상태 확인이 계속 unhealthy로 뜬다.
4교시
뭔가 수정해서 작동이 성공하긴 했는데... 뭔가 좀 찜찜하다.
-> 추정하기로는 aws_lb_listener_rule의 condition을 잘못 적은 것 같기도?
-> 상태 확인 포트가 80이거나 8080이거나는 별 상관이 없어 보인다.
Terraform 상태 관리 : 테라폼은 어떤 리소스를 관리해야 하는지 어떻게 알 수 있을까?
-> 테라폼 배포 후에 해당 경로에 terraform.tfstate라는 파일이 생긴다.
테라폼 리소스가 실제 리소스의 표현으로 매핑되는 내용을 기록하는 사용자 정의 JSON 형식이 작성되어 있다.
테라폼을 실행할 때마다 AWS에서 지금 작동 중인 EC2 인스턴스의 최신 상태를 가져와서 테라폼의 구성과 비교하여 어느 변경 사항을 적용해야 하는지 결정한다.
개인 프로젝트에 테라폼을 사용하는 경우, 로컬 컴퓨터의 단일 terraform.tfstate 파일에 상태를 저장하는 것이 좋다.
하지만 팀 단위로 사용할 경우에는....
-> 상태 파일을 저장하는 공유 스토리지 : 인프라 업데이트 시 각 팀원이 동일한 상태 파일에 접근해야 한다.
-> 상태 파일 잠금 : 2명 이상의 팀원이 동시에 테라폼을 실행하는 경우 상태 파일 업데이트가 충돌할 수 있다.
-> 상태 파일 격리 : 서비스가 변경될 때, 다른 서비스에 영향을 미치면 안 된다.
이런 문제가 발생한다.
Git 같은 버전 관리 시스템에 저장해놓고 사용할 수 있긴 한데, 단점이 있다.
수동 오류
-> 테라폼 실행 전에 최신 버전을 가지고 와야 하고, 사용이 끝난 후에 push 해야 하는데, 수동이라 잊을 수 있다.
잠금
-> 잠금 기능을 제공하지 않는 버전 관리 시스템도 있다
시크릿
-> 테라폼 상태 파일의 모든 데이터는 평문으로 저장되는데, 보안 측면으로 좋지 않다.
그래서 버전 관리 시스템 대신 테라폼에 내장된 원격 백엔드 기능을 사용한다.
수동 오류
-> plan, apply 명령을 실행할 때마다 해당 백엔드에 상태 파일을 자동으로 로드한다.
잠금
-> apply 명령을 실행하면 테라폼은 자동으로 잠금을 활성화한다.
시크릿
-> S3 버킷의 서버사이드 암호화 기능
5교시
이제 테라폼 파일로 위 3가지 문제를 해결할 수 있는 원격 백엔드 기능을 사용해 보자.
일단 수동 오류와 시크릿 문제 해결을 위한 S3 버킷 사용
버킷명은 고유한 이름을 작성해야 하니 주의
이제 S3 버킷과 DynamoDB 테이블로 원격 백엔드 구성
버킷과 테이블이 만들어진 후에 백엔드 구성 블록을 추가해 업데이트해야 한다.
-> 존재하는 객체를 가져와야 하니까
업데이트를 위해 다시 init을 하면 뭔가를 물어보는데, 상태 파일을 업로드할 것인지에 대한 것이다.
-> yes
이러면 아직 apply 하지도 않고 init만 했는데도 S3 버킷 안에 key 경로대로 상태 정보 파일이 저장되어 있다.
6교시
plan > apply를 하고 S3 버킷에 있는 상태 정보 파일에 들어가 보면 버전 정보가 구분되어 있는 것을 볼 수 있다.
이렇게 구성을 하고 나면 남은 문제는 '상태 파일 격리'만 남는다.
모든 인프라를 하나의 테라폼 파일에 모으면 편할 수는 있지만, 문제가 생기면 전체가 날아가 버린다.
-> 분리된 환경을 갖추기 : 다른 환경으로부터 격리
* 각 테라폼 구성 파일을 분리된 폴더에 저장한다.
* 서로 다른 인증 과정과 액세스 제어 방식을 사용하여 각 환경에 서로 다른 백엔드 구성.
-> 위에서 구성한 원격 백엔드 구성을 분리된 버킷에서 사용하자는 것이다.
격리 수준을 높이기 위해 구성 요소 수준에서의 분리를 적용
-> main, output, variables 파일을 각 폴더마다 둔다
다음으로 넘어가기 전에 원격 백엔드 리소스를 삭제하는데, 좀 꼬였다.
-> prevent_destroy만 주석 처리하고 destroy 하면 된다. 괜히 S3 버킷 내부 파일 삭제하지 말 것.
7~8교시
tfstate 파일 저장을 위한 S3 폴더로 가서 apply를 끝내고, 웹 서버 폴더로 가서 apply를 실행한다.
-> 백엔드 코드는 웹 서버 폴더의 main에 있다.
어쨌거나 상태 정보 파일이 따로 구성된다.
1 ~ 2교시 복습 내용 훑기
'교육' 카테고리의 다른 글
[95일 차] 21.12.07 : Terraform 4 (0) | 2021.12.07 |
---|---|
[94일 차] 21.12.06 : Terraform 3 (0) | 2021.12.06 |
[92일 차] 21.12.02 : Terraform 1 (0) | 2021.12.02 |
[91일 차] 21.12.01 : Python 6 (0) | 2021.12.01 |
[90일 차] 21.11.30 : Python 5 (0) | 2021.11.30 |
댓글