🗂ㅤ인프라 | 네트워크/IaC

[Terraform] 기본 구성 및 개념 정리

나우(NAWOO) 2024. 12. 15. 11:08

1. 데브옵스의 등장


1️⃣  DevOps의 등장

2007~2008년 사이에 IT 운영 및 소프트웨어 개발 커뮤니티가 업계에 치명적인 문제가 있다는 우려를 제기하면서 DevOps 움직임이 시작되었다. 개발자 및 IT/Ops 전문가는 서로 다른 목표(상충하는 목표), 서로 다른 부서 리더십, 서로 다른 주요 성과 지표를 가지고 있었고, 다른 층 또는 다른 빌딩에서 근무하는 경우도 많았다. 그 결과 각 부서는 사일로화(서로 분리되어 관리되는 상황)되어 각자의 분야나 투입 시간, 릴리스 실패, 고객 불만에만 신경쓰는 팀이 되었고, 사일로화된 팀과 회사 내 커뮤니케이션 라인이 무너짐으로 인해 어려움을 겪게 되었다. 이러한 배경으로 인해 DevOps 소프트웨어 개발 방법론이 나오게 된 것이다.

 

DevOps는 'development(개발)'와 'operations(운영)'가 합쳐진 단어이지만, 단순히 각각의 용어를 결합한 것 이상의 포괄적인 아이디어와 방식을 나타낸다. DevOps는 시스템 개발자와 운영을 담당하는 정보 기술 전문가 사이의 소통, 협업, 통합 및 자동화를 강조하는 소프트웨어 개발 방법론이다.

 

DevOps는 새로운 소프트웨어 기능, 개선 요청 또는 버그 수정 등 하나의 아이디어가 개발에서 배포에 이르는 프로세스의 속도를 높임으로써 더 빨리 프로덕션 환경에 전달되어 사용자에게 가치를 전달한다. 이러한 접근 방식을 적용하려면 개발 팀과 운영 팀이 자주 커뮤니케이션하고 팀원들과 공감하면서 업무에 접근해야 한다. 그리고 확장성과 유연한 프로비저닝도 필요하다. DevOps를 확립하면 셀프 서비스와 자동화를 통해 다양한 이점과 경쟁력을 얻을 수가 있다. 일반적으로 개발자는 IT 운영 담당자와 긴밀하게 협력하여 소프트웨어 빌드, 테스트, 출시 속도를 가속화할 수 있다.

 

2️⃣  DevOps 이점

  • 속도 
  • 신속한 제공
  • 안정성
  • 확장 가능
  • 협업 가능

 

3️⃣  DevOps 엔지니어

DevOps 엔지니어는 코딩, 인프라 관리, 시스템 관리 및 DevOps 도구 체인을 포함하여 개발 및 운영에 대한 광범위한 지식을 갖춰야 하는 IT 전문가이다. DevOps 엔지니어는 공동 작업에 더 적합한 환경을 만들기 위해 사일로 전반에서 작업하므로 대인 관계 스킬을 보유해야 한다.

DevOps 엔지니어는 일반적인 시스템 아키텍처, 프로비저닝 및 관리에 대해 잘 알고 있어야 하지만, 소스 제어 사용, 코드 검토 주고받기, 단위 테스트 작성, 애자일 원칙에 대한 친숙도 등 기존 개발자 도구 세트 및 관행에 대한 경험도 있어야 한다.

DevOps 엔지니어의 역할은 조직마다 다르지만 공통적으로 릴리스 엔지니어링, 인프라 프로비저닝 및 관리, 시스템 관리, 보안 및 DevOps 지원이 어느 정도 결합되어 있다.

 

 

2. 코드형 인프라(infrastructure as Code)란?


1️⃣  IaC ?

코드형 인프라(Infrastructure as Code, IaC)는 컴퓨터에서 읽을 수 있는 정의 파일(미리 구성이 정의된 코드 형태의 파일)을 사용해 인프라나 서비스를 관리하고 프로비저닝하는 프로세스를 말한다.

  • Provisioning(프로비저닝) : Provider가 코드를 인프라로 반영되는 과정을 말한다.

 

2️⃣  IaC는 왜 생겨났는가?

