본문 바로가기

Cloud

(Terraform) - 용어 정리

반응형

🍳머리말

Terraform에서 사용하는 여러 용어, 동작흐름 및 예시를 정리한 설명 글입니다.


📕Terraform

📔 설명

hashicorp 사에서 제공하는 여러 cloud에 resource 배포 가능한 open source 도구입니다.

infra를 바꾸고 provisioning해주며 version을 관리해 줍니다.

 

📑 infrastructure as a code

기존에는 infra 배포시 cli상에서 명령어를 이용, 절차형으로 실행하는데 이는 매우 번거로웠습니다.

선언형 언어로 ingra구성이 작성된 config file 이용해 infra를 배포합니다.

code로 정의되었으므로 생산성, 투명성 증대, file공유로 협업 효율성 증대가 가능합니다.

terraform이 구성 file분석 후 해당 vendor의 api를 target으로 호출해 resource provisioning을 하게 되었습니다.

출처 : terraform docs

📔 구성

📑 Terraform CLI

terraform 명령을 처리하기 위한 기본 명령줄 도구입니다.

📑 HCL file

.tf형태 확장자를 가진 구성 file입니다.

provisioning할 resource 구성, 선언 가능합니다.

📑 Terraform State File

.tfstate확장자를 가진 file입니다.

terraform 명령어 실행 결과에 따른 상태 관리

📑 Terraform Plugin(provider)

사용 cloud platform에 해당하는 target API와 통신가능한 binary입니다.

📑 Terraform Core

RPC사용하여 plugin과 통신합니다. 사용할 plugin 검색 및 적재. 구성 file읽기, 계획 실행하는 등의 대부분 일을 처리하는 binary입니다.

📑 Terraform Registry

Cloud platform 제어 위해서 필요한 plugin을 받기 위한 원격 저장소입니다.


📕 HCL(Hashicorp Configuration Language)

📔 정의

hashicorp 사에서 개발한 선언형 언어. JSON이 원형입니다.

📔 용도

resource 정의 및 선언

📔 구문

📑 Arguments

BLOCK내부 인자, optional합니다

📑 Expressions

문자 그대로, 다른 값 참조에 값을 표현합니다.

📑 Blocks

HCL상 객체의 정의부입니다. type, label, body로 구성되어 있습니다. body는 {}로 감싸 표현합니다.

📑 Comments

주석. '#'로 한 줄 주석 또는 '/* */'로 block주석을 표현할 수 있습니다.


📕 동작예시(ec2 instance provisioning)

📔 config file 작성

📑 provider 설정

access key, secret key, region을 작성해줍니다.

📑 resource 설정

ami id와 instance type, vpc, subnet을 추가해줍니다.

📔 terraform init 명령어 입력

입력 후에 terraform core가 구성 file 내용확인. 필요 provider인 aws download를 하게 됩니다.

📔  terraform plan 명령어 입력

구설 file 유효여부를 검사합니다. target api 호출 후 instance생성가능 여부를 검사합니다. 이를 통해 error 또는 변경예정사항을 출력합니다.

성공예시

실패예시

📔  terraform apply 명령어 입력

target(upstream) api를 호출해 실제 instance생성, .tfstate file생성 혹은 갱신합니다. 다음은 해당 명령어 실행 결과입니다.

aws console

.tfstate

📔  terraform destroy 명령어 입력

생성했던 aws instance를 실제로 삭제합니다. 이 후 .tfstate file을 갱신하고 이전 state에 대한 backup file을 생성합니다.

aws console

.tfstate file

.tfstate.backup file

📕 Terraform Schema

📔 설명

web server에서는 json형태로 통신합니다. 기존 terraform은 cli상에서 동작하기 때문에 사용 편의성을 위해서는 web에 ui형태로 service를 운영하게 됩니다.

 

web 상에서 REST API로 통신하기 위해서는 json형태로 정의된 resource로 사용하게 됩니다. terraform은 hcl로 동작하므로 json형태로 ui에 출력하기 위해서는 hcl에서 json으로 변환된 file이 필요합니다. 또한 json형태로 정의된 사용자의 request data를 hcl로 변환해 실행해야 terraform의 원활한 동작이 가능합니다.

 

terraform은 provider가 json형태로 정의된 schema file를 제공합니다. 이를 이용하여 적절히 json에서 필요한 schema file이 제공되면 ui상에서 resource를 click하게 되면 자동으로 필요한 parameter값과 text box가 ui형태로 auto generation이 가능하게 됩니다.