Terraform 변수 사용법

LinuxBeginner
지금 연습하기

소개

Terraform 은 인프라를 안전하고 효율적으로 구축, 변경 및 버전 관리할 수 있는 강력한 도구입니다. Terraform 구성을 유연하고 재사용 가능하게 만드는 핵심 기능 중 하나는 입력 변수 (input variables) 의 사용입니다. 변수를 사용하면 구성을 매개변수화할 수 있으므로 값을 하드 코딩하는 것을 피하고 소스 코드를 변경하지 않고도 배포를 쉽게 사용자 정의할 수 있습니다.

본 랩에서는 Terraform 변수 사용의 기본 사항을 학습합니다. 로컬 파일 (local file) 을 생성하는 간단한 구성을 만들게 됩니다. 이 파일의 이름과 내용은 사용자가 정의하고 Terraform 명령 실행 중에 전달하는 변수에 의해 결정됩니다.

본 랩이 끝날 때쯤에는 다음 사항을 이해하게 될 것입니다.

  • .tf 파일에서 변수를 선언하는 방법.
  • 리소스 블록 내에서 변수를 참조하는 방법.
  • terraform apply를 실행할 때 변수에 값을 제공하는 방법.

변수 정의를 위한 variables.tf 파일 생성

이 단계에서는 변수 선언을 보관할 전용 파일을 생성합니다. 변수는 .tf 파일 어디에나 선언할 수 있지만, 일반적으로 variables.tf라는 파일에 배치하는 것이 일반적인 관례입니다. 이러한 관행은 프로젝트를 체계적으로 유지하고 다른 사람들이 구성이 예상하는 입력 값이 무엇인지 쉽게 이해할 수 있도록 도와줍니다.

모든 작업은 ~/project 디렉토리에서 수행됩니다. 먼저 touch 명령을 사용하여 variables.tf 파일을 생성합니다.

touch variables.tf

디렉토리 내용을 나열하여 파일이 생성되었는지 확인할 수 있습니다.

ls

출력에서 variables.tf를 볼 수 있어야 합니다.

variables.tf

지금은 이 파일이 비어 있습니다. 다음 단계에서 변수 정의를 이 파일에 추가할 것입니다.

파일명 (filename) 을 위한 문자열 변수 정의

이 단계에서는 첫 번째 변수를 정의합니다. 이 변수는 Terraform 이 생성할 파일의 이름을 지정하는 데 사용됩니다.

변수는 variable 블록을 사용하여 선언됩니다. 각 블록은 단일 입력 변수를 정의합니다. filename이라는 변수를 정의해 보겠습니다.

이전 단계에서 생성한 variables.tf 파일을 nano 편집기를 사용하여 엽니다.

nano variables.tf

이제 파일에 다음 코드를 추가합니다. 이 코드는 filename이라는 변수를 선언하고, 유형을 string으로 지정하며, 유용한 설명을 포함합니다.

variable "filename" {
  description = "The name of the file to create."
  type        = string
}
  • variable "filename": filename이라는 변수의 선언을 시작합니다.
  • description: 이 선택적 인수는 변수의 목적에 대한 사람이 읽을 수 있는 설명을 제공합니다.
  • type: 이 인수는 변수의 데이터 유형을 지정합니다. 여기서는 텍스트 값을 허용함을 나타내기 위해 string을 사용합니다.

코드를 추가한 후, Ctrl+X를 누르고 이어서 Y, 그리고 Enter를 눌러 파일을 저장하고 nano를 종료합니다.

내용 (content) 을 위한 문자열 변수 정의

이 단계에서는 파일에 작성될 내용을 담을 두 번째 변수를 정의합니다. 이는 이전 단계와 동일한 패턴을 따릅니다.

다시 nanovariables.tf 파일을 엽니다.

nano variables.tf

이전에 추가한 filename 변수 정의 아래에 다음 variable 블록을 추가합니다.

variable "content" {
  description = "The content to write into the file."
  type        = string
}

이제 완성된 variables.tf 파일은 다음과 같아야 합니다.

variable "filename" {
  description = "The name of the file to create."
  type        = string
}

variable "content" {
  description = "The content to write into the file."
  type        = string
}

이를 통해 Terraform 구성에 대한 두 가지 입력 매개변수 (하나는 파일 이름용, 다른 하나는 내용용) 가 정의됩니다.

