Skip to Content

Terraform 출력이란?

파란 배경의 디지털 환경에서 여러 추상적인 서버 스택의 그림.

Terraform은 인프라스트럭처를 코드 로 정의하고 프로비저닝하는 데 널리 사용되는 도구입니다. 이 툴의 필수 기능 중 하나는 사용자가 Terraform 구성에서 유용한 정보를 추출하고 표시할 수 있는 Terraform 출력입니다.

이 글은 Terraform 출력의 중요성, 구문 및 사용량, 그리고 코드형 인프라 프로젝트를 강화하기 위한 모범 사례에 대해 자세히 설명합니다.

Terraform 출력 이해하기

복잡한 인프라를 관리하고 있으며 다양한 리소스 또는 외부 시스템 간에 중요한 데이터를 공유해야 한다고 가정해 보십시오. Terraform 출력은 바로 그렇게 할 수 있는 기능입니다. 이 기능은 Terraform 구성에서 중요한 정보를 쉽게 추출 및 표시하고, 다른 모듈, 작업 공간 및 외부 시스템 간에 공유할 수 있도록 합니다.

Terraform의 결과물은 Terraform이 관리하는 리소스에 대한 귀중한 정보를 제공합니다. 그런 다음, 테라폼 출력 명령줄 도구를 사용하면 인프라 또는 외부 시스템의 다른 구성 요소가 소비할 수 있는 이러한 출력 값을 검색하고 표시할 수 있습니다.

Terraform 출력의 기능은 주로 다음과 같은 몇 가지 이점을 제공합니다.

  • 데이터 공유: Terraform 출력은 Terraform 구성과 다른 시스템 간에 동적으로 생성된 리소스의 속성을 공유하는 데 탁월합니다. Terraform으로 EC2 인스턴스를 생성한다고 가정해 봅시다. 출력 블록은 공용 IP 주소를 캡처할 수 있으며, 다른 Terraform 구성에서 보안 그룹 규칙을 설정하거나 외부 구성 관리 툴로 전달할 수 있습니다.
  • 자동화: 출력은 종속 리소스에 동적 값을 제공하여 자동화된 구성 관리를 지원합니다. 예를 들어, Terraform으로 데이터베이스 서버를 프로비저닝하고 데이터베이스 포트가 동적으로 할당되면 출력 블록이 이 포트를 캡처할 수 있습니다. 그런 다음, 이 캡처된 포트는 다른 구성 내에서 사용되어 웹 애플리케이션으로부터 데이터베이스에 대한 연결을 설정할 수 있습니다.
  • 디버깅 및 검증: 결과물은 단순히 리소스 상태를 확인하는 것 이상의 의미를 가집니다. 문제 해결 중에 출력 값을 검사하여 종속 프로세스에 문제를 일으킬 수 있는 불일치 또는 예상치 못한 리소스 구성을 정확히 파악할 수 있습니다.
  • 일관성: 결과물은 환경 전반에서 일관성을 향상시킵니다. 하드코딩된 값 대신 출력을 참조하면 개발, 테스트 및 프로덕션 환경에서 동일한 구성 로직을 유지할 수 있습니다.
  • 문서 : 결과물은 문서화의 한 형태로 기능하여 Terraform이 프로비저닝한 인프라에 대한 명확하고 간결한 정보를 제공합니다. 이는 시스템을 이해해야 하는 다른 엔지니어나 팀에게 특히 유용합니다.

Terraform 출력의 구문 및 사용

Terraform 출력은 출력 블록을 사용하여 구성 파일 내에서 정의됩니다. 구문 분석:

output "<name>" {
  value = <expression>
}
  • <name>: 출력 변수의 사용자 정의 이름입니다. 보유한 데이터를 반영하는 설명적인 이름을 선택합니다.
  • <expression>: 노출하려는 값을 평가하는 Terraform 표현식입니다. 리소스의 속성을 참조하거나, 함수를 사용하거나, 계산을 수행할 수 있습니다.

출력의 예

다음 AWS 인스턴스 예제는 Terraform 출력을 다양한 데이터 유형으로 표시하는 방법을 보여줍니다.

  • 문자열 출력:

output "instance_id" {
  value = aws_instance.example.id
}
  • 숫자 출력:

output "instance_count" {
  value = length(aws_instance.example)
}
  • 목록 출력:

output "instance_ips" {
  value = aws_instance.example[*].public_ip
}
  • 맵 출력:

output "instance_tags" {
  value = {
    for instance in aws_instance.example :
    instance.id => instance.tags
  }
}

강령의 결과물 참조

일단 정의되면, Terraform 코드 내의 출력을 이름을 사용해 참조할 수 있습니다. 예시는 다음과 같습니다.

module "example_module" {
  source  = "./modules/example"
  # Reference the output from another module
  instance_id = var.other_module_name.instance_id
}

이 예제에서는 example_module이 other_module_name이라는 다른 모듈의 instance_id 출력을 참조합니다. 이는 출력이 모듈 간의 통신 및 데이터 교환을 용이하게 하는 방법을 보여줍니다.

출력 변수 vs. 데이터 소스

Terraform 출력 및 데이터 소스는 한 눈에 비슷해 보일 수 있지만, IaC(인프라 코드) 워크플로우에서 뚜렷한 목적을 제공합니다. 차이점을 명확히 하기 위한 세부 정보는 다음과 같습니다.

지형 출력 변수

Terraform 출력은 Terraform이 관리하는 리소스에 대한 정보를 제공합니다. 출력 값은 Terraform 구성 내의 기존 리소스 속성에서 파생됩니다. 출력은 일반적으로 다음과 같은 경우에 사용됩니다.

  • Terraform 모듈 또는 구성 간 데이터 공유
  • 구성 관리 또는 모니터링을 위해 외부 시스템에 정보 전달
  • 하드코딩된 데이터 대신 동적 값을 참조하여 구성 로직 간소화

이러한 시나리오의 예로는 EC2 인스턴스의 공용 IP 주소를 추출하고 이를 사용하여 다른 Terraform 모듈에서 보안 그룹 규칙을 구성하는 것이 있습니다.

Terraform 데이터 소스

데이터 소스는 외부 소스에서 데이터를 검색합니다. API 또는 플러그인과 상호 작용하여 클라우드 제공업체, 구성 관리 도구 또는 기타 외부 시스템에서 정보를 가져옵니다. 데이터 소스는 다음과 같은 경우에 사용됩니다.

  • Terraform 자체가 관리하지 않는 기존 리소스에 대한 정보에 액세스
  • 외부 데이터를 사용하여 Terraform 리소스 동적 구성
  • IaC를 다른 툴 및 플랫폼과 통합

예를 들어, 데이터 소스를 사용하여 클라우드 공급업체에서 사용 가능한 리전 목록을 검색한 후 해당 리전에서 리소스를 생성하는 경우가 있습니다.

간단히 말해서, 출력 변수 또는 데이터 소스의 사용 여부는 필요한 데이터의 출처에 따라 달라집니다.

  • 데이터가 Terraform 구성 내에서 관리되는 리소스에서 비롯된 경우, 출력 변수를 사용하십시오.
  • 데이터가 외부 시스템에 상주하거나 동적으로 가져와야 하는 경우, 데이터 소스를 사용하십시오.

Terraform 출력 사용 모범 사례

Terraform 출력을 사용할 때는 다음과 같은 모범 사례를 고려해야 합니다.

  • 설명적인 이름 사용: 출력 변수에 의해 노출되는 데이터를 반영하는 명확하고 간결한 이름을 선택합니다. ‘output1’ 또는 ‘data.’와 같은 일반 이름은 피하세요. 대신, ‘rds_instance_public_ip’ 또는 ‘webserver_security_group_id.’와 같은 이름을 사용하십시오. 이를 통해 구성의 가독성과 유지보수가 향상됩니다.
  • 일관된 명명 규칙 사용: Terraform 코드베이스 전반에 걸쳐 일관된 명명 규칙을 유지하세요. 이는 분리를 위해 밑줄 또는 하이픈을 사용하고 모든 모듈과 구성에 걸쳐 명명 체계를 정렬하는 것을 포함할 수 있습니다.
  • 그룹 관련 출력: 관련 출력을 논리적으로 그룹화합니다. 예를 들어, 데이터베이스 인스턴스(IP 주소, 포트, 사용자 이름)와 관련된 출력이 여러 개 있는 경우, 구성 파일 내에서 단일 제목으로 그룹화합니다. 이를 통해 조직을 개선하고 특정 정보를 쉽게 찾을 수 있습니다.
  • 코멘트 사용: 각 출력 변수의 목적과 용도를 설명하는 명확한 의견을 포함시키십시오. 이는 다른 모듈이나 팀이 사용할 때나 즉각적으로 설명하지 못할 수 있는 결과물에 특히 유용합니다.
  • 불필요한 결과물 방지: 진정한 요구 사항이 아닌 데이터의 출력을 정의하지 마십시오. 과도한 출력은 출력을 복잡하게 만들고 가장 관련성이 높은 정보를 식별하기 어렵게 만듭니다. Terraform 구성 내에서 데이터를 직접 사용할 수 있는지, 아니면 대체 접근 방식이 더 효율적인지 평가하세요.
  • 비밀을 위한 결과물을 피합니다. 가능하면 민감한 데이터를 Terraform 구성에 모두 저장하지 마십시오. HashiCorp Vault 또는 환경 변수를 활용하는 등 비밀을 관리하는 다른 방법을 살펴보세요.
  • Terraform 민감 속성 사용: 비밀을 위해 출력을 사용하는 것이 불가피한 경우, 출력 블록 내의 민감한 속성을 사용하여 이를 민감한 것으로 표시합니다. 이렇게 하면 출력을 표시할 때 값을 억제하라는 terraform 출력 명령이 표시됩니다.

민감한 속성이 추가된 예는 다음과 같습니다.

output "db_password" {
  value     = aws_db_instance.example.password
  sensitive = true
}

결론

Terraform 출력을 통해 정적 구성과 동적 인프라 간의 격차를 줄일 수 있습니다. 결과물을 활용하여 데이터 공유를 간소화하고 작업을 자동화하며 검증을 간소화할 수 있습니다.

인프라의 잠재력을 최대한 활용하려면Portworx®와 같은 퓨어스토리지 솔루션을 사용해 Terraform Kubernetes 구축을 위한 지속적인 스토리지를 지원하고Pure Cloud Block Store™를 통해 클라우드 기반 애플리케이션에 이상적인 스토리지 솔루션을 제공하는 것을 고려해 보세요.

다음을 추천드립니다.

10/2025
Virtual Machine Provisioning at Enterprise Scale
Sizing and scaling Red Hat OpenShift Virtualization with Portworx.
백서
22 pages

주요 유용한 자료 및 이벤트를 확인하세요

THOUGHT LEADERSHIP
혁신을 향한 레이스

스토리지 혁신의 최전선에 있는 업계 리더들의 최신 인사이트 및 관점을 확인하세요.

더 알아보기
동영상
동영상 시청: 엔터프라이즈 데이터 클라우드의 가치

찰스 쟌칼로(Charles Giancarlo) CEO가 전하는 스토리지가 아닌 데이터 관리가 미래인 이유 통합 접근 방식이 기업 IT 운영을 어떻게 혁신하는지 알아보세요

지금 시청하기
유용한 자료
레거시 스토리지는 미래를 지원할 수 없습니다.

현대적 워크로드에는 AI 지원 속도, 보안, 확장성이 필수입니다. 귀사의 IT 스택, 준비됐나요?

지금 확인하기
퓨어360(PURE260) 데모
퓨어스토리지를 직접 탐색하고, 배우고, 경험해보세요.

퓨어스토리지의 역량을 확인할 수 있는 온디맨드 비디오와 데모를 시청하세요.

데모영상 시청하기
지원하지 않는 브라우저입니다.

오래된 브라우저는 보안상 위험을 초래할 수 있습니다. 최상의 경험을 위해서는 다음과 같은 최신 브라우저로 업데이트하세요.