Terraform 리소스 파괴

LinuxBeginner
지금 연습하기

소개

Terraform 리소스 파괴 (destruction) 에 관한 실습에 오신 것을 환영합니다. 인프라 수명 주기의 핵심적인 부분은 리소스를 생성하고 업데이트하는 것뿐만 아니라, 더 이상 필요하지 않을 때 깔끔하게 제거하는 것입니다. 이 과정을 파괴라고 합니다.

Terraform 은 인프라를 파괴하기 위한 간단하고 안전한 워크플로우를 제공합니다. 이를 위한 주요 명령어는 terraform destroy입니다. 실수로 인한 삭제를 방지하기 위해, Terraform 은 실제로 작업을 실행하기 전에 무엇이 파괴될지 미리 확인할 수 있는 방법도 제공합니다.

본 실습에서는 다음 사항을 학습하게 됩니다.

  • terraform plan -destroy를 사용하여 파괴 계획을 미리 확인하는 방법.
  • 파괴 계획 출력을 해석하는 방법.
  • terraform destroy 명령어를 실행하여 리소스를 제거하는 방법.
  • 리소스가 시스템과 Terraform 상태 파일 모두에서 성공적으로 제거되었는지 확인하는 방법.

우리는 간단한 local_file 리소스를 사용하여 클라우드 제공자 (cloud provider) 자격 증명 없이 Terraform 워크플로우에 집중할 수 있도록 할 것입니다.

현재 프로젝트 상태 확인

파괴 프로세스를 시작하기 전에, 먼저 Terraform 프로젝트의 현재 상태를 확인해 보겠습니다. 이는 Terraform 에 의해 현재 관리되고 있는 리소스가 무엇인지 이해하는 데 도움이 될 것입니다.

현재 프로젝트 상태를 확인하려면 다음 명령어를 실행하십시오.

먼저, 프로젝트 디렉터리 내의 파일을 나열해 보겠습니다.

ls -la

다음과 유사한 출력이 표시되어야 합니다.

total 20
drwxr-xr-x 1 labex labex  110 Oct 15 13:10 .
drwxr-x--- 1 labex labex 4096 Oct 15 13:10 ..
drwxr-xr-x 3 labex labex   23 Oct 15 13:07 .terraform
-rw-r--r-- 1 labex labex 1181 Oct 15 13:07 .terraform.lock.hcl
-rwxrwxr-x 1 labex labex   45 Oct 15 13:10 example.txt
-rw-rw-r-- 1 labex labex  258 Oct 15 13:10 main.tf
-rw-rw-r-- 1 labex labex 1088 Oct 15 13:10 terraform.tfstate

이는 설정 스크립트에 의해 생성된 main.tf 파일과 terraform.tfstate 파일, 그리고 Terraform 구성을 적용했을 때 생성된 example.txt 파일을 보여줍니다.

다음으로, 현재 Terraform 상태를 확인해 보겠습니다.

terraform show

다음과 유사한 출력이 표시되어야 합니다.

## local_file.example:
resource "local_file" "example" {
    content              = "This is an example file managed by Terraform."
    directory_permission = "0777"
    file_permission      = "0777"
    filename             = "./example.txt"
    id                   = "ec3adcab998872def2df6200fb03992ac6f237a4"
}

이는 현재 Terraform 에 의해 관리되고 있는 local_file.example 리소스에 대한 정보를 표시합니다.

미리 보기를 위해 terraform plan -destroy 실행

이 단계에서는 추측성 파괴 계획 (speculative destruction plan) 을 생성하는 방법을 학습합니다. 리소스를 파괴하기 전에, Terraform 이 정확히 무엇을 할 것인지 미리 확인하는 것이 모범 사례입니다. 이는 중요한 인프라가 실수로 삭제되는 것을 방지합니다. terraform plan -destroy 명령어는 실제 파괴를 수행하지 않고 어떤 리소스가 파괴될지 보여주는 실행 계획을 생성합니다.

모든 작업은 ~/project 디렉터리에서 수행됩니다. 설정 스크립트는 이미 main.tf 파일을 생성하고 이를 적용하여 example.txt라는 파일을 생성했습니다.

이제 터미널에서 다음 명령어를 실행하여 파괴 계획을 확인하십시오.

terraform plan -destroy

다음과 유사한 출력이 표시될 것입니다. 이 출력은 우리의 구성으로 관리되는 단일 리소스를 파괴하기 위한 계획을 자세히 설명합니다.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

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.

파괴 계획 출력 확인

이 단계에서는 이전 명령어의 출력을 분석할 것입니다. 계획을 이해하는 것은 Terraform 을 안전하게 사용하는 데 매우 중요합니다.

