Terraform 출력 관리

LinuxBeginner
지금 연습하기

소개

Terraform 에서 출력 값 (output values) 은 리소스가 배포된 후 해당 리소스에 대한 의미 있는 데이터를 노출하는 방법입니다. 이는 Terraform 모듈의 반환 값과 유사하며, 서버의 IP 주소, 데이터베이스 연결 문자열 또는 파일 경로와 같은 정보를 쉽게 쿼리하는 데 사용될 수 있습니다. 이를 통해 해당 정보에 명령줄 (command line) 에서 쉽게 접근할 수 있으며 다른 Terraform 구성에서도 사용할 수 있게 됩니다.

본 랩에서는 출력 값을 정의하고, 적용하며, 확인하는 방법을 학습합니다. 로컬 파일을 생성하는 기본적인 Terraform 구성으로 시작한 다음, 출력 블록 (output block) 을 추가하여 파일 경로를 노출해 보겠습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 85%의 긍정적인 리뷰율을 받았습니다.

출력 정의를 위한 outputs.tf 파일 생성

이 단계에서는 출력 정의를 위한 전용 파일을 생성할 것입니다. 출력 블록 (output blocks) 은 모든 .tf 파일에 배치할 수 있지만, outputs.tf라는 별도의 파일에 배치하는 것이 일반적인 관례이자 모범 사례입니다. 이렇게 하면 구성을 체계적으로 유지하고 프로젝트의 모든 출력을 쉽게 찾을 수 있습니다.

모든 작업은 터미널의 기본 디렉터리인 ~/project 디렉터리에서 수행됩니다.

먼저, 미리 생성된 main.tf 파일을 확인해 보겠습니다.

ls -l

main.tf 파일과 .terraform 디렉터리가 보일 것입니다.

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf

이제 touch 명령어를 사용하여 outputs.tf 파일을 생성합니다.

touch outputs.tf

이 명령어는 현재 디렉터리에 outputs.tf라는 빈 파일을 생성합니다. 파일을 다시 나열하여 생성 여부를 확인할 수 있습니다.

ls -l

이제 파일 목록에 outputs.tf가 표시될 것입니다.

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf
-rw-rw-r-- 1 labex labex   0 Oct 15 12:39 outputs.tf

local_file 파일 이름에 대한 출력 정의

이 단계에서는 outputs.tf 파일에 출력 블록 (output block) 을 정의할 것입니다. 출력 블록은 Terraform 구성에 대한 단일 출력 값을 선언합니다.

출력 블록의 기본 구문은 다음과 같습니다.

output "NAME" {
  ## Arguments go here
}

여기서 NAME은 출력에 이름을 제공하는 문자열이며, 나중에 이 값을 쿼리하는 데 사용됩니다.

nano 편집기로 outputs.tf 파일을 열고 첫 번째 출력 블록을 추가해 보겠습니다.

nano outputs.tf

이제 파일에 다음 코드를 추가합니다. 출력 이름은 file_path로 지정하겠습니다.

output "file_path" {

}

코드를 추가한 후, Ctrl+X를 누르고, Y를 누른 다음, 마지막으로 Enter를 눌러 파일을 저장하고 nano를 종료합니다.

이 블록은 아직 value 인수가 누락되어 있어 많은 작업을 수행하지 않습니다. 다음 단계에서 이를 추가할 것입니다.

출력 블록에서 리소스 속성 참조

이 단계에서는 출력 (output) 이 표시할 값을 지정하여 유용하게 만들 것입니다. 이는 출력 블록 내에서 value 인수를 사용하여 수행됩니다. 이 값은 일반적으로 구성에 정의된 리소스의 속성에 대한 참조입니다.

리소스 속성을 참조하는 구문은 <RESOURCE_TYPE>.<RESOURCE_NAME>.<ATTRIBUTE>입니다.

main.tf 파일에는 다음과 같이 정의된 리소스가 있습니다.

resource "local_file" "example" {
  ## ...
}

