- 이제 코드를 작성해보자. "${}" 부분은 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를 입력해주어야 한다.
'IaC' 카테고리의 다른 글
코드를 통한 인프라 관리 #4 (0) | 2023.06.01 |
---|---|
코드를 통한 인프라 관리 #2 (0) | 2023.05.27 |
코드를 통한 인프라 관리 #1 (0) | 2023.05.25 |