removed 블록 참조

removed 블록 참조 (removed block reference)

removed 블록은 기반 인프라를 변경하지 않고 state에서 제거할 리소스를 지정해요. 지침은 state에서 리소스 제거를 참고하세요.

출처: 문서

본문

구성 모델 (Configuration model)

removed 블록은 다음 인자를 지원해요.

완전한 구성 (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에서 리소스를 제거하려면 destroyfalse로 설정하세요. 이렇게 하면 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_instancepublic_ip 속성을 참조하세요.

다음 표는 connection 블록에서 사용할 수 있는 인자를 설명해요:

인자 설명 데이터 타입 연결 기본값
type 원격 리소스에서 데이터를 보내고 받는 연결 유형을 지정. ssh 또는 winrm을 지정할 수 있음. winrm으로 설정하면, 달리 지정되지 않는 한 target_platformunix로 설정되어 있어도 프로비저너는 Windows 특정 동작을 구현함. 문자열 ssh
user 연결에 사용할 사용자를 지정. 문자열 ssh winrm typessh일 때 root typewinrm일 때 Administrator
password 연결에 사용할 비밀번호를 지정. 문자열 ssh winrm 없음
host 연결할 리소스의 주소를 지정. 이 인자는 필수임. 문자열 ssh winrm 없음
port 연결할 포트 번호를 지정. 숫자 ssh winrm typessh일 때 22 typewinrm일 때 5985
timeout 연결이 가능해질 때까지 기다리는 시간을 지정. 문자열 ssh winrm "5m"
script_path Terraform이 원격 리소스에 스크립트를 복사하는 경로를 지정. 자세한 내용은 provisioner 블록 참조를 참고하세요. Terraform은 target_platform 구성에 따라 난수를 포함하는 경로에 스크립트를 복사함. 문자열 ssh winrm target_platformunix일 때 /tmp/terraform_%RAND%.sh target_platformwindows일 때 C:/windows/temp/ terraform_%RAND%.cmd
private_key 연결에 사용할 SSH 키의 내용을 지정. 둘 다 제공되면 private_keypassword보다 우선함. 파일에서 키를 로드하려면 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_pathc:\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>
  }
}

quiettrue로 설정되면 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)