VM ware, Hyper-V와 같은 기술이 발전하면서 여러 대의 웹 서버를 더 쉽게 더 많이 만들 수 있게 되었다. 이로 인해 기하급수적으로 서버가 늘어나면서 서버에 관한 프로비저닝과 운영에 대한 이슈가 발생하였고, 이를 해결하기 위해 서버 구축 및 운영에 대한 자동화 기술이 필요하게 되었다. 이러한 배경을 통해 코드로 인프라를 구축 및 운영할 수 있는 IaC가 생겨나게 된 것이다. 이로 인해 IaC를 이용하여 IT 인프라 요구 사항을 관리함과 동시에 일관성을 높이고 오류 및 수동 구성을 줄일 수 있다.

 

 

⚙️ IaC는 다음과 같이 2가지 형태의 코드를 제공할 수 있다.

 

선언형
(일반적으로 IaC에서 많이 선택하는 형태)
절차형 (=명령형)
  • '최종 결과를 보장해 주어야 한다.'
  • 최종 결과를 선언하면 된다.
  • 순서는 중요하지 않다. ⇒ 자체적으로 그래프를 그려 작업 순서를 결정하고, 결정된 순서대로 작업을 진행한다.
  • 작업 처리 중 중간에 fail이 발생할 경우 ⇒ ‘처음 상태로 돌아가게 된다.’
  • 멱등성이 보장되어야 한다.
  • 순서에 따라 top-down 방식으로 위에서부터 아래로 설치/수정/삭제를 진행한다.
  • Ansible(앤서블)멱등성 지원 (동일한 작업을 여러 번 실행해도 시스템 상태가 변하지 않도록 함. 네트워크 지원 및 중복 요청 등의 문제 해결하는 데 도움을 줌)
    • 예를 들어, dnf/yum 모듈을 사용해 nginx를 설치(present) 할 때, 이미 설치되어 있는 경우 재설치가 발생하지 않으며, 설치되지 않은 경우에만 설치함
    • 주요 모듈 및 사용
      • service 모듈 : started 상태로 설정하면 서비스가 실행 중인 상태를 유지
      • dnf/yum 모듈
        • present: 패키지가 설치되어 있지 않은 경우에만 설치
        • absent: 패키지를 삭제

 

3. 코드형 인프라(IaC)의 장점


  • 비용 절감
  • 배포 속도 향상
  • 오류 감소
  • 인프라 일관성 향상
  • 구성 변동 제거

 

4. 테라폼(Terraform) 작동 방식


1️⃣  Terraform 개념

테라폼(Terraform)은 하시코프사(HashiCorp)에서 공개한 선언형 IaC 도구다. 테라폼은 세 가지 중요한 철학(워크플로에 집중, 코드형 인프라, 실용주의)을 담아 설계되었다.

  • 테라폼(Terraform)HCL(Hashicorp Configuration Language)라는 테라폼 특유의 문법을 사용한다.
    • 테라폼 코드는 모두 HCL 문법으로 선언적으로 작성한다.
    • HCL은 JSON 형식과 비슷하다. (JSON 문법이 원형이기 때문이다)
  • 테라폼(Terraform)으로 다양한 클라우드를 사용할 수 있다.
    • 같은 테라폼 코드 구성으로 다른 클라우드를 쉽게 작동시킬 수 있다.
      • 다만, AWS의 테라폼 코드로 Azure를 작동시킬 수는 없다.
      • 하지만 AWS나 Azure의 클라우드 구성이 같기 때문에 코드의 이름과 설정만 조금 바꿔주면 작동 시킬 수 있다. (AWS의 가상머신 = EC2 / Azure의 가상머신 = Virtual Compute Service)
  • 테라폼(terraform)의 명령어를 실행하면 실행한 위치의 모든 .tf 파일을 읽어서 실행한다.

일반적으로 아래와 같은 폴더 구조로 된다.

# 기본 구조 (minimal)

Terraform_folder/
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
# 기본 구조 (maximal)

Terraform_folder/
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
├── modules/
| ├── main.tf
| ├── variables.tf
| ├── outputs.tf
# 개발 환경별 폴더 나누는 방법
# - 각 환경에 맞게 각각 나눠줌으로써 실행 가능
# - 각 폴더마다 .tfstate 파일을 따로 생성함으로써 꼬임 방지 가능

├── dev/
│   ├── main.tf
│   ├── variables.tf
├── stage/
│   ├── main.tf
│   ├── variables.tf 
└── prod/
    ├── main.tf
    └── variables.tf

 

