일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 연결리스트
- execute
- SQL프로그래밍
- 스프링 폼
- 힙
- 낙관적락
- BOJ
- JPQL
- dfs
- exclusive lock
- 유니크제약조건
- 연관관계
- 다대다
- 다대일
- querydsl
- eager
- CHECK OPTION
- 일대다
- FetchType
- 즉시로딩
- 지연로딩
- 데코레이터
- 동적sql
- 백트래킹
- 비관적락
- 이진탐색
- 스토어드 프로시저
- shared lock
- PS
- fetch
- Today
- Total
흰 스타렉스에서 내가 내리지
Terraform output - 리소스의 속성이나 값을 외부로 노출 본문
# 개요
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"
'DevOps' 카테고리의 다른 글
Terraform 에서 모듈 간 데이터를 전달 예시 (0) | 2024.09.20 |
---|---|
Terraform Functions - 테라폼에서 사용하는 함수 (1) | 2024.09.20 |
Terraform variables - 코드를 효율적으로 쓰기 (0) | 2024.09.20 |
클라우드 엔지니어와 DevOps 엔지니어의 차이점은? (1) | 2024.09.16 |
tfstate 파일이 실제 인프라와 일치하지 않을 때 - import (1) | 2024.09.06 |