공부하면서/Terraform

[T1012] 2주차 - 테라폼 기본 사용 2/3 (local 지역 값 + 실습)

omelette master 2023. 7. 15. 19:57
해당 내용은 T1012 스터디에 나온 내용과 '테라폼으로 시작하는 IaC' 책을 기준으로 정리 했습니다

3.7 local 지역 값

코드 내에서 사용자가 지정한 값 또는 속성 값을 가공해 참조 가능한 local (지역 값)은 외부에서 입력되지 않고,
코드 내에서만 가공되어 동작 하는 값을 선언한다.
  • local은 입력 변수와 달리 선언된 모듈 내에서만 접근 가능
  • 변수처럼 실행시 입력받을수 없음!
  • local은 사용자가 테라폼 코드를 구현할때 값이나 표현식을 반복적으로 사용할수 있는 편의를 제공
  • 단점으로는 무차별하게 사용할경우 값에 대한 추적이 어려워짐 (유지관리 측면에서 부담)

local 선언

로컬이 선언되는 블록은 locals로 시작한다. 선언되는 인수에 표현되는 값은 상수만이 아닌 리소스의 속성, 변수의 값들도 조합해 정의할 수 있다.
  • 동일한 tf 파일 내에서 여러 번 선언하는 것도 가능하고 여러 파일에 걸쳐 만드는 것도 가능하지만
    locals에 선언한 로컬 변수 이름은 전체 루트 모듈 내에서 유일 해야함
cd ..
mkdir 3.7 && cd 3.7

# main.tf 파일 생성

variable "prefix" {
  default = "hello"
}

locals {
  name    = "terraform"
  content = "${var.prefix} ${local.name}"
  my_info = {
    age    = 20
    region = "KR"
  }
  my_nums = [1, 2, 3, 4, 5]
}

locals {
  content = "content2" # 중복 선언되었으므로 오류가 발생한다.
}

# 초기화
terraform init

Local value names must be unique within a module

# 다시 main.tf 수정

variable "prefix" {
  default = "hello"
}

locals {
  name    = "terraform"
  content = "${var.prefix} ${local.name}"
  my_info = {
    age    = 20
    region = "KR"
  }
  my_nums = [1, 2, 3, 4, 5]
}

# 이후 실행
terraform init
terraform apply -auto-approve

선언만 했기때문에 별도로 만들어 지는건 없다

local 참조

테라폼 구성 파일을 여러 개 생성해 작업하는 경우 서로 다른 파일에 선언되어 있더라도 다른 파일에서 참조할 수 있다.
# main.tf 수정

variable "prefix" {
  default = "hello"
}

locals {
  name    = "terraform"
}

resource "local_file" "abc" {
  content  = local.content            # 여기에 local.content가 없지만...
  filename = "${path.module}/abc.txt"
}
# 추가로 sub.tf 파일을 생성

locals {
  content = "${var.prefix} ${local.name}"
}

# 실행
terraform init -upgrade
terraform apply -auto-approve
terraform state list

cat abc.txt ; echo

# graph 확인
terraform graph > graph.dot

주의할점

서로 다른 테라폼 구성 파일에서도 로컬 값을 참조할 수 있다는 가능성을 확인할 수 있지만,
관리 측면에서는 서로 참조하는 로컬값이 파편화되어 유지 보수가 어려워질 수 있으므로 주의가 필요하다.

 

[추가] terraform.tfvars에 정의된 변수 선언

echo 'prefix="t101-study"' > terraform.tfvars
cat terraform.tfvars

terraform apply -auto-approve
cat abc.txt ; echo

정의된 변수값에 맞게 잘 생성되었다

[실습2] IAM User 생성

# 실습 환경 생성

mkdir local-test && cd local-test

# iamuser.tf 파일 생성
provider "aws" {
  region = "ap-northeast-2"
}

locals {
  name = "mytest"
  team = {
    group = "dev"
  }
}

resource "aws_iam_user" "myiamuser1" {
  name = "${local.name}1"
  tags = local.team
}

resource "aws_iam_user" "myiamuser2" {
  name = "${local.name}2"
  tags = local.team
}
# 확인
terraform init && terraform apply -auto-approve

# graph 확인
terraform graph > graph.dot

# iam 사용자 리스트 확인
aws iam list-users | jq