2️⃣  Terraform 구성 파일

.tf 파일, .tfstate 상태 파일, .backup 파일, .main.tf 파일, .lock.hcl 잠금 파일, .variables.tf 파일, *.tfvars 파일

 

📁  .tf 파일
  • .tf 의 확장자를 사용한다.
📁  .terraform.tfstate (상태 파일)
  • .tfstate 파일을 통해 테라폼이 관리하는 인프라의 📝현재 상태를 담고 있다. (해시)
    • (인프라가 어떻게, 어떤 상태로 만들어져 있는지 추적 가능)
  • .tfstate 파일은 주로 JSON 형식으로 저장
📁  .terraform.tfstate.backup (백업 파일)
테라폼 명령어를 실행하여 인프라 반영하면 테라폼에 의해 자동으로 생성되는 특별한 파일
  • .tf 파일 자체를 저장
  • 최종 상태가 기록되므로 인프라에 문제가 있을 경우에는 .backup 파일을 이용하여 최종 상태를 복구할 수 있다.
  • 로컬에 저장하기 보다는 별도의 공간에 분리하여 보관하는 것이 안전하다. (S3나, 별도의 저장소를 이용하는 경우 있음)
📁  .main.tf
  • 테라폼(terraform)은 모든 구성을 main.tf 파일에 작성해도 프로비전은 가능하다.
    • 특정 사용자가 main.tf 파일에 접근할 경우, 타 사용자의 접근을 막기 위한 lock 파일이 생성되고, 이로 인해 타 사용자의 접근을 차단한다.
    • main.tf 파일은 모듈 형태로 나누어 사용하게 된다. 이는 폴더/디렉토리로 구분하여 각 폴더/디렉토리 내에 main.tf, var.tf, output.tf 파일을 별도로 관리하게 된다.
📁  .terraform.lock.hcl (잠금 파일)
terraform init을 실행 했을 때, 그 위치의 디렉토리에 자동으로 생성되는 잠금 파일 (.terraform.lock.hcl 파일 뿐만 아니라, 📁.terraform 파일도 같이 생성된다.)
  • 프로바이더 종속성을 고정시키는 .terraform.lock.hcl 파일은 테라폼(terraform) 0.14 버전 이후부터 추가되었다.
    • 해당 파일은 팀으로 운영할 경우, 효율적으로 작용한다.
    • 해당 파일을 통해 일관된 인프라를 유지할 수 있다.
  • .terraform.lock.hcl 파일과 .terraform 파일에는 프로바이더의 정보(AWS와 같은 외부 시스템)와 테라폼 구성 파일(.tf 파일에 작성된 코드)의 의존 관계상관성을 기록한다.
  • 작업자가 의도적으로 버전을 변경하거나, 코드에 명시한 다른 버전으로 변경하려면 terraform init -upgrade를 수행해야 한다.
  • .terraform, .terraform.lock.hcl 은 git에 업로드해서는 안된다.
📁  .variables.tf
테라폼 모듈 내에서 사용할 변수를 정의하는 데 사용되는 파일
  • 모듈 내에서 공통으로 사용되는 변수를 정의하는 데 주로 사용된다.
📁  *.tfvars 파일
테라폼 변수에 값을 할당하는 데 사용되는 파일
  • 환경별로 다른 값을 변수에 할당하기 위해 주로 사용된다.
    • 여러 환경(ex : 개발, 스테이지, 프로덕션)에서 사용할 변수 값들을 지정하는 데 사용된다.
  • variables.tf 파일의 변수의 값을 유연하게 할당하기 위해 존재하는 것으로 추측된다.
    • *.tfvars 파일 없이 variables.tf 파일로만 변수 값을 지정할 수도 있다.

 

 

 

3️⃣  테라폼(Terraform) Workflow

https://velog.io/@kimkevin90/%ED%85%8C%EB%9D%BC%ED%8F%BC

 

 

4️⃣  Main Commands (주요 커맨드)

init, validate, plan, apply, destroy

 

  init (초기화)
  • working directory 초기화 작업 수행
  • provider plugin 다운로드
  • terraform Provider 및 버전 관리를 위한 .terraform.lock.hcl 파일 생성
