Terraform 변수 사용법

LinuxBeginner
지금 연습하기

소개

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

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

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

  • .tf 파일에서 변수를 선언하는 방법.
  • 리소스 블록 내에서 변수를 참조하는 방법.
  • terraform apply를 실행할 때 변수에 값을 제공하는 방법.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 98%입니다.학습자들로부터 97%의 긍정적인 리뷰율을 받았습니다.

변수 정의를 위한 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) 를 구축하는 데 중요한 구성 요소입니다.