흰 스타렉스에서 내가 내리지

Terraform output - 리소스의 속성이나 값을 외부로 노출 본문

DevOps

Terraform output - 리소스의 속성이나 값을 외부로 노출

주씨. 2024. 9. 20. 15:08
728x90

# 개요

Terraform 을 통해 리소스를 배포한 후, 그 리소스들에 대한 중요한 정보를 효과적으로 관리하고 노출하는 것은 중요하다. 

이 때 유용하게 활용되는 것이 바로 output 이다. 

 

 

# output 이란 무엇인가?

`output`은 배포된 리소스의 속성이나 값을 외부로 노출하는 기능을 한다. 

이를 통해 Terraform 구성 파일을 실행한 후, 생성된 리소스의 중요한 값들을 쉽게 확인할 수 있다. 

예를 들어, 새로 생성된 인스턴스의 public IP 주소S3 버킷의 이름 같은 값들을 즉시 확인해야 할 때 `output` 을 설정하면 Terraform 이 적용된 후 자동으로 해당 값이 출력된다. 

 

output "instance_ip" {
  value = aws_instance.my_instance.public_ip
}

위 코드는 `aws_instance.my_instance` 라는 리소스에서 public IP 주소를 `output` 으로 설저앟여 Terraform 실행 후 이 값을 바로 터미널에 출력할 수 있다.

 

 

# output 이 중요한 이유

1. 실행후 리소스 정보의 즉각적 확인

Terraform 은 다양한 리소스를 동시에 배포하고 관리할 수 있지만, 배포 후 각 리소스의 상태나 특정 값을 바로 확인하기는 어렵다

IP 주소나 데이터베이스의 엔드포인트 등과 같은 값은 이후 다른 서비스 설정에 필수적인 경우가 많은데, 이 때 output 을 통해 필요한 정보를 쉽게 추출하고, 다른 작업에서 바로 활용할 수 있다. 

 

예시: EC2 인스턴스를 배포한 후, 해당 인스턴스의 public IP 주소를 확인하는 경우 output 을 사용하여 터미널에 출력한다.

output "instance_ip" {
  value = aws_instance.my_instance.public_ip
}

 

 

2. 모듈 간 데이터 전달

Terraform 은 모듈을 통해 리소스를 캡슐화하고 재사용할 수 있다.

한 모듈에서 생성된 리소스의 중요한 값은 다른 모듈에서도 필요할 수 있다. 

이 때 output 을 사용하여 한 모듈에서 값을 노출시키고, 다른 모듈에서 이를 참조함으로써 모듈 간의 의존성을 효율적으로 관리할 수 있다. 

 

예시 : VPC 를 생성하는 모듈에서 VPC ID 를 output 으로 노출시키고, 이후 subnet 을 생성하는 모듈에서 이를 참조할 수 있다. 

# VPC 모듈에서의 output
output "vpc_id" {
  value = aws_vpc.main.id
}

# 다른 모듈에서 VPC ID 사용
module "subnet" {
  source  = "./subnet"
  vpc_id  = module.vpc.vpc_id
}

 

모듈 간 데이터를 전달하는 예시는 다음 링크에서 → https://thisisjoos.tistory.com/792

 

 

3. 리소스 상태 관리와 디버깅

Terraform 은 상태 파일 (terraform.tfstate) 을 통해 배포된 인프라의 상태를 관리한다. 

하지만 상태 파일은 사람이 쉽게 읽을 수 있는 형식이 아니기 때문에, 특정 리소스의 상태나 속성을 확인하는 데 어려움이 있을 수 있다. 

output 을 사용하면 상태 파일에 저장된 리소스 값을 보다 쉽게 확인하고 디버깅에 활용할 수 있다. 

 

tfstate 정보 확인 예시는 본 포스팅 하단으로 ⬇️⬇️⬇️⬇️⬇️⬇️

 

# 결론

`output` 은 단순히 리소스의 값을 출력하는 역할을 넘어, 인프라 상태를 관리하고 모듈 간 의존성을 조정하며, 다른 자동화 도구와의 연동을 돕는 중요한 역할을 한다. 

이러한 기능 덕분에 복잡한 인프라를 효율적으로 관리하고 협업 환경에서의 가독성을 높이는데 필수적인 요소이다. 

 

 

 


# output 을 통한 tfstate 정보 확인

`tfstate` 는 Terraform 이 관리하는 인프라의 상태를 추적하지만, 사람이 직접 읽기에는 다소 불편하고 복잡할 수 있다. 

`output` 은 이 문제를 해결하기 위해 특정 리소스의 중요한 값을 간단하게 터미널에 출력하도록 해준다. 

 

# tfstate 파일 직접 확인의 불편함

예를 들어, `aws_instance` 리소스를 생성했다고 가정해보자. 

해당 인스턴스의 public IP 주소를 확인하려면 기본적으로 `terraform.tfstate` 파일을 열고 리소스의 세부 속성을 일일이 찾아봐야 한다.

 

`terraform.tfstate` 파일에서 public IP 주소는 다음과 같이 포함될 수 있다.

{
  "resources": [
    {
      "type": "aws_instance",
      "instances": [
        {
          "attributes": {
            "public_ip": "54.210.234.123"
          }
        }
      ]
    }
  ]
}

 

하지만 output 을 사용하면 이 값을 쉽게 추출할 수 있다. 

 

 

# output 을 통한 tfstate 정보 확인 예시

Terraform 을 사용하여 EC2 인스턴스를 생성하고, 그 인스턴스의 publuc IP 주소를 `output` 으로 노출하는 상황을 가정해보자.

 

리소스 생성 및 output 설정 (main.tf)

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

output "instance_public_ip" {
  value = aws_instance.example.public_ip
}

 

위 코드에서, `aws_instance_example` 이라는 EC2 인스턴스를 생성하고, 그 인스턴스의 public IP 를 `output` 블록을 통해 노출시킨다.

 

Terraform apply 실행 후 결과 확인

$ terraform apply

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

Outputs:

instance_public_ip = "54.210.234.123"