terraform state rm 커맨드
terraform state rm 커맨드
terraform state rm 커맨드는 기존 원격 객체를 먼저 파괴하지 않고 그 바인딩을 제거해요. 원격 객체는 계속 존재하지만 더 이상 Terraform이 관리하지 않게 돼요. removed 블록을 사용해서 리소스를 제거할 수도 있는데, 이렇게 하면 한 번에 여러 리소스를 제거할 수 있고 일반적인 plan·apply 워크플로의 일부로 제거를 검토할 수 있어요.
출처: 문서
본문
terraform state rm 커맨드는 기존 원격 객체의 바인딩을 먼저 파괴하지 않고 제거해요. 원격 객체는 계속 존재하지만 더 이상 Terraform이 관리하지 않게 돼요.
terraform state rm 커맨드 대신 removed 블록을 사용해서 리소스를 제거할 수도 있어요. 한 번에 여러 리소스를 제거할 수 있고, 일반적인 plan·apply 워크플로에서 제거를 검토할 수 있어요. 리소스와 함께 removed 블록 사용하기와 모듈과 함께 removed 블록 사용하기에서 자세히 알아보세요.
사용법 (Usage)
사용법: terraform state rm [options] ADDRESS...
Terraform은 상태에서 주어진 리소스 주소와 일치하는 인스턴스를 검색하고, 각 인스턴스의 기록을 제거해서 Terraform이 더 이상 해당 원격 객체를 추적하지 않게 해요.
이는 객체가 원격 시스템에 계속 존재하지만, 이후의 terraform plan이 "잊혀진" 인스턴스 각각에 대해 새 객체를 생성하는 작업을 포함하게 된다는 뜻이에요. 원격 시스템이 부과하는 제약에 따라, 이름이나 다른 식별자가 여전히 남아 있는 기존 객체와 충돌하면 객체 생성이 실패할 수 있어요.
이 커맨드는 다음 옵션도 받아요:
-
-dry-run- 주어진 주소와 일치하는 모든 리소스 인스턴스를 보고하되, 실제로 "잊지는" 않아요. -
-lock=false- 작업 중 상태 잠금을 유지하지 않아요. 다른 사람이 같은 워크스페이스에 대해 동시에 커맨드를 실행할 수 있다면 위험해요. -
-lock-timeout=DURATION--lock=false로 잠금을 비활성화하지 않았다면, 오류를 반환하기 전에 일정 시간 동안 잠금 획득을 재시도하도록 Terraform에 지시해요. 기간 문법은 숫자 뒤에 시간 단위 문자를 붙인 형태예요. 예: 3초는 "3s". -
-var 'NAME=VALUE'- 설정의 루트 모듈에 선언된 단일 입력 변수에 값을 설정해요. 여러 변수를 설정하려면 이 옵션을 여러 번 사용하세요. 자세한 내용은 명령줄의 입력 변수를 참고하세요. -
-var-file=FILENAME- 설정의 루트 모듈에 선언된 많은 입력 변수에.tfvars파일의 정의를 사용해 값을 설정해요. 여러 파일의 값을 포함하려면 이 옵션을 여러 번 사용하세요. 루트 모듈의 입력 변수에 값을 설정하는 방법은-var와-var-file옵션 외에도 여러 가지가 있어요. 자세한 내용은 입력 변수에 값 할당을 참고하세요.
HCP Terraform CLI 통합 또는 remote 백엔드를 사용하는 설정에서만 terraform state rm은 -ignore-remote-version 옵션도 받아요. 로컬 상태를 사용하는 설정에서만 terraform state rm은 레거시 옵션 -state, -state-out, -backup도 받아요.
예제: 리소스의 모든 인스턴스 제거 (Example: Remove all Instances of a Resource)
다음 예제는 "worker"라는 packet_device 리소스의 모든 인스턴스를 Terraform이 "잊도록" 합니다.
$ terraform state rm 'packet_device.worker'
count나 for_each를 사용하지 않는 리소스는 인스턴스가 하나뿐이므로, 이 문법이 단일 인스턴스를 선택하는 데도 적합해요.
예제: 모듈 안 리소스의 모든 인스턴스 제거 (Example: Remove all Instances of a Resource in a Module)
하위 모듈에서 정의한 리소스를 선택하려면 리소스 주소의 일부로 해당 모듈의 경로를 지정해야 해요:
$ terraform state rm 'module.foo.packet_device.worker'
예제: 모듈 안 모든 리소스의 모든 인스턴스 제거 (Example: Remove all Instances of all Resources in a Module)
다음 예제는 foo라는 모듈의 모든 인스턴스에 정의된 모든 리소스와 연결된 모든 인스턴스를 Terraform이 "잊도록" 합니다:
$ terraform state rm 'module.foo'
예제: count를 사용해 특정 리소스 인스턴스 제거 (Example: Remove a Particular Instance of a Resource using count)
count 메타-인자로 정의된 리소스는 각각 정수로 식별되는 여러 인스턴스를 가져요. 주소에 명시적 인덱스를 포함하면 특정 인스턴스를 선택할 수 있어요:
$ terraform state rm 'packet_device.worker[0]'
대괄호([, ])는 일부 셸에서 특별한 의미를 가지므로, 주소를 Terraform에 그대로 전달하려면 인용하거나 이스케이프해야 할 수 있어요. 위 예제는 Unix 스타일 셸의 일반적인 인용 문법을 보여줘요.
예제: for_each를 사용해 특정 리소스 인스턴스 제거 (Example: Remove a Particular Instance of a Resource using for_each)
for_each 메타-인자로 정의된 리소스는 각각 문자열로 식별되는 여러 인스턴스를 가져요. 주소에 명시적 키를 포함하면 특정 인스턴스를 선택할 수 있어요.
다만 문자열 문법에는 따옴표가 포함되고, 따옴표 기호는 종종 명령 셸에서 특별한 의미를 가지므로, 사용 중인 셸에 맞는 적절한 인용 및/또는 이스케이프 문법을 사용해야 해요. 예를 들어:
Linux나 macOS 같은 Unix 스타일 셸:
$ terraform state rm 'packet_device.worker["example"]'
Windows Command Prompt (cmd.exe):
$ terraform state rm packet_device.worker[\"example\"]
PowerShell:
$ terraform state rm 'packet_device.worker[\"example\"]'