removed 블록 참조
removed 블록 참조 (removed block reference)
removed 블록은 기반 인프라를 변경하지 않고 state에서 제거할 리소스를 지정해요. 지침은 state에서 리소스 제거를 참고하세요.
출처: 문서
본문
구성 모델 (Configuration model)
removed 블록은 다음 인자를 지원해요.
removed블록from주소lifecycle블록 | 필수destroy불리언
connection블록provisioner "<TYPE>"블록when| 키워드command문자열interpreter리스트working_dir문자열on_failure키워드quiet불리언connection블록inline리스트 |script와script와 상호 배타적script문자열 |inline와scripts와 상호 배타적scripts리스트 |inline와script와 상호 배타적
완전한 구성 (Complete configuration)
다음 removed 블록은 모든 지원 인자를 정의해요.
removed {
from = "<resource.address>"
lifecycle {
destroy = < true || false >
}
connection {
<connection-settings>
}
provisioner "<TYPE>" {
when = destroy
<provisioner-type-arguments>
}
}
명세 (Specification)
removed 블록은 다음 구성을 지원해요.
removed
removed 블록은 Terraform이 state에서 리소스를 제거하도록 지시해요. state에서 리소스를 제거하면 Terraform은 더 이상 구성이 나타내는 실제 인프라를 관리하지 않아요.
요약
- 데이터 타입: 블록.
- 기본값: 없음.
from
from 인자는 제거하려는 리소스의 주소를 지정해요.
removed {
from = <TYPE>.<NAME>
}
state에서 주소를 검색하는 방법에 대한 지침은 인프라 검사 명령 개요를 참고하세요. 주소 형성에 대한 정보는 리소스 주소 지정 (Resource addressing)을 참고하세요.
요약
- 데이터 타입: 문자열.
- 기본값: 없음.
- 이 인자는 필수예요.
lifecycle
lifecycle 블록은 Terraform이 리소스를 제거하는 방법에 대한 규칙을 정의해요. removed 블록의 경우 지원되는 유일한 lifecycle 인자는 destroy예요.
removed {
# …
lifecycle {
destroy = <boolean>
}
}
기본적으로 Terraform은 리소스를 state에서 제거하고 실제 리소스를 파괴해요. 실제 리소스를 파괴하지 않고 state에서 리소스를 제거하려면 destroy를 false로 설정하세요. 이렇게 하면 Terraform으로 초기 프로비저닝을 수행한 후 관리 책임을 다른 도구나 팀에 넘길 수 있어요.
lifecycle는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 있으며 Terraform이 리소스를 생성하는 방법을 제어해요. 자세한 내용은 lifecycle 참조를 참고하세요.
요약
- 데이터 타입: 블록.
- 기본값: 없음.
connection
connection 블록은 프로비저너가 제거 중인 리소스에 연결할 수 있게 하는 설정을 지정해요.
경고
로컬 또는 원격 머신에서 작업을 수행하기 위해 프로비저너를 사용하는 것보다 구성 관리 도구를 사용하는 것을 권장해요. 자세한 내용은 프로비저너 (Provisioners)를 참고하세요.
connection 블록을 removed 블록 또는 removed 블록에 중첩된 provisioner 블록에 추가할 수 있어요. removed 블록에 추가하면 connection 블록은 제거하는 리소스에 대해 정의된 모든 프로비저너의 기본 연결 설정을 지정해요. 이를 통해 프로비저너가 제거 중에 원격 리소스에 연결할 수 있어요.
removed {
# . . .
connection {
<settings for all provisioners in the resource>
}
}
provisioner 블록에 추가하면 connection 블록은 프로비저너에 특정한 설정을 정의해요.
removed {
# . . .
provisioner "<TYPE>" {
# . . .
connection {
<settings for all provisioners in the resource>
}
}
}
SSH 연결의 경우 Terraform은 기본적으로 SSH 호스트 키를 검증하지 않아요. SSH 호스트 키를 검증하려면 키 배포를 위한 별도 메커니즘을 설정하고 특정 키나 서명 CA에 대해 검증하도록 host_key 인자를 명시적으로 설정할 수 있어요.
connection 블록의 인자에 임시(ephemeral) 값을 사용할 수 있어요. 자세한 내용은 민감한 데이터 관리를 참고하세요.
connection 블록의 표현식은 리소스 주소로 상위 리소스를 참조할 수 없어요. 참조는 의존성을 만들며, 자체 블록 안에서 리소스를 리소스 주소로 참조하면 의존성 순환이 생기기 때문이에요. 대신 표현식에서 self 객체를 사용해 connection 블록의 부모 블록과 그 모든 속성을 참조하세요. 예를 들어 self.public_ip를 사용해 aws_instance의 public_ip 속성을 참조하세요.
다음 표는 connection 블록에서 사용할 수 있는 인자를 설명해요:
| 인자 | 설명 | 데이터 타입 | 연결 | 기본값 |
|---|---|---|---|---|
type |
원격 리소스에서 데이터를 보내고 받는 연결 유형을 지정. ssh 또는 winrm을 지정할 수 있음. winrm으로 설정하면, 달리 지정되지 않는 한 target_platform이 unix로 설정되어 있어도 프로비저너는 Windows 특정 동작을 구현함. |
문자열 | ssh |
|
user |
연결에 사용할 사용자를 지정. | 문자열 | ssh winrm |
type이 ssh일 때 root type이 winrm일 때 Administrator |
password |
연결에 사용할 비밀번호를 지정. | 문자열 | ssh winrm |
없음 |
host |
연결할 리소스의 주소를 지정. 이 인자는 필수임. | 문자열 | ssh winrm |
없음 |
port |
연결할 포트 번호를 지정. | 숫자 | ssh winrm |
type이 ssh일 때 22 type이 winrm일 때 5985 |
timeout |
연결이 가능해질 때까지 기다리는 시간을 지정. | 문자열 | ssh winrm |
"5m" |
script_path |
Terraform이 원격 리소스에 스크립트를 복사하는 경로를 지정. 자세한 내용은 provisioner 블록 참조를 참고하세요. Terraform은 target_platform 구성에 따라 난수를 포함하는 경로에 스크립트를 복사함. |
문자열 | ssh winrm |
target_platform이 unix일 때 /tmp/terraform_%RAND%.sh target_platform이 windows일 때 C:/windows/temp/ terraform_%RAND%.cmd |
private_key |
연결에 사용할 SSH 키의 내용을 지정. 둘 다 제공되면 private_key가 password보다 우선함. 파일에서 키를 로드하려면 file 함수 사용. |
문자열 | ssh |
없음 |
certificate |
서명된 CA 인증서의 내용을 지정. private_key 인자도 구성해야 함. 파일에서 인증서를 로드하려면 file 함수 사용. |
문자열 | ssh |
없음 |
agent |
인증용 SSH 에이전트를 지정. ssh-agent로 인증을 끄려면 false로 설정. Windows에서 지원되는 유일한 SSH 인증 에이전트는 Pageant임. |
문자열 | ssh |
false |
agent_identity |
인증에 사용할 SSH 에이전트의 선호 ID를 지정. | 문자열 | ssh |
없음 |
agent |
SSH 에이전트를 지정. | 문자열 | ssh |
false |
host_key |
연결을 검증할 원격 호스트 또는 서명 CA의 공개 키를 지정. | 문자열 | ssh |
없음 |
target_platform |
script_path 인자의 기본값에 영향을 주는 대상 플랫폼을 지정. windows 또는 unix를 지정할 수 있음. windows는 원격 리소스의 기본 SSH 셸이 cmd.exe이면 기본 script_path를 c:\windows\temp\terraform_%RAND%.cmd로 설정. 자세한 내용은 Windows 문서 참고. SSH 기본 셸이 PowerShell이면 script_path를 "c:/windows/temp/terraform_%RAND%.ps1"로 설정. unix는 기본 script_path를 /tmp/terraform_%RAND%.sh로 설정. |
문자열 | ssh |
unix |
https |
HTTP 대신 HTTPS로 연결하려면 true로 설정. |
불리언 | winrm |
false |
insecure |
HTTPS 인증서 체인 검증을 건너뛰려면 true로 설정. |
불리언 | winrm |
false |
use_ntlm |
기본 인증 대신 NTLM 인증을 사용하려면 true로 설정. NTLM을 사용하면 대상 게스트 내에서 기본 인증을 활성화할 필요가 없음. 자세한 내용은 Windows App Development 문서의 원격 연결 인증 참고. |
불리언 | winrm |
false |
cacert |
검증할 CA 인증서를 지정. | 문자열 | winrm |
없음 |
bastion_host |
배스천 호스트의 주소를 지정. 프로비저너는 host에 연결하기 전에 bastion_host에 연결함. |
문자열 | ssh |
없음 |
bastion_host_key |
호스트 연결을 검증할 원격 호스트 또는 서명 CA의 공개 키를 지정. | 문자열 | ssh |
없음 |
bastion_port |
배스천 호스트 연결에 사용할 포트 번호를 지정. | 문자열 | ssh |
port 필드의 값 |
bastion_user |
배스천 호스트에 연결하기 위한 사용자 이름을 지정. | 문자열 | ssh |
user 필드의 값 |
bastion_password |
배스천 호스트에 연결하기 위한 사용자 비밀번호를 지정. | 문자열 | ssh |
password 필드의 값 |
bastion_private_key |
배스천 호스트에 사용할 SSH 키 파일의 내용을 지정. 파일에서 키를 로드하려면 file 함수 사용. |
문자열 | ssh |
private_key 필드의 값 |
bastion_certificate |
서명된 CA 인증서의 내용을 지정. 배스천 호스트에 인증서를 제공할 때 bastion_private_key 인자도 구성해야 함. 파일에서 인증서를 로드하려면 file 함수 사용. |
문자열 | ssh |
certificate 필드의 값 |
proxy_scheme |
연결 프로토콜을 지정. 다음 값 중 하나를 지정할 수 있음:- http - https - socks5 |
문자열 | ssh |
없음 |
proxy_host |
프록시 호스트의 주소를 지정. 프로비저너는 프록시 호스트에 먼저 연결함. bastion_host가 구성되면 프로비저너는 다음으로 배스천 호스트에 연결하고, 그렇지 않으면 host 인자에 지정된 호스트에 연결함. |
문자열 | ssh |
없음 |
proxy_port |
프록시 호스트 연결에 사용할 포트 번호를 지정. | 숫자 | ssh |
없음 |
proxy_user_name |
프록시 호스트에 연결하기 위한 사용자 이름을 지정. 프록시 서버가 인증을 요구할 때만 이 인자를 구성해야 함. | 문자열 | ssh |
없음 |
proxy_user_password |
프록시 호스트에 연결하기 위한 사용자 비밀번호를 지정. 프록시 서버가 인증을 요구할 때만 이 인자를 구성해야 함. | 문자열 | ssh |
없음 |
요약
- 데이터 타입: 블록.
- 기본값: 없음.
provisioner
provisioner 블록은 제거 중인 리소스 또는 로컬 머신에서 수행할 작업을 정의해요.
removed {
# . . .
provisioner "<TYPE>" {
<arguments>
}
}
프로비저너 타입으로 local-exec 또는 remote-exec를 선언할 수 있어요. local-exec 프로비저너는 Terraform이 실행되는 머신에서 작업을 수행해요. remote-exec 유형은 제거 중인 리소스에서 작업을 수행해요.
when 인자는 removed 블록에 중첩된 프로비저너를 구성하는 데 필요해요. 다음 표는 각 프로비저너 유형에 대해 지정할 수 있는 인자를 설명해요:
| 프로비저너 타입 | 인자 |
|---|---|
local-exec |
- command - working_dir - interpreter - quiet - connection - on_failure |
remote-exec |
- inline - script - scripts |
| 모든 유형 | - when. removed 블록에 중첩된 provisioner 블록에서 다른 인자를 사용하려면 이 인자가 필요함. - connection - on_failure |
프로비저너가 removed 블록에 중첩될 때 self 타입을 사용해 provisioner 블록 값을 참조하세요. 자세한 내용은 블록-로컬 값을 참고하세요.
when
when 인자는 프로비저너에 지정된 작업을 트리거하는 Terraform 명령을 지정해요.
resource {
provisioner "local-exec" {
when = <Terraform command>
}
}
지정된 Terraform 명령을 실행하면 Terraform은 command 인자에 지정된 명령을 실행해요. when 인자 사용 지침은 destroy-time 프로비저너를 참고하세요.
요약
- 데이터 타입: Terraform 명령.
- 기본값: 없음.
- 다른
provisioner인자를 사용하려면 필수.
command
command 인자는 로컬 실행 파일이 실행할 명령을 지정해요. 절대 경로 또는 현재 작업 디렉터리에 대한 상대 경로를 지정할 수 있어요.
resource {
provisioner "local-exec" {
command = "<path>"
}
}
Terraform은 로컬 셸에서 명령을 평가하며 변수 치환에 환경 변수를 사용할 수 있어요. 변수 치환에 Terraform 변수를 사용하는 것은 셸 인젝션 취약점을 초래할 수 있으므로 권장하지 않아요. 대신 environment 매개변수를 통해 Terraform 변수를 명령에 전달하고 환경 변수 치환을 사용하세요. 인젝션 결함에 대한 자세한 내용은 다음 OWASP 문서를 참고하세요: 코드 인젝션 (Code Injection).
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 문자열.
- 기본값: 없음.
provisioner "local-exec"블록에서 이 인자는 필수예요.
working_dir
working_dir 블록은 command 인자에 지정된 명령을 Terraform이 실행하는 작업 디렉터리를 지정해요. 현재 작업 디렉터리에 대한 상대 경로 또는 절대 경로를 지정할 수 있어요. 디렉터리는 이미 존재해야 해요.
resource {
provisioner "local-exec" {
working_dir = "<path>"
}
}
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 문자열.
- 기본값: 없음.
interpreter
interpreter 블록은 command 인자에 지정된 실행 파일을 실행하기 위한 인터프리터 인자 목록을 지정해요.
resource {
provisioner "local-exec" {
interpreter = [ "<path/to/interpreter>", "<command argument>" ]
}
}
목록의 첫 번째 인자는 인터프리터의 경로예요. 현재 작업 디렉터리에 대한 상대 경로 또는 절대 경로를 지정할 수 있어요. 인터프리터를 지정하지 않으면 Terraform은 운영 체제 기본값을 사용해요.
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 리스트.
- 기본값: 없음.
environment
environment 블록은 command 인자에 지정된 명령을 실행하기 위한 환경을 나타내는 키-값 쌍 블록을 지정해요.
resource {
provisioner "local-exec" {
environment {
<KEY> = <VALUE>
}
}
}
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 블록.
- 기본값: 없음.
quiet
quiet 인자는 command 인자의 출력을 stdout에 인쇄하는 것을 비활성화해요.
resource {
provisioner "local-exec" {
quiet = <boolean>
}
}
quiet가 true로 설정되면 Terraform은 stdout에 "Suppressed by quiet=true"라고 인쇄해요. Terraform은 여전히 명령의 출력을 인쇄해요.
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 불리언.
- 기본값: 없음.
inline
원격 리소스가 실행할 명령 문자열 목록을 지정해요.
removed {
# ...
provisioner "remote-exec" {
inline = [ "<command>" ]
}
}
프로비저너는 첫 번째 명령으로 #!/bin/bash 같은 셸을 지정하지 않는 한 원격 리소스의 기본 셸을 사용해요. script 또는 scripts와 같은 프로비저너에 inline 인자를 추가할 수 없어요.
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 리스트.
- 기본값: 없음.
script
원격 리소스에 복사해 실행할 로컬 머신의 스크립트 상대 경로 또는 절대 경로를 지정해요.
removed {
# ...
provisioner "remote-exec" {
scripts = "<path-to-script>"
}
}
inline 또는 scripts와 같은 프로비저너에 script 인자를 추가할 수 없어요.
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 문자열.
- 기본값: 없음.
scripts
원격 리소스에 복사해 실행할 로컬 머신의 스크립트 상대 경로 또는 절대 경로 목록을 지정해요.
removed {
# ...
provisioner "remote-exec" {
scripts = [ "<path-to-script>" ]
}
}
inline 또는 script와 같은 프로비저너에 scripts 인자를 추가할 수 없어요.
removed 블록에서는 destroy-time 프로비저너만 지원돼요. 따라서 다른 모든 프로비저너 인자를 구성하려면 provisioner 블록에 when을 포함해야 해요.
요약
- 데이터 타입: 리스트.
- 기본값: 없음.
예제 (Example)
다음 예제는 Terraform이 리소스를 파괴했음을 나타내는 메시지를 로컬 머신에 인쇄하는 프로비저너를 포함해요:
removed {
from = aws_instance.example
lifecycle {
destroy = true
}
provisioner "local-exec" {
when = destroy
command = "echo 'Instance ${self.id} has been destroyed.'"
}
}
더 알아보기 (Learn more)
- state에서 리소스 제거: 제거 지침
- 리소스 파괴 (Destroy a resource): 리소스 파괴
- 프로비저너 (Provisioners): 로컬·원격 작업
- 리소스 개요 (Resources overview): 리소스 관리