파일을 저장하고 nano를 종료합니다 (Ctrl+X, Y, Enter).

local_file 리소스 블록에서 변수 참조

이 단계에서는 주요 Terraform 구성 파일인 main.tf를 생성하고 방금 정의한 변수들을 사용할 것입니다. 로컬 파일 시스템에 파일을 생성하기 위해 hashicorp/local 프로바이더의 일부인 local_file 리소스를 사용할 것입니다.

먼저, main.tf라는 새 파일을 생성합니다.

nano main.tf

이제 main.tf 파일에 다음 구성을 추가합니다.

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

resource "local_file" "my_file" {
  filename = var.filename
  content  = var.content
}

이 구성을 분석해 보겠습니다.

  • terraform { ... }: 이 블록은 필요한 프로바이더를 포함하여 Terraform 설정을 구성합니다. 우리는 구성에 local 프로바이더가 필요하다고 Terraform 에 알려주고 있습니다.
  • resource "local_file" "my_file": 이것은 local_file 유형의 리소스를 정의하고 로컬 이름 my_file을 부여합니다.
  • filename = var.filename: 여기서 변수를 참조합니다. var. 접두사 뒤에 변수 이름 (filename) 이 오면 Terraform 에게 이 인수에 filename 변수의 값을 사용하도록 지시합니다.
  • content = var.content: 마찬가지로, content 변수의 값을 리소스의 content 인수에 할당합니다.

코드를 추가한 후, 파일을 저장하고 nano를 종료합니다 (Ctrl+X, Y, Enter).

변수 값을 사용하여 terraform apply 실행

마지막 단계에서는 Terraform 구성을 실행하고 변수에 값을 제공합니다.

먼저, Terraform 작업 디렉터리를 초기화해야 합니다. terraform init 명령어는 구성에 정의된 프로바이더 (이 경우 local 프로바이더) 를 다운로드하고 설치합니다.

다음 명령어를 실행합니다.

terraform init

Terraform 이 성공적으로 초기화되었음을 나타내는 출력을 보게 될 것입니다.

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)

Terraform has been successfully initialized!
...

이제 구성을 적용할 수 있습니다. 변수에 값을 전달하려면 -var 명령줄 플래그를 사용할 수 있습니다. 또한 대화형 확인 프롬프트를 건너뛰기 위해 -auto-approve 플래그도 사용할 것입니다.

filenamecontent에 대한 값을 사용하여 terraform apply 명령어를 실행합니다.

terraform apply -var="filename=hello.txt" -var="content=Hello, Terraform Variables." -auto-approve

Terraform 은 이제 계획을 실행하고 파일을 생성합니다. 출력은 다음과 유사할 것입니다.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.my_file will be created
  + resource "local_file" "my_file" {
      + content              = "Hello, Terraform Variables."
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "hello.txt"
      + id                   = "..."
    }

Plan: 1 to add, 0 to change, 0 to destroy.

local_file.my_file: Creating...
local_file.my_file: Creation complete after 0s [id=...]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

모든 것이 제대로 작동했는지 확인하려면 cat 명령어를 사용하여 새로 생성된 파일의 내용을 표시합니다.

cat hello.txt

변수에 제공한 내용을 보게 될 것입니다.

Hello, Terraform Variables.

축하합니다! Terraform 변수를 성공적으로 사용하여 파일을 생성했습니다.

요약

본 랩 (Lab) 에서는 Terraform 에서 변수를 사용하는 기본 워크플로우를 학습했습니다. 구성을 매개변수화하여 더욱 동적이고 재사용 가능하게 만드는 데 성공했습니다.

다음 사항들을 배웠습니다.

  • 전용 variables.tf 파일에 변수 선언을 구성하는 방법.
  • variable 블록을 사용하여 변수의 typedescription을 지정하여 선언하는 방법.
  • var.<변수_이름> 구문을 사용하여 리소스 블록 내에서 변수를 참조하는 방법.
  • 필요한 프로바이더를 다운로드하기 위해 terraform init으로 Terraform 프로젝트를 초기화하는 방법.
  • terraform apply 명령어와 함께 -var 플래그를 사용하여 런타임에 변수 값을 제공하는 방법.

이 지식은 Terraform 을 사용하여 더 복잡하고 모듈화된 코드형 인프라 (Infrastructure as Code) 를 구축하는 데 중요한 구성 요소입니다.