코드 내에서 사용자가 지정한 값 또는 속성 값을 가공해 참조 가능한 local (지역 값)은 외부에서 입력되지 않고, 코드 내에서만 가공되어 동작.
local에 선언한 로컬 변수 이름은 전체 루트 모듈 내에서 유일해야 한다.
선언하고 참조한다!!
1
cd
mkdir 37
cd 37
2
vi 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" # 중복 선언되었으므로 오류가 발생한다.
}
// 선언은 locals 로 한다.
// 로컬 변수는 유일해야 한다.
// content 가 중복 선언이다.
3
#
terraform init
│ Error: Duplicate local value definition
│
│ on main.tf line 31, in locals:
│ 31: content = "content2" # 중복 선언되었으므로 오류가 발생한다.
│
│ A local value named "content" was already defined at main.tf:13,3-42. Local value names must be unique within a module.
╵
4
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 하나로 변경하였다.
// ${var.prefix} = hello
// ${local.name = terraform
// hello terraform
5
terraform init
terraform apply -auto-approve
terraform state list
// state list는 나오는 내용은 없다. 선언만 한것이다. 참조하는건 현재 없다.
6
선언 하고 참조하는 방식이다.
local. 이름으로 참조 해서 참조 한다.
vi main.tf
variable "prefix" {
default = "hello"
}
locals {
name = "terraform"
}
resource "local_file" "abc" {
content = local.content
filename = "${path.module}/abc.txt"
}
7
sub.tf 파일을 하나 만든다.
sub.tf 파일을 참조한다. 같은 디렉토리를 참조 한다.
vi sub.tf
locals {
content = "${var.prefix} ${local.name}"
}
// 같은 디렉토리 안에 내용을 참조한다.
#
ls *.tf
terraform init -upgrade
terraform apply -auto-approve
terraform state list
local_file.abc
terraform state show local_file.abc
# graph 확인 > graph.dot 파일 선택 후 오른쪽 상단 DOT 클릭
terraform graph > graph.dot
#
cat abc.txt ; echo
hello terraform
// 서로 다른 테라폼 구성 파일에서도 로컬 값을 참조할 수 있다
8
우선 순위 확인 예제 ?
#
echo 'prefix="t101-study"' > terraform.tfvars
cat terraform.tfvars
prefix="t101-study"
#
terraform apply -auto-approve
cat abc.txt ; echo
t101-study terraform
1
cd
mkdir local
cd local
vi 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
}
설명?
// 선언과 참조 !!!
// 아래 처럼 로컬로 선언했다.
locals {
name = "mytest"
team = {
group = "dev"
}
}
// 위에서 선언했으니 이제 참조 하자.
resource "aws_iam_user" "myiamuser1" {
name = "${local.name}1"
local.name 은 mytest 가 들어간다.
mytest1 이 된다.
mytest2 가 된다.
2
terraform init && terraform apply -auto-approve
// 콘솔가서 계정 생성확인한다. mytest1 , mytest1
테그도 확인한다.
3
terraform state list
aws_iam_user.myiamuser1
aws_iam_user.myiamuser2
terraform state show aws_iam_user.myiamuser1
# graph 확인 > graph.dot 파일 선택 후 오른쪽 상단 DOT 클릭
terraform graph > graph.dot
# iam 사용자 리스트 확인 , aws cli로 확인 가능하다.
aws iam list-users | jq
"UserName": "mytest1",
"UserName": "mytest2",
4
공통된 값을 사용하면 사용하자.
mytest 가 공통!
5
# 삭제
terraform destroy -auto-approve
1
선언과 참조!!
선언 ?
output
output "instance_ip_addr" {
value = "http://${aws_instance.server.private_ip}"
}
// 웹서버 ip가 나오면 , 클릭하면 사이트 접속 된다.
2
cd
mkdir 38
cd 38
3
vi main.tf
resource "local_file" "abc" {
content = "abc123"
filename = "${path.module}/abc.txt"
}
output "file_id" {
value = local_file.abc.id
}
output "file_abspath" {
value = abspath(local_file.abc.filename)
}
// 리소스 abc 라는 파일을 사용한다.
// 출력은 파일의 id를 출력하라.
// 출력은 파일이름의 절대 경로를 출력하라. abspath(local_file.abc.filename)
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
함수는 찾아서 하면 된다.
https://developer.hashicorp.com/terraform/language/functions/abspath
4
# plan 실행 시, 이미 정해진 속성은 출력을 예측하지만
terraform init && terraform plan
...
Changes to Outputs:
+ file_abspath = "/Users/gasida/Downloads/workspaces/3.8/abc.txt"
+ file_id = (known after apply)
// plan은 생성되어야 나오는 값은 안나온다.
// apply 해야 나온다.
#
terraform apply -auto-approve
...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
file_abspath = "/root/38/abc.txt"
file_id = "6367c48dd125b19455e529f5ee"
# graph 확인 > graph.dot 파일 선택 후 오른쪽 상단 DOT 클릭
terraform graph > graph.dot
#
terraform state list
local_file.abc
terraform output
file_abspath = "/root/38/abc.txt"
file_id = "6367c48dd193aad25b19455e529f5ee"
10분 휴식
https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1
https://brunch.co.kr/@topasvga/3362
몰아보기
https://brunch.co.kr/@topasvga/3347
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
감사합니다.