local_file 리소스에는 관리하는 파일의 경로를 담고 있는 filename이라는 속성이 있습니다. 이 속성을 참조하려면 local_file.example.filename을 사용합니다.

이 참조를 출력 블록에 추가해 보겠습니다. nanooutputs.tf를 다시 엽니다.

nano outputs.tf

아래와 같이 value 인수를 포함하도록 파일을 수정합니다.

output "file_path" {
  value = local_file.example.filename
}

이는 Terraform 에게 file_path 출력이 example이라는 이름의 local_file 리소스의 filename 속성 값을 가져야 함을 알려줍니다.

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

terraform apply 실행하여 구성 업데이트

이 단계에서는 구성 변경 사항을 적용할 것입니다. 출력을 추가, 제거 또는 수정할 때마다 Terraform 이 변경 사항을 인식하고 상태 파일 (state file) 을 업데이트하도록 terraform apply를 실행해야 합니다. 상태 파일은 Terraform 이 출력 값을 저장하는 곳입니다.

터미널에서 terraform apply 명령을 실행합니다.

terraform apply

Terraform 은 먼저 실행 계획 (execution plan) 을 보여줄 것입니다. 출력 (output) 이 추가되었음을 감지하고 이를 추가할 계획을 세울 것입니다. local_file 리소스는 아직 존재하지 않으므로, 리소스를 생성할 계획도 세울 것입니다.

작업을 확인하라는 메시지가 표시됩니다. yes를 입력하고 Enter를 누릅니다.

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.example will be created
  + resource "local_file" "example" {
      + content              = "This is an example file managed by Terraform."
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./example.txt"
      + id                   = (known after apply)
    }

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

Changes to Outputs:
  + file_path = "./example.txt"

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

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

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

Outputs:

file_path = "./example.txt"

출력에서 볼 수 있듯이, apply 가 성공했으며 Terraform 이 이제 file_path 출력을 해당 값과 함께 표시합니다.

terraform output 실행하여 파일 이름 확인

이 단계에서는 terraform output 명령을 사용하여 상태 파일 (state file) 에 저장된 출력 값을 볼 것입니다. 이는 상태 파일을 수동으로 파싱하거나 terraform apply를 다시 실행하지 않고도 인프라에 대한 정보를 검색하는 데 유용합니다.

구성에 정의된 모든 출력을 보려면 인자 없이 명령을 실행하기만 하면 됩니다.

terraform output

그러면 모든 출력이 사람이 읽을 수 있는 형식으로 표시됩니다.

file_path = "./example.txt"

또한 인수로 이름 (name) 을 제공하여 특정 출력 값을 쿼리할 수도 있습니다. 이는 스크립트에서 사용하거나 단일 정보만 필요할 때 유용합니다.

terraform output file_path

이 명령은 지정된 출력의 원시 값 (raw value) 만 출력합니다.

"./example.txt"

이를 통해 셸 스크립트에서 출력을 쉽게 사용할 수 있습니다. 예를 들어, 변수에 할당할 수 있습니다: FILE=$(terraform output -raw file_path). -raw 플래그는 따옴표를 제거합니다.

요약

실습을 완료하신 것을 축하드립니다!

본 실습에서는 Terraform 에서 출력을 관리하는 기본 사항을 배웠습니다. 다음 작업을 성공적으로 수행했습니다.

  • 전용 outputs.tf 파일을 생성하여 구성을 체계화했습니다.
  • 출력 값 (output value) 을 선언하기 위해 output 블록을 정의했습니다.
  • 출력 블록 내에서 리소스 속성 (resource attribute) 을 참조하여 해당 값을 노출했습니다.
  • terraform apply를 사용하여 구성을 적용하여 출력을 사용할 수 있도록 했습니다.
  • terraform output을 사용하여 명령줄에서 출력 값을 쿼리했습니다.

Terraform 출력은 인프라에서 중요한 정보를 추출하고 Terraform 워크플로우를 다른 도구 및 스크립트와 통합하기 위한 강력한 기능입니다.