클라우드/테라폼(Terraform)

테라폼 Terraform 로컬 값

두뚜 2021. 8. 5. 16:11

# 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