728x90
0. IaC(Infra as a Code)의 사용 이유
- 사람은 한정적인데 운영해야 할 서버가 많아짐 → 반복되는 일이 늘어남
- 버전 관리 가능
- 리뷰 및 테스트 가능
- 휴먼 에러 감소
- 테라폼 사용에 대한 공부와 기존 인프라가 이미 있을 경우 통합시키는 수고 필요
1. 기본 동작 방식
1.1 Init: 실행을 위한 준비 작업(초기 setting)
- 테라폼 상태 파일 확인
- provider 플러그인 다운로드
- 모듈 다운로드
1.2 apply: 작성된 코드를 기반으로 인프라 구성
- 테라폼이 자동으로 의존성(dependency)을 구성하고 병렬로 인프라를 구성한다.
- 수동으로 의존성을 걸 수 있지만 테라폼이 의존성을 구성하는 과정에서 꼬일 수 있어 사용하지 않는 것을 권장
- 어떤 리소스가 생성/수정/삭제 되는지 확인하는 plan 과정이 포함된다.
1.3 destroy: 생성된 인프라 삭제
- 테라폼 코드로 관리하는 모든 개체 제거
destroy는 모든 개체를 제거하므로 일부만 제거하기 위해서는 코드 변경 후 apply 실행
- state 파일과 구성된 환경을 비교하여 문제가 없으면(실제 인프라와 차이가 없으면) 삭제
- 어떤 리소스가 삭제 되는지 확인하는 plan 과정이 포함된다.
2. 기본 문법
2.1 resource
- 리소스 새로 생성
# resource 선언
resource "<provider_resource_type>" "<name>" {
<arguments> = <value>
}
# resource 참조 방식
<provider_resource>.<name>.<arguments>
<provider_resource>.<name>.<attributes>
2.2 data
- 테라폼으로 정의되지 않은 외부 리소스 또는 저장된 정보를 테라폼 내에서 참조할 때 사용
# data 선언
data "<provider_resource type>" "<name>" {
<argument> = <value>
}
2.3 리팩토링
- 테라폼은 코드로 작성되기 때문에 반복되는 부분과 직관적인 코드를 위해 리팩토링이 필요함
- 재사용성을 위해 module 사용 → module로 틀을 만들고 필요한 값만 넣어 찍어냄
- 반복되는 부분의 코드 무한 복사 방지를 위해 반복문 사용 가능
3. 변수
variable
- default = <value> 속성으로 기본값 설정 가능
- 기본값이 없는 변수의 경우 plan 및 apply 작업에서 직접 입력해야 함
- sensitive = true 설정을 할 경우, 콘솔에 값이 직접 출력되는 걸 방지함
- variables.tf 파일을 따로 구성 가능
# 변수 선언
variable "<name>" {
<argument> = <value>
}
4. 출력
output
- sensitive값을 output으로 출력하는 경우 값이 출력되진 않지만 다른 모듈에서 속성을 참조하기 위해 사용
- 속성 값을 노출시키고 접근할 수 있음
- sensitive = true 설정을 할 경우, 콘솔에 값이 직접 출력되지 않으며 state file에는 기록됨
- outputs.tf 파일 따로 구성 가능
output "name" {
value = <provider_resource_type>.<name>.<argument>
sensitive = true
}
5. State File과 백엔드 구성
- 테라폼은 stateful 애플리케이션으로 tfstate 파일이 존재한다.
- 테라폼이 실행되는 동안 .terraform.tfstate.lock.info 파일이 생성되면서 해당 state를 동시에 사용하지 못하도록 잠금 처리
- 테라폼으로 인프라를 구성하면 자동으로 state 파일이 생성되며 리소스마다 고유 아이디를 가진다.
- 협업에 있어 state file 관리가 중요한 문제
- state file은 로컬 저장이 기본이므로 이를 공유하기 위한 백엔드 구성이 필요
- 사실상 구축한 인프라에 대한 정보가 state file에 있기 때문에 수동으로 수정하거나 유출되면 안 됨
- 누군가 apply나 destroy로 인프라 구성 중일 때 state 파일이 변경되는데, 이때 다른 누군가가 state 파일에 접근하면 안 됨
5.1 AWS S3 + Dynamo DB
5.2 TFC (Terraform Cloud)
- HashiCorp 사에서 제공하는 Terraform Cloud
- 사용이 편리하지만 리소스 500개 생성까지만 무료
- 누군가 state 파일에 작업을 하고 있을 경우 lock이 걸려서 다른 사람은 사용 불가
terraform login
terraform init
terraform apply
6. import
- 콘솔로 생성한 리소스를 테라폼으로 관리하기 위해 terraform import 사용
- 속성과 변수 등을 테라폼 문법에 맞게 수동으로 작업해야 한다.
728x90