해당 내용은 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
# 다시 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
'공부하면서 > Terraform' 카테고리의 다른 글
[T1012] 2주차 - 테라폼 기본 사용 2/3 (반복문 + 실습) (0) | 2023.07.15 |
---|---|
[T1012] 2주차 - 테라폼 기본 사용 2/3 (출력 output) (0) | 2023.07.15 |
[T1012] 2주차 - 테라폼 기본 사용 2/3 (데이터 소스 + 실습) (0) | 2023.07.15 |
[T1012] 2주차 - 테라폼 기본 사용 2/3 (입력변수) (0) | 2023.07.15 |
[T1012] 1주차 - 테라폼 기본 사용 1/3 (기본 사용법) (0) | 2023.07.07 |