테라폼 Terraform 로컬 값
# Terraform 로컬 값
로컬 값은 자주 사용하는 문자열 및 표현식에 이름을 할당하여 구성파일에서 사용 할 수 있다. Terraform 코드 내에서 임시로 사용하는 변수
# 로컬 값 정의
로컬 값은 locals 블록에서 정의 된다. 변수명 ="값" 형태
로컬값은 단순 문자열 뿐만 아니라 입력 변수, 리소스의 속성, 다른 로컬값을 포함 할 수 있다
instance_ids 라는 local값 선언
comcat 문자열을 합치는 것 (테라폼에서 사용하는 함수)
* 인스턴스가 목록(여러개)일 경우
common_tags , service와 owner라는 키 지정 local이 다른 local을 참조한다. 값을 조합하고 가공
# 로컬 값 사용
# 로컬 값을 사용한 구성 파일
# 로컬 값 선언
변수를 참조 할 local값 선언
common_tags 선언 - 로컬 변수 명
{ 값이 해시의 형태로 들어가 있음 } - 변수 참조 하고있음 가공하기위해 myproject-env 하나의 문자열로 만들 위해 변수를 중간에 참조한다.
common_tags value는 딕셔너리가 3개
# 변수 추가
기존 변수 파일에 인스턴스의 태그에 사용할 변수 추가
project_name 은 my_project , environment는env 변수 두가지 선언
# 태그 참조
변수를 참조해 태그에 사용할 로컬값 선언
# 리소스 변경/ 적용
# 인스턴스 태그 확인
# 웹 콘솔에서 확인
# 리소스 삭제
devops@control:~/aws-example$ vi local.tf
devops@control:~/aws-example$ vi varible.tf
devops@control:~/aws-example$ vi main.tf
devops@control:~/aws-example$ terraform fmt
devops@control:~/aws-example$ terraform validate
Success! The configuration is valid.
devops@control:~/aws-example$ cat local.tf
locals {
common_tags = {
Name = "${var.project_name}-${var.environment}"
Project = var.project_name
Environment = var.environment
}
}
devops@control:~/aws-example$ cat varible.tf
variable "aws_region" {
description = "AWS region"
type = string
default = "ap-northeast-1"
}
variable "ami_image" {
description = "Ubuntu 20.04 LTS Image"
type = map(string)
default = {
ap-northeast-1 = "ami-09ff2b6ef00accc2e"
ap-northeast-2 = "ami-0b329fb1f17558744"
}
}
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t3.micro"
}
variable "project_name" {
description = "Name of the project"
type = string
default = "my_project"
}
variable "environment" {
description = "Name of the environment"
type = string
default = "dev"
}
devops@control:~/aws-example$ cat main.tf
resource "aws_instance" "my_instance" {
ami = var.ami_image[var.aws_region]
instance_type = var.instance_type
tags = local.common_tags
}
resource "aws_eip" "my_eip" {
vpc = true
instance = aws_instance.my_instance.id
}
devops@control:~/aws-example$ terraform apply -auto-approve
devops@control:~/aws-example$ terraform show | grep -A3 tags
tags = {}
tags_all = {}
vpc = true
}
--
tags = {
"Environment" = "dev"
"Name" = "my_project-dev"
"Project" = "my_project"
--
tags_all = {
"Environment" = "dev"
"Name" = "my_project-dev"
"Project" = "my_project"
--
tags = {}
throughput = 0
volume_id = "vol-017a4a0893a467c2b"
volume_size = 8
devops@control:~/aws-example$
devops@control:~/aws-example$ terraform destroy