Terraform 기본 개념
다음은 테라폼 활용에 필요한 개념
- resource : 실제로 생성할 인프라 자원을 의미
- ex) aws_security_group, aws_lb, aws_instance
- provider : Terraform으로 정의할 Infrastructure Provider를 의미
- output : 인프라를 프로비저닝 한 후에 생성된 자원을 output 부분으로 뽑을 수 있다. Output으로 추출한 부분은 이후에
remote state
에서 활용할 수 있다. - backend : terraform의 상태를 저장할 공간을 지정하는 부분. backend를 사용하면 현재 배포된 최신 상태를 외부에 저장하기 때문에 다른 사람과의 협업이 가능하다. 가장 대표적으로는 AWS S3가 있다.
- module : 공통적으로 활용할 수 있는 인프라 코드를 한 곳으로 모아서 정의하는 부분. Module을 사용하면 변수만 바꿔서 동일한 리소스를 손쉽게 생성할 수 있다는 장점이 있다.
- remote state : remote state를 사용하면 VPC, IAM 등과 같은 공용 서비스를 다른 서비스에서 참조할 수 있다. tfstate파일(최신 테라폼 상태정보)이 저장되어 있는 backend 정보를 명시하면, terraform이 해당 backend에서 output 정보들을 가져온다.
Terrafrom 작동 원리
테라폼을 잘 활용하기 위해서는 테라폼이 작동하는 원리를 이해하는 것이 중요하다. 테라폼에는 3가지의 형상이 존재한다.
- Local 코드 : 현재 개발자가 작성/수정하고 있는 코드
- AWS 실제 인프라 : 실제로 AWS에 배포되어 있는 인프라
- Backend에 저장된 상태 : 가장 최근에 배포한 테라폼 코드 형상
이 세 가지 형상의 흐름을 이해하시면 각 테라폼 명령이 어떤 작업을 위한 일인지 쉽게 파악할 수 있다. 여기서 가장 중요한 것은 AWS 실제 인프라
와 Backend에 저장된 상태
가 100% 일치하도록 만드는 것. 테라폼을 운영하면서 최대한 이 두가지가 100% 동일하도록 유지하는 것이 중요한데, 테라폼에서는 이를 위해 import, state 등 여러 명령어를 제공한다.
먼저, 인프라 정의는 Local 코드
에서 시작한다. 개발자는 로컬에서 테라폼 코드를 정의한 후에 해당 코드를 실제 인프라로 프로비전한다. 이 때 backend를 구성하여 최신 코드를 저장하는데, 흐름은 아래와 같다.
Terraform init
- 지정한 backend에 상태 저장을 위한
.tfstate
파일을 생성합니다. 여기에는 가장 마지막에 적용한 테라폼 내역이 저장된다. - init 작업을 완료하면, local에는
.tfstate
에 정의된 내용을 담은.terraform
파일이 생성된다. - 기존에 다른 개발자가 이미
.tfstate
에 인프라를 정의해 놓은 것이 있다면, 다른 개발자는 init작업을 통해서 local에 sync를 맞출 수 있다. - 테라폼은 내부적으로 aws의 API들을 호출하기 때문에 라이브러리가 필요한데 그 라이브러리를 다운로드 받는 것도 init 명령어의 역할 → init 명령어를 사용하면 .terraform 폴더가 생긴다. → .terrarom/plugins/linux_amd64 밑에 라이브러리가 다운로드 된다.
Terraform plan
- 정의한 코드가 어떤 인프라를 만들게 되는지 미리 예측 결과를 보여준다. 단, plan을 한 내용에 에러가 없다고 하더라도, 실제 적용되었을 때는 에러가 발생할 수 있다.
- Plan 명령어는 어떠한 형상에도 변화를 주지 않는다.
Terraform apply
- 실제로 인프라를 배포하기 위한 명령어. apply를 완료하면, AWS 상에 실제로 해당 인프라가 생성되고 작업 결과가 backend의
.tfstate
파일에 저장된다. - 해당 결과는 local의
.terraform
파일에도 저장된다.
Terraform import
- AWS 인프라에 배포된 리소스를
terraform state
로 옮겨주는 작업. - 이는 local의 .terraform에 해당 리소스의 상태 정보를 저장해주는 역할을 한다. (절대 코드를 생성해주지 않는다.)
- Apply 전까지는 backend에 저장되지 않는다.
- Import 이후에 plan을 하면 로컬에 해당 코드가 없기 때문에 리소스가 삭제 또는 변경된다는 결과를 보여준다. 이 결과를 바탕으로 코드를 작성할 수 있다.
만약 기존에 인프라를 AWS에 배포한 상태에서 테라폼을 적용하고 싶으면 모든 리소스를 terraform import
로 옮겨야 한다. 번거로운 경우에는 처음부터 다시 작업해서 리소스를 올릴 수 있지만, 실제 서비스가 되는 인프라를 내리는 건 위험할 수 있다.
'Terraform > AWS and 테라폼: Infrastructure as' 카테고리의 다른 글
[AWS and 테라폼: Infrastructure as Code] VPC & Subnet 생성하기 (0) | 2024.01.19 |
---|---|
[AWS and 테라폼: Infrastructure as Code] VPC 소개 (0) | 2024.01.19 |
[AWS and 테라폼: Infrastructure as Code] AWS Configure 설정 (0) | 2024.01.19 |
[AWS and 테라폼: Infrastructure as Code] AWS CLI 및 Terraform 설치 (0) | 2024.01.19 |