본문 바로가기
INFRA/Automation

Terraform Output과 Local

by BTC_김회장 2024. 2. 2.

안녕하세요!

 

김회장과 최총무 입니다~!

벌써 새해가 밝았네요!

 오늘은 핫한 Infrastructure as Code 도구인 Terraform Outputlocal의 사용 방법에 대해서 알아볼게요!

 

먼저 Output values 입니다!

 

Output values 란 모듈에서 제공하는 값이며, 다른 모듈에서 그 값을 다양하게 사용하여 Infrastructure 구성에 도움을 줍니다. 쉽게 말해 모듈의 return value 라고 생각하면 쉬울 것 같아요!

 

예제와 함께 선언 방법에 대해 알아보겠습니다!

 

# main.tf
resource "aws_iam_user" "example" {
  name  = "test"
}
# outputs.tf
output "user_name" {
  value       = aws_iam_user.example.name
  description = "IAM user name"
}

output "user_arn" {
  value       = aws_iam_user.example.arn
  description = "IAM user arn"
}

output "custom_name" {
  value       = "custom-${aws_iam_user.example.name}"
  description = "IAM user custom name"
}

output "hello" {
  value       = "hello"
  description = "hello string"
}

 

Output values 는 보통 outputs.tf 파일을 생성하여 선언하고, output block 을 통해 생성할 수 있습니다.
또 주의할점으로! output 의 이름은 다른 것들과 마찬가지로 다른 output 의 이름과 중복 되어서는 안됩니.

 

그럼 이어서 사용할 수 있는 Arguments 에 대해서 살펴보겠습니다.
value를 제외한 모든 Arguments 는 optional 이므로 사용하지 않아도 문제는 없습니다.

  • value - output 으로 사용할 값을 명시. string, number, list 등등 다양한 type 을 가질 수 있습니다.
  • description - output 에 대한 설명
    만약 모듈을 만들어 배포한다면 description 에 적은 내용이 문서에 나타나 모듈 사용자들이 참고하게 되므로 사용자를 위한 내용을 적는 게 좋습니다. 개발자를 위해서는 주석을 다는게 편하겠죠?
  • depends_on - 일반적으로 Terraform 이 알아서 처리해주기 때문에 필요가 없지만 특별한 경우 dependencies 가 필요할때 depends_on 을 사용하여 처리 순서를 보장할 수 있습니다.

사용 방법

Outputs 를 사용하는 방법은 크게 두가지가 있습니다.

  1. Root module 에서는 terraform apply 를 통해 infrastructure 가 구성된 후 정의된 outputs 들이 command line 창에 나타나게 됩니다.
  2. Child module 에서는 outputs 들이 attribute 로 root module 에 전달됩니다.

이어서 로컬 값 (local)에 대해 알아보겠습니다.

 

Local 값은 Terraform 내부에서만 사용하기 위한 변수 입니다.

관련된 로컬 값들은 단일 Locals 블록에서 선언할수 있습니다!

 

 

#local.tf
locals {
  common_tags = {
    Name                = "My Terraform"
    project_name        = var.project_name
    project_environment = var.project_environment
  }
}
#main.tf
resource "aws_instance" "app_server" {
  ami               = var.aws_amazon_linux_ami[var.aws_region]
  instance_type     = "t2.micro"
  availability_zone = var.aws_availability_zone[var.aws_region]
  tags = local.common_tags  #공통 태그
}

resource "aws_eip" "app_server_eip" {
  vpc      = true
  instance = aws_instance.app_server.id
  tags     = local.common_tags  #공통 태그
}

resource "aws_s3_bucket" "app_bucket" {
  bucket = "encore-20220421"
  tags   = local.common_tags  #공통 태그
}

 

이렇게 태그 값으로 해당  locals에서 정의한 값을 가지고 올 수 있습니다.

 

다음에는 더욱더 유용한 Terraform 소식을 가지고 돌아오겠습니다!~

 

'INFRA > Automation' 카테고리의 다른 글

[Terraform] Meta-Argument 2 . for_each문  (0) 2023.06.30
[Terraform] 모듈과 모듈화  (0) 2023.06.22
[Terraform] Meta-Argument 1 . Count문  (0) 2023.06.13
Terraform Remote State (S3편)  (0) 2023.05.26
[Terraform] Terraform module  (0) 2023.05.21

댓글