LabHub

Terraform/OpenTofu 기초 · 선언형과 상태 · 실습

첫 선언과 상태 파일 읽기

LabHub 에서 이어서 보기

목표

선언 하나가 실제 파일과 상태 파일이라는 두 결과를 동시에 만든다는 것을 손으로 확인하고, 상태를 열어 리소스 주소·serial·의존성을 읽을 수 있게 됩니다.

왜 중요한가

선언형 도구를 처음 만나면 "명령어를 외우는 일"처럼 보이지만, 실제로 배워야 하는 것은 도구가 무엇을 근거로 판단하는가입니다. Terraform 은 코드(원하는 상태), 상태 파일(마지막으로 아는 상태), 실제 인프라(지금 있는 것) 세 가지를 비교해 계획을 만듭니다. 그래서 상태 파일을 잃으면 도구는 이미 존재하는 리소스를 "처음 보는 것"으로 여겨 다시 만들려 들고, 상태에 남은 유령 리소스는 "지우겠다"고 말합니다. 이 실습에서 상태를 jq 로 직접 열어 보는 이유가 여기 있습니다. 또 하나, 값을 하드코딩할 것인가 참조할 것인가는 취향이 아니라 그래프의 문제입니다. 참조해야만 도구가 순서를 알고, 나중에 앞 리소스가 바뀔 때 뒤 리소스도 함께 갱신됩니다.

단계

1. /opt/lab/fixtures/terraform/starter/main.tf/root/tf/first/main.tf 로 복사하고 그 디렉터리에서 초기화하세요. required_providers 블록이 그대로 남아 있어야 하며, 초기화 뒤 /root/tf/first/.terraform.lock.hcl/root/tf/first/.terraform/providers 가 생기고 잠금 파일에 local 프로바이더가 적혀 있어야 합니다.
2. main.tf 에 타입이 local_file, 이름이 hello 인 리소스를 선언하세요. filename/root/tf/first/out/hello.txt 이고, 내용을 담는 인자 이름은 content 입니다.
3. 적용해서 /root/tf/first/out/hello.txt 를 만드세요. 내용은 hello opentofu 로 둡니다. 적용 뒤 /root/tf/first/terraform.tfstatelocal_file.hello 가 등록되고, 상태에 기록된 content 와 실제 파일 내용이 정확히 같아야 하며, 상태의 version4 여야 합니다.
4. 타입이 random_pet, 이름이 suffix 인 리소스를 추가해 적용하세요. length2 로 두고 prefix 는 주지 마세요. 상태에 random_pet.suffix 가 생기고 만들어진 이름은 단어-단어 형태여야 합니다.
5. hello 의 내용을 hello labhub 로 바꿔 다시 적용하세요. 파일 내용과 상태에 기록된 content모두 정확히 hello labhub 여야 하고, 상태의 serial2 이상이어야 합니다.
6. 타입이 local_file, 이름이 temp 인 리소스를 /root/tf/first/out/temp.txt 로 한 번 만들었다가 다시 제거하세요. 제거할 때의 출력을 /root/tf/first/out/destroy.txt 에 저장합니다. 끝난 뒤 temp.txt 파일과 상태의 local_file.temp 는 사라지고 local_file.hello 는 남아 있어야 합니다.
7. 상태에 등록된 리소스 주소 목록을 /root/tf/first/out/state-list.txt 에 저장하세요. local_file.hellorandom_pet.suffix 가 각각 한 줄씩 있어야 하고 local_file.temp 는 없어야 합니다 (6번을 끝낸 뒤에 뽑으세요).
8. 타입이 local_file, 이름이 summary 인 리소스를 /root/tf/first/out/summary.txt 로 만드세요. 내용에는 random_pet.suffix 가 만든 이름과 hello labhub 가 모두 들어가야 하며, 두 값 모두 다른 리소스의 속성을 참조해서 넣어야 합니다. 적용 뒤 상태의 local_file.summarydependenciesrandom_pet.suffix 가 보여야 합니다.

참고

단계 8개

  1. 작업 디렉터리 초기화하고 프로바이더 받기
  2. local_file 리소스 선언하기
  3. 적용해서 파일과 상태를 함께 만들기
  4. random_pet 으로 무작위 이름 만들기
  5. 선언을 바꾸고 다시 적용하기
  6. 임시 리소스만 골라 지우기
  7. 상태에 등록된 주소 뽑기
  8. 참조로 요약 파일 만들기