Terraform에는 명명된 값을 요청하거나 게시하기 위한 몇 가지 종류의 블록이 포함되어 있습니다.
- Input Variables 는 Terraform 모듈의 매개변수 역할을 하므로 사용자는 소스를 편집하지 않고도 동작을 커스터마이징할 수 있습니다.
- Output Values 은 Terraform 모듈의 반환(return) 값과 같습니다.
- Local Values 은 표현식에 간단한 이름을 지정할 수 있는 편리한 기능입니다.
테라폼의 Local Values(지역 변수)란?
테라폼에서는 값(value)을 다루기 위한 다양한 방법이 있습니다. 여기서는 그 중 'Local Values'라는 것에 대해 알아보겠습니다.
Local Values란, 테라폼 코드 내에서 반복하여 사용되는 값을 간편하게 표현하기 위해 만든 변수입니다. 이를 통해 코드의 반복을 줄이고, 가독성을 높일 수 있습니다.
Local Values 사용 예시
1. 기본 설정 및 AWS 설정
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "ap-northeast-2"
}
2. 사용자 입력 변수
ec2_name 변수를 사용하여 EC2의 이름을 설정합니다.
variable "ec2_name" {
description = "생성되는 ec2의 이름 설정"
type = string
default = "ec2-name-from-input-variable"
}
3. Local Values 정의
공통으로 사용되는 태그들을 Local Values로 저장합니다.
locals {
common_tags = {
Env = "dev"
Project = "IaC"
}
}
4. 리소스 생성
EC2 인스턴스를 생성하는 코드입니다. 여기서는 tags 속성에 Local Values를 사용하여 공통 태그들을 포함시킵니다.
resource "aws_instance" "jeff_tf_ubuntu" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
subnet_id = "subnet-004f0791a0c0c4e57"
security_groups = [ "sg-07a2fa9eb741e42d6" ]
tags = merge(
{
Name = var.ec2_name
},
local.common_tags # Local Values 사용
)
}
locals { # Local Values 작성 }
tags = local.common_tags # Local Values를 사용
tags와 같은 맵(Map) 형태의 속성에 대해 두 개의 맵을 병합할 때는 merge 함수를 사용한다.
5. 데이터 정보 가져오기
AWS에서 사용할 AMI 이미지 정보를 가져옵니다.
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
6. 실행
실행 후, 태그 정보에 Local Values로 설정한 공통 태그들이 포함되어 있는 것을 확인할 수 있습니다.
tf apply
tf apply
➜ tf apply
# 중략
+ tags = {
+ "Env" = "dev"
+ "Name" = "ec2-name-from-custom.auto.tfvars"
+ "Project" = "IaC"
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
결과
전체코드
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "ap-northeast-2"
}
# Input values 작성
variable "ec2_name" {
# 공백으로 두고 apply할때 vpc_name을 입력 받는다.
description = "생성되는 ec2의 이름 설정"
type = string
default = "ec2-name-from-input-variable"
}
# Local values 작성
locals {
common_tags = {
Env = "dev"
Project = "IaC"
}
}
# resource - instanace
resource "aws_instance" "jeff_tf_ubuntu" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
subnet_id = "subnet-004f0791a0c0c4e57" # public-management-1a
security_groups = [ "sg-07a2fa9eb741e42d6" ] # management
tags = merge(
{
Name = var.ec2_name
},
local.common_tags # Local Values를 사용
)
}
# data - aws_ami
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
2023.02.07 - [IaC/Terraform] - [Terraform]테라폼 Input Variables 사용법
2023.08.14 - [IaC/Terraform] - [Terraform]테라폼 Output Values 사용법
2023.02.09 - [IaC/Terraform] - [Terraform]테라폼 Local Values 사용법
Local Values doc link
사용한 terraform code
2023.02.05 - [IaC/Terraform] - [Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기
'IaC > Terraform' 카테고리의 다른 글
[Terraform]count와 for_each를 사용하여 반복되는 resource 작성하는 방법 (0) | 2023.08.20 |
---|---|
[Terraform]테라폼 Output Values 사용법 (0) | 2023.08.14 |
[Terraform]테라폼 Input Variables 사용법 (0) | 2023.02.07 |
[Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기 (0) | 2023.02.05 |
[Terraform]테라폼 workspace 이해하기 (0) | 2023.02.04 |