소개
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) 을 위한 문자열 변수 정의
이 단계에서는 파일에 작성될 내용을 담을 두 번째 변수를 정의합니다. 이는 이전 단계와 동일한 패턴을 따릅니다.
다시 nano로 variables.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 플래그도 사용할 것입니다.
filename과 content에 대한 값을 사용하여 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블록을 사용하여 변수의type과description을 지정하여 선언하는 방법.var.<변수_이름>구문을 사용하여 리소스 블록 내에서 변수를 참조하는 방법.- 필요한 프로바이더를 다운로드하기 위해
terraform init으로 Terraform 프로젝트를 초기화하는 방법. terraform apply명령어와 함께-var플래그를 사용하여 런타임에 변수 값을 제공하는 방법.
이 지식은 Terraform 을 사용하여 더 복잡하고 모듈화된 코드형 인프라 (Infrastructure as Code) 를 구축하는 데 중요한 구성 요소입니다.