terraform [global options] init [options]
  • 테라폼을 시작하고 테라폼의 상태를 저장하기 위한 .tfstate 파일을 생성한다.
  • 테라폼은 기존 내용과 변경이 있는 내용을 확인하여 변경된 내용만을 반영한다. (형상관리도구)
  • 상태 파일은 백업을 위해 별도로 .backup 파일도 생성한다.
  • 0.14 버전 이후부터 프로바이더 종속성을 고정시키는 .lock.hcl 파일이 추가되었다.
  • .lock.hcl 파일이 있으면 해당 파일에 명시된 버전으로 init을 수행한다. 이후 작업자가 의도적으로 버전 변경하거나, 코드에 명시한 다른 버전으로 변경하려면 terraform init -upgrade를 수행해야 한다.
# upgrade (버전 변경)
terraform init -upgrade

 

  validate (검증)
  • configuration file 유효성
terraform [global options] validate [options]
  • -no-color : 해당 옵션을 추가하면 출력의 색 표기를 제거해준다.
  • -json : 서브 커맨드 옵션 중에 -json 옵션을 사용할 수 있는 명령어는 실행 결과를 JSON 형식으로 출력할 수 있다.
  • 단어 의미 그대로 디렉터리에 있는 테라폼 구성 파일의 유효성을 확인한다. (이 때, 코드적인 유효성만 검토)
# -no-color
terraform validate -no-color

# -json
terraform validate -json

 

  plan (계획)
  • 실행 계획 생성
  • 리소스 정보 및 리소스에 대한 작업(add, change, destory)에 관한 내역 제공
    • 현재 상태가 최신화되었는지 확인
    • 적용하고자 하는 구성을 현재 상태와 비교하고 변경점을 확인
    • 구성이 적용되는 경우, 대상이 테라폼 구성에 어떻게 반영되는지 확인
terraform [global options] plan [options]
  • -detailed-exitcode
    • 옵션이 없던 때와 결과는 같지만, exitcode가 환경 변수로 구성된다.
    • exitcode 또는 errorlevel은 동작의 결과를 숫자 코드로 제공한다.
      • 0 : 변경 사항이 없는 성공
      • 1 : 오류가 있음
      • 2 : 변경 사항이 있는 성공
  • -out=<파일명> : -out=<파일명> 형식으로 파일 이름이 정해져 플랜 결과가 생성된다. 바이너리 형태이기 때문에 내용을 확인할 수 는 없다.
  • plan 명령어는 테라폼으로 적용할 인프라의 변경 사항에 관한 실행 계획을 생성하는 동작이다. 즉, 실제로 프로비전이 되는 것이 아닌, 미리 예측해보는 테스트인 것이다.
  • 테스트를 통해 리소스 내에 데이터 값으로 어떤 값이 사용되는지 여부 또는 코드의 오류를 미리 점검해볼 수 있다.
  • 그러나, plan에서 오류가 없다고 하더라도 실제 프로비전에서는 이를 보장해주지는 않는다.

 

  apply (실행)
  • 인프라 프로비저닝
  • plan에서 작성된 적용 내용을 토대로 작업 실행함
terraform [global options] apply [options] [PLAN]
  • .tf 파일의 terraform 코드(변경 사항)를 클라우드 서비스에 배포하는 명령어
  • 실제 프로비전 > 변경 사항을 실제 인프라에 적용한다.
  • 생성된 최종 정보는 .tfstate 파일이 저장되며, .backup 파일에도 이를 저장 시켜 준다.

 

  destory (제거)
  • 인프라 destory(제거) 실행
terraform [global options] destory [options]
  • .tf 파일에 기반하여 프로비전된 리소스를 일괄 삭제한다. (만들어진 인프라 삭제)
  • terraform apply와는 반대로 삭제되는 리소스들을 조회한 후, yes를 입력하게 되면 삭제를 진행한다.

 

5️⃣  Terraform 기본 개념

Provider, Provisioner, Resource, Variables, Locals, Outputs, State, Module, data Source

 

Provider (프로바이더)
  • 테라폼으로 생성할 인프라의 종류를 의미한다. (ex. AWS, Azure, …etc)
  • 일반적으로 Provider.tf 파일에 정의함
provider "<provider>" { 
  attribute1 = value1
}
Provisioner (프로비저너)
  • Terraform에서 프로비저닝이란, 인프라를 생성 후, 추가 작업을 실행하는 기능을 나타낸다.
  • 가상 서버를 만들 때, 서버에 필요한 소프트웨어나 설정을 설치 및 설정할 수 있다.
    • 이는 새로운 시스템을 구축할 때 필요한 일련의 작업을 자동화할 수 있다.
    • 개발자는 더 쉽게 인프라를 구성하고 유지 보수 할 수 있게 된다.
  • 일반적으로 resource 안에 적는다.
resource "aws_instance" "example" {
  provisioner "local-exec" {
    command = "echo 'Hello, world!'"
  }
}
Resouce (리소스)
  • 리소스(Resource)는 쉽게 클라우드의 서비스에 해당된다.  
    • ex : AWS - EC2, S3, RDS, Lambda, IAM, VPC ..etc
  • 일반적으로 main.tf 파일에 정의한다.
# resource_name은 사용자가 임의로 지정할 수 있다.
resource "<provider>_<resource_type>" "<resource_name>" { 
  attribute1 = value1   # 속성과 설정
}
Variables (베리어블 ; 변수)
  • variables은 쉽게 인프라에 사용되는 변수의 값을 선언하고 할당하는 사용되는 기능이다. 
    • 즉, 인프라의 변수는 variables 에 저장하면 됨
    • [사용 예시] 만약 개발하는 애플리케이션 이름이 "구글"이라면, 이름을 variables에 저장한다. 개발 도중에 이름을 호출 해야 할 때 마다 variables에서 불러오면 된다.
  • 특징
    • 변수를 variables에 관리함으로써 변수를 다른 환경에서 재사용 가능하게 만들며, 이해하기 쉽게 만든다.
      • 결과적으로 인프라 구성을 유연하게 만든다.
    • 변수를 variables에 관리함으로써 인프라 구성의 민감한 정보를 보호할 수 있다.
    • 일반적으로 variables.tf파일에 적는다.
variable <name> {
  description = <value>
  type        = <value>
  default     = <value>
}

# var.<name>
Locals (로컬)
  • locals는 기본적으로 variables와 비슷하다. 둘 다 테라폼에서 값을 저장하는 데 사용되는 변수이다. > 하지만 차이점이 존재한다.
locals {
  name = "my-instance"
}
Outputs (아웃풋 ; 출력)
  • Output은 Terraform 코드 실행으로 생성한 인프라의 속성이나 특정 값을 추출하거나 표시하고자 할 때 사용한다.
    • 즉, 사용자가 Terraform을 적용한 후 결과값을 확인하고 싶을 때 사용하는 변수이다.
  • terraform apply 될 때 콘솔에 출력해 준다. 혹은terraform output으로 콘솔에서 확인할 수 있다.
  • Output을 사용하여 리소스의 특정 속성이나 값을 외부에서 활용할 수 있게 된다. 
    • 다른 Terraform 코드외부 툴, 스크립트에서 사용할 수 있다.
    • Ex ) EC2의 IP 주소는 자동 생성되는데, 만약 개발 중에 IP 주소가 필요하면 output을 활용하면 된다.
  • 일반적으로outputs.tf 파일에 저장한다.
  • 명령어를 통해 터미널에 쉽게 출력할 수 있다. (디버깅에 유리)
# output 콘솔 확인 가능
$ terraform apply
...(생략)
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:
vpc_id = "vpc-0xxxxxxxxxxxb3d6"

# 명령을 통해 터미널에서 쉽게 출력 가능
terraform output <target>

# 기본 문법
output <output_name> {
  value = <value>
}
State (스테이트 ; 상태)
  • State는 Terraform이 생성한 인프라의 현재 상태를 기록하는 파일이다.
  • State는 Terraform이 어떤 리소스를 생성하고 어떤 속성을 가지고 있는지를 추적하는 데 사용된다.
    • State 파일이 없으면 인프라의 현재 상태를 확인할 수 없게 된다.
  • Terraform 명령어를 실행할 때마다 자동으로 state 파일이 업데이트 된다.
  • 일반적으로 .tfstate파일 형태로 저장된다.
  • State 파일은 일반적으로 다음과 같은 로컬이나 원격 저장소에 저장한다.
    • 로컬 디렉토리, Amazon S3 bucket, Google Cloud Storage bucket, …etc
  • State 파일은 JSON 형식으로 작성되며 다음과 같은 정보를 포함한다.
    • 리소스 이름, 리소스 유형, 리소스 속성, 리소스 상태
Module (모듈)
  • Module은 그냥 목적에 따라 Terraform 파일을 그룹으로 나누는 방법이다.
  • 또한, Module은 하나의 기능을 수행하도록 설계된 리소스 집합이다.
  • 특징
    • 코드를 조직화하고 가독성과 유지 관리성을 향상시킨다.
    • 코드의 재사용성을 향상시킨다
    • 모듈은 다른 모듈을 호출하여 구성을 구성할 수 있습니다. 
module "<name>" {
  source = <source_path>
}
Data Source (데이터)
  • Data 블록은 기존의 인프라 리소스나 데이터(외부에서 정의된 정보)를 가져올 때 사용되는 블록이다.
    • 외부에서 정의된 정보란, Terraform 코드가 실행되는 시점에서 이미 존재하는 인프라의 정보를 말한다.
    • Ex) AWS Console로 만든 AWS 서비스, 내가 만든 AWS 서비스가 아니라, 나의 관리 밖에서 다른 사람이 만든 AWS 서비스
  • 해당 블록을 사용하여 기존 인프라 리소스를 읽고 이를 Terraform 코드 내에서 사용할 수 있다.
  • Data 블록은 주로 기존의 인프라에 있는 정보를 활용해 새로 무언가를 하고 싶을 때 활용된다.
# external_data_source_type : 각 공급자의 데이터 유형을 지정.
# data_block_name : 데이터 블록의 이름을 지정.

data <external_data_source_type> <data_block_name> {
  # 데이터 블록 설정 및 속성
}

 

 

 

🔎  HCL (Hashicorp configuration Language)

 

더보기

HCL(HashiCorp configuration language)은 하시코프사에서 IaC와 구성 정보를 명시하기 위해 개발된 오픈 소스 도구다.

  • 테라폼에서는 HCL이 코드의 영역을 담당한다.
  • HCL은 쉽게 읽을 수 있고 빠르게 배울 수 있는 언어의 특성을 가진다.
  • 선언적(인프라=코드) 특성을 갖게 되고, Turing-complete(튜링 완전한) 언어적 특성을 갖는다.
    • 즉, 일반적인 프로그래밍 언어의 조건문 처리 같은 동작이 가능하다는 것이다.

 

HCL을 사용하는 이유

하시코프사에서 Ruby 같은 여타 프로그래밍 언어를 사용해 JSON 같은 구조를 만들어 내기 위한 작업을 진행하면서 알게 된 것은 어떤 사용자는 사람에게 친화적인 언어를 원하고, 또 어떤 사용자는 기계 친화적인 언어를 원한다는 것이다. 그러나, 아래에 정리된 표와 같이 어느 것을 골라 정하기도 쉽지 않다.

 

JSON YAML 일반적인 프로그래밍 언어
  • 친화적/기계 친화적인 언어 둘 다 잘 맞음
  • 그러나, 구문이 상당히 길어지고 주석이 지원되지 않음
  • 처음 접하는 사용자가 실제 구조를 만들어내고 익숙해지는 데 어려운 편
  • 관리 대상이 많아지고 구성이 복잡해질 경우, 리소스 구성을 파악하기 어려움
  • 프로비저닝 목적 이상의 많은 기능을 내장하고 있는 데서 문제가 생길 수 있음
  • 작업자들이 모두 선호하는 언어를 골라 정하기도 쉽지 않음

그래서 하시코프사에서는 HCL을 개발하였고, HCL을 사용하면 동일한 내용을 JSON으로 표현하는 것보다 50~70퍼센트 더 간결하고 읽기 쉽게 작성할 수 있다. 그리고 HCL 표현식에는 일반적으로 코드에서 사용되는 주석 표기부터 변수 정의 등을 포함하고 프로그래밍적인 연산과 구성 편의성을 높이기 위한 function도 제공하고 있다.

 

HCL 형식과 JSON 형식 비교
변수를 취급하는 방식 비교

 

 

 

https://developer.hashicorp.com/terraform/language/functions

https://github.com/hashicorp/hcl


 

 

5. 테라폼과 다른 코드형 인프라 도구 


Terraform, Chef, Puppet, Ansible, AWS Cloudformation...

 

 

 

6. 출처 및 참고 자료