테라폼(Terraform) 기본
- IaC(Infrastructure as Code) 도구 중 하나로 코드를 사용해 인프라를 관리
-
테라폼으로 인프라 변경사항을 적용하면 state가 만들어진다
- 실제
AWS 인프라
와 테라폼 상태인.tfstate
가 일치되는 것이 중요
기본 개념
- Resource : 실제로 생성할 인프라 자원
ex) aws_security_group - Provider : Terraform으로 정의할 인프라 플랫폼
ex) AWS, GCP - Output : 생성된 자원의 state 파일(.tfstate)
- Backend : 생성된 state가 저장될 공간, 기본은 local이지만
backend.tf
가 추가되면 원격 저장소에 저장
ex) AWS S3 - Module : 공통적으로 활용할 테라폼 코드를 정의하는 부분 (= 변수)
- Remote state : VPC, IAM 등과 같은 공용 서비스의 state, 이를 다른 서비스에서 참조할 수 있다
- 하나의 모듈 내 Directory 경로
.
├── backend.tf # Backend
├── ec2.tf # Resource
├── provider.tf # Provider
├── terraform.tfvars # Variable 할당
└── variables.tf # Variable 선언
명령어
- 테라폼에서 자주 사용하는 기본 명령어가 있다. 명령어 중 거의 90%의 빈도로 기본 명령어를 사용한다
1. init
- 테라폼 initiate
- backend에
.tfstate
파일 생성 - local에
.tfstate
의 내용을 담은.terraform
생성
$ terraform init
2. plan
- 정의된 테라폼 코드가 적용될 결과를 표출
- plan에서 에러가 발견되지 않아도 실제 적용시 에러가 발생할 수 있다
$ terraform plan
3. apply
- 테라폼 코드가 실제로 인프라에 적용
- 적용 후 결과가 backend
.tfstate
에 저장 - 적용 후 결과가 local
.terraform
에 저장
$ terraform apply
4. import
- AWS 인프라에 배포된 resource를 테라폼 state로 가져온다
- local
.terraform
에 해당 resource의 state를 import
$ terraform import
변수(Variable)
-
variables.tf
: 변수 선언
variable "region" {}
variable "profile" {}
-
terraform.tfvars
: 변수 할당
region = "ap-northeast-2"
profile = "dev"
- 변수 사용
provider "aws" {
region = var.region
profile = var.profile
}
모듈(Module)
- 테라폼에서는 모듈을 통해 변수 템플릿을 만들어 resource에 override 할 수 있다
-
공통으로 사용되는 resource를 만들어 놓고 모듈별 변수설정을 생성해 공통 resource에 적용하는 방식
-
main.tf
(공통 resource)resource "aws_s3_bucket" "my_bucket" { bucket = var.bucket_name }
-
variable.tf
variable "bucket_name" {}
-
terraform.tfvars
bucket_name = "my-bucket"
-
my-service/provider.tf
provider "aws" { region = var.region profile = var.profile }
-
my-service/main.tf
(모듈) ```tf module { // 모듈을 적용할 source 선택 source = “../”
} ```