terraform plan -destroy의 출력을 살펴보십시오. 다음 주요 요소들에 주목하십시오.

  1. 리소스 작업 (Resource Action): ## local_file.example will be destroyed라는 줄은 의도된 작업을 명확하게 나타냅니다. resource "local_file" "example" 앞에 있는 - 기호는 Terraform 에서 파괴를 나타내는 표기법입니다. -로 접두사가 붙은 모든 줄은 제거될 것임을 나타냅니다.

  2. 속성 변경 (Attribute Changes): 출력은 리소스의 모든 속성을 보여주며, 이들이 null로 변경될 것임을 나타내는데, 이는 삭제를 의미합니다. 예를 들어: - filename = "./example.txt" -> null입니다.

  3. 계획 요약 (Plan Summary): 마지막 줄인 Plan: 0 to add, 0 to change, 1 to destroy.는 전체 계획에 대한 개요를 제공합니다. 이는 계획된 작업을 신속하게 확인하기 위해 확인해야 할 가장 중요한 줄입니다.

이 계획을 검토함으로써 local_file.example 리소스만 영향을 받을 것이라고 확신할 수 있습니다. 이 확인 단계는 잘못된 구성이 중요한 리소스의 의도치 않은 파괴로 이어질 수 있는 실제 시나리오에서 필수적입니다. 이 단계에서는 실행할 명령어가 없으며, 프로세스를 이해하는 데 중점을 둡니다.

리소스 제거를 위해 terraform destroy 실행

이 단계에서는 파괴 계획을 실행할 것입니다. 계획을 검토했고 변경 사항에 대해 확신이 섰으므로, 실제 파괴를 진행할 수 있습니다.

terraform destroy 명령어는 먼저 최종 검토를 위해 동일한 파괴 계획을 표시한 다음, 진행하기 전에 확인을 요청할 것입니다.

터미널에서 다음 명령어를 실행하십시오.

terraform destroy

Terraform 은 계획을 다시 표시하고 승인을 요청할 것입니다.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

파괴를 확인하려면 yes를 입력하고 Enter를 누르십시오.

yes

확인 후, Terraform 은 리소스 파괴를 진행하고 진행 상황을 출력할 것입니다.

local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

이는 local_file 리소스가 성공적으로 파괴되었음을 확인합니다.

파일 시스템에서 파일 제거 확인

이 단계에서는 리소스 파괴가 시스템에 의도한 영향을 미쳤는지 확인할 것입니다. 우리의 리소스가 example.txt라는 로컬 파일이었으므로, 리소스를 파괴하면 이 파일이 파일 시스템에서 삭제되었어야 합니다.

ls 명령어를 사용하여 파일을 나열해 봄으로써 이를 확인할 수 있습니다.

터미널에서 다음 명령어를 실행하십시오.

ls example.txt

파일이 삭제되었기 때문에, 명령어는 실패하고 운영 체제로부터 오류 메시지를 보게 될 것입니다. 이 오류는 예상된 결과이며 리소스가 성공적으로 파괴되었음을 확인시켜 줍니다.

ls: cannot access 'example.txt': No such file or directory

이 확인 단계는 상태 파일 (state file) 에서의 Terraform 의 조치가 실제 세계에 반영되었음을 확인하기 때문에 중요합니다.

비어 있는 terraform.tfstate 파일 확인

이 단계에서는 Terraform 상태 파일 (terraform.tfstate) 을 검사하여 리소스 파괴가 어떻게 반영되었는지 확인할 것입니다. 상태 파일은 Terraform 이 관리하는 리소스와 그 현재 상태를 추적하는 JSON 파일입니다.

구성 내의 모든 리소스가 파괴된 후에도 상태 파일은 삭제되지 않습니다. 대신, 더 이상 리소스를 관리하지 않음을 반영하도록 업데이트됩니다. 상태 파일 내의 resources 배열은 비어 있게 됩니다.

상태 파일의 내용을 살펴보겠습니다. cat 명령어를 사용하여 내용을 표시하십시오.

cat terraform.tfstate

출력은 JSON 객체일 것입니다. resources 키가 이제 빈 배열 []을 가리키고 있음을 확인하십시오.

{
  "version": 4,
  "terraform_version": "1.13.3",
  "serial": 3,
  "lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
  "outputs": {},
  "resources": [],
  "check_results": null
}

이는 Terraform 의 관점에서 이 구성에 대해 더 이상 관리하는 리소스가 없음을 확인시켜 줍니다. 이제 상태가 깨끗해졌습니다.

요약

실습을 완료하신 것을 축하드립니다! Terraform 이 관리하는 인프라를 파괴하는 과정을 성공적으로 살펴보았습니다.

본 실습에서 다음 사항들을 배웠습니다.

  • 실수로 인한 삭제를 방지하기 위해 terraform plan -destroy로 변경 사항을 미리 확인하는 것의 중요성.
  • 파괴 계획 (destruction plan) 을 읽고 이해하는 방법, 특히 요약 (summary) 과 리소스 수준의 변경 사항에 주의를 기울이는 방법.
  • terraform destroy 명령어를 사용하여 리소스 파괴를 실행하는 방법과 필요한 확인 (confirmation) 단계.
  • 실제 시스템과 Terraform 상태 파일 (terraform.tfstate) 을 모두 확인하여 리소스가 성공적으로 파괴되었는지 검증하는 방법.

파괴 워크플로우를 숙달하는 것은 리소스 생성을 숙달하는 것만큼이나 중요합니다. 이는 인프라의 전체 수명 주기를 깔끔하고 안전하게 관리할 수 있도록 보장합니다.