안녕하세요!
김회장과 최총무 입니다~!
벌써 새해가 밝았네요!

오늘은 핫한 Infrastructure as Code 도구인 Terraform의 Output 과 local의 사용 방법에 대해서 알아볼게요!
먼저 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 를 사용하는 방법은 크게 두가지가 있습니다.
- Root module 에서는 terraform apply 를 통해 infrastructure 가 구성된 후 정의된 outputs 들이 command line 창에 나타나게 됩니다.
- 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' 카테고리의 다른 글
MaaS (Metal as a Service) (1) | 2024.09.09 |
---|---|
[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 |
댓글