IaC

코드를 통한 인프라 관리 #3

PON_Z 2023. 5. 31. 23:25

- 이제 코드를 작성해보자. "${}" 부분은 string interplation으로 테라폼에서 변수를 가져오거나, 함수를 가져올 수 있다(js와 비슷하다). 먼저 Resources 부분부터 작성해보자.

terraform {
  required_providers {
    local = {
      source = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

provider "local" {
  # Configuration options
}

resource "local_file" "foo" {
  filename = "${path.module}/foo.bar"
  content  = "Hello World Test!"
}

 

- 작성한 코드를 init 하자. 

terraform init

 

- 아래와 같이 프로바이더에 맞는 플러그인이 설치되었다.

 

- ls -al로 디렉토리를 살펴보면 ".terraform" 디렉토리와 ".lock.hcl" 파일이 생성된 것을 볼 수 있다. ".terraform" 디렉토리는 tf파일에 명시된 프로바이더나 모듈들의 캐시 또는 데이터를 다운로드 받아 저장한다. ".lock.hcl" 파일은 협업이나 CI/CD를 진행할 때 버전을 lock하여 협업 개발자들이 동일한 버전을 사용할 수 있도록한다.

 

 

 

- 아래 명령어를 통해 작성한 tf 파일이 어떠한 변경사항을 가지는지 확인할 수 있다. local_file.foo가 생성된 것을 볼 수 있다.

terraform plan

 

- 이제 아래 명령어를 입력하고 yes를 입력하면 apply가 완료된다.

terraform apply

 

- 디렉토리를 살펴보면 foo.bar와 terraform.tfstate가 생성되었다. 

 

- foo.bar에는 아까 content에 입력한 내용이 들어가있고

 

- terraform.tfstate파일은 현재 리소스의 상태를 기록한다. 이 파일을 통해 나중에 main.tf 파일을 변경할 때, 변경 사항을 좀 더 명확하게 알 수 있다.

 

- 이제 Data Sources 부분을 작성후 apply를 해보자. Data sources 부분은 그냥 데이터를 읽는 것이기 때문에 인프라상은 변화가 없어서 No changes라고 뜬다.

terraform {
  required_providers {
    local = {
      source = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

provider "local" {
  # Configuration options
}

resource "local_file" "foo" {
  filename = "${path.module}/foo.bar"
  content  = "Hello World Test!"
}

data "local_file" "foo" {
  filename = "${path.module}/foo.bar"
}

 

- 만약 읽은 파일을 확인하고 싶다면 아래와 같이 output을 추가한다. 아래 코드는 data.local_file에서 bar라는 파일을 output으로 내보낸다는 뜻이다.

output "file_bar" {
    value = data.local_file.foo
}

 

- 이후 apply를 하면 인프라 변경사항은 없지만 Outputs 섹션이 생성되었으로, yes를 입력해주어야 한다.

728x90

'IaC' 카테고리의 다른 글

코드를 통한 인프라 관리 #4  (0) 2023.06.01
코드를 통한 인프라 관리 #2  (0) 2023.05.27
코드를 통한 인프라 관리 #1  (0) 2023.05.25