hgk0404.tistory
Code After Work
hgk0404.tistory

공지사항

  • 블로그
전체 방문자
오늘
어제
  • 전체 카테고리
    • [컴퓨터비전]
    • [MLOps]
      • [FastAPI]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404.tistory

Code After Work

[Cloud]/[Terraform]

[Terraform] 리소스 참조(암묵적 참조, 명시적 참조)

2024. 8. 5. 22:04
728x90

 

*유데미에서 진행하는 Terraform for the Absolute Beginners with Labs강의를 바탕으로 제작되었습니다.

 

 

테라폼에서 다른 리소스의 값을 참조할 때 기본적으로 다음과 같은 형식을 사용합니다.

 

 

<리소스 유형>.<리소스 이름>.<속성 이름>

 

 

참조하는 방법 2가지 방법을 알아보겠습니다

 

 

1. 다른 리소스의 값을 참조하는 법(암묵적 참조)

 

 

*참조 특성을 이용해 리소스끼리 연결하는 법

 

첫 번째 테라폼 리소스를 보겠습니다.

 

 

variable "filename" {
  default = "/root/pet-name.txt"
}

variable "prefix" {
  default = "Mrs"
}

variable "separator" {
  default = "."
}

variable "length" {
  default = 1
}

resource "random_pet" "my-pet" {
  prefix = var.prefix
  separator = var.separator
  length = var.length
}

 

 

random_pet 리소스는 terraform에서 기본으로 제공하는 리소스이며 random 프로바이더에 의해 제공됩니다(이외에도 random_id, random_integer, random_string 등이 있습니다.)

 

주로 테스트, 데모, 또는 유니크한 이름이 필요한 리소스에 친근한 이름을 붙이는데 사용됩니다.

 

리소스 안에 있는 매개변수 중 prefix는 접두사로 위에 variable을 보면 "Mrs"로 지정되어 있고, separator는 "."으로 구분되어 있습니다. 그러면 random_pet 리소스는 separator를 기준으로 랜덤한 이름을 생성하는데, prefix는 접두사이므로 제일 앞에 오고 그 다음 length가 1이므로 1개의 랜덤한 이름을 생성합니다. 그러면 접두사와 랜덤하게 생성된 이름 사이에 separator가 오게 되며 "Mrs.<랜덤한이름>" 이 생성됩니다. 

 

 

두 번째 테라폼 리소스입니다.

 

 

resource "local_file" "pet" {
  filename = var.filename
  content = "My favorite pet is ${random_pet.my-pet.id}"
}

 

 

local_file 리소스는 pet이라는 이름을 가지는데 매개변수인 filename은 파일이 생성될 경로와 이름을 나타냅니다. variable에서 "/root/pet-name.txt"로 지정했으니 이 경로에 파일이 생성됩니다. 그리고 content는 파일에 들어가는 내용인데 "My favorite pet is ${random_pet.my-pet.id}"가 작성됩니다. ${random_pet.my-pet.id}는 random_pet 리소스 유형에서 my-pet 이름을 가진 리소스의 id 속성을 참조한다는 뜻이 됩니다. 

 

 

* random_pet: 리소스 유형

* my-pet: 리소스 이름

* id: 리소스의 속성

 

 

여기서 id 속성이란 random_pet유형이 반환한 값을 의미하는데, "Mrs.<랜덤한이름>"가 됩니다. 

(random_pet은 반환값을 id 속성에 저장합니다)

 

 

그래서 "My favorite pet is ${random_pet.my-pet.id}"는 "My favorite pet is Mrs.<랜덤한이름>"가 됩니다.

 

 

그러면 /root/pet-name.txt 위치에 pet-name.txt 파일이 생성되는데 이 파일의 내용은 "My favorite pet is Mrs.<랜덤한이름>"가 됩니다. 

 

 

2. 명시적 참조(explicit-reference)

 

 

1번과 같은 경우엔 두 리소스간 종속성이 존재하지만 암묵적으로 존재하는 종속성으로 테라폼이 자동으로 알아서 찾는 경우입니다. 

 

 

이런 경우를 암묵적 참조라고 부르는데, 다음과 같은 예시가 있습니다.

 

 

# 암묵적 참조
resource "local_file" "pet" {
    filename = var.filename
    content = "My favorite pet is Mr.Cat"
}

resource "random_pet" "my-pet" {
  prefix = var.prefix
  separator = var.separator
  length = var.length
}

 

 

이 경우, local_file.pet 리소스가 random_pet.my-pet 리소스보다 먼저 생성될 수 있으며, 이로 인해 올바르게 동작하지 않을 수 있습니다.

 

 

# 명시적 참조
resource "local_file" "pet" {
    filename = var.filename
    content = "My favorite pet is Mr.Cat"
    depends_on = [ random_pet.my-pet ]
}

resource "random_pet" "my-pet" {
  prefix = var.prefix
  separator = var.separator
  length = var.length
}

또는 

resource "local_file" "whale" {
  filename = "/root/whale"
  content = "whale"
  depends_on = [ local_file.krill  ]
}

resource "local_file" "krill" {
  filename = "/root/krill"
  content = "krill"
}

 

 

이 경우, random_pet.my-pet 리소스가 먼저 생성된 후 local_file.pet 리소스가 생성되므로, local_file.pet 리소스가 의존하는 random_pet.my-pet 리소스가 이미 준비된 상태임을 보장합니다.

 

 

728x90
저작자표시 동일조건 (새창열림)

'[Cloud] > [Terraform]' 카테고리의 다른 글

[Terraform] 프로비저너와 사용자 데이터  (0) 2024.08.09
[Terraform] S3에서 상태 파일 업로드, 상태 파일 관리 명령어  (0) 2024.08.09
[Terraform] 테라폼으로 AWS DynamoDB 생성, 업로드(GSI)  (0) 2024.08.08
[Terraform] 테라폼 라이프 사이클(create_before_destroy, prevent_destroy)  (1) 2024.08.06
[Terraform] 테라폼 변수 타입 종류  (0) 2024.08.05
'[Cloud]/[Terraform]' 카테고리의 다른 글
  • [Terraform] S3에서 상태 파일 업로드, 상태 파일 관리 명령어
  • [Terraform] 테라폼으로 AWS DynamoDB 생성, 업로드(GSI)
  • [Terraform] 테라폼 라이프 사이클(create_before_destroy, prevent_destroy)
  • [Terraform] 테라폼 변수 타입 종류
hgk0404.tistory
hgk0404.tistory
공부기록

티스토리툴바