컴포넌트 구성용 removed 블록 참조
컴포넌트 구성용 removed 블록 참조 (removed block reference for component configurations)
removed 블록을 사용해 컴포넌트 구성을 체계적으로 제거하세요. <NAME>.tfcomponent.hcl 파일(Stack의 컴포넌트 구성 파일)에 removed 블록을 정의하세요.
출처: 문서
본문
전통적인 Terraform 구성 파일(.tf로 끝나는)에서 removed 블록을 선언한다면 Terraform 구성 removed 블록 참조를 대신 참고하세요.
배경 (Background)
Stacks는 구성을 체계적으로 제거하는 접근 방식을 취해요. Stack에서 컴포넌트를 제거하려면 removed 블록을 사용해 Terraform이 어떤 컴포넌트를 제거할지, 그리고 해당 컴포넌트를 제거하는 데 어떤 프로바이더가 필요한지 알 수 있게 해요.
그 프로바이더를 요구하는 컴포넌트를 먼저 제거하지 않고 컴포넌트 구성에서 프로바이더를 제거하지 마세요. Terraform은 컴포넌트를 제거하려면 컴포넌트의 프로바이더가 필요해요.
removed 블록은 또한 Terraform이 특정 컴포넌트가 관리하는 리소스를 파괴하도록 지시하면서, 정리 작업에 필요한 프로바이더 구성을 유지해요.
구성 모델 (Configuration model)
removed 블록은 다음 인자를 지원해요:
완전한 구성 (Complete configuration)
사용 가능한 모든 인자는 다음 removed 블록에 정의돼 있어요:
removed {
for_each = <MAP_OR_SET>
source = "<MODULE_SOURCE>"
from = component.<COMPONENT_NAME>
providers = {
<PROVIDER_NAME> = provider.<PROVIDER_TYPE>.<ALIAS>
}
}
명세 (Specification)
removed 블록은 다음 구성을 지원해요.
removed
각 removed 블록은 Stack에서 제거하려는 컴포넌트 또는 컴포넌트 집합을 나타내요.
removed 블록에서 다음 인자가 지원돼요:
| 인자 | 설명 | 타입 | 필수? |
|---|---|---|---|
source |
제거하려는 컴포넌트의 소스 모듈. | 문자열 | 필수 |
from |
제거하려는 컴포넌트에 대한 참조. | 참조 | 필수 |
providers |
컴포넌트가 사용하는 프로바이더 이름의 매핑. | 맵 | 필수 |
for_each |
맵 또는 set에 기반해 여러 컴포넌트 제거. | 맵 또는 set | 선택 |
source
source 인자는 제거하려는 컴포넌트의 소스 모듈을 지정해요. source 인자는 원래 component 블록의 source 인자와 일치해야 해요.
removed {
source = "<MODULE_SOURCE>"
# ...
}
요약
- 데이터 타입: 문자열
- 기본값: 없음
- 필수: 예
from
from 인자는 제거하려는 컴포넌트에 대한 참조를 지정해요. 컴포넌트를 참조하려면 component.<COMPONENT_NAME> 문법을 사용해요.
removed {
source = "<MODULE_SOURCE>"
from = component.<COMPONENT_NAME>
# ...
}
요약
- 데이터 타입: 참조
- 기본값: 없음
- 필수: 예
providers
providers 인자는 필수예요. 프로바이더 이름을 제거하려는 컴포넌트가 사용하는 프로바이더에 매핑해요. HCP Terraform은 컴포넌트의 리소스를 제대로 제거하려면 이러한 프로바이더 구성이 필요해요.
removed {
source = "<MODULE_SOURCE>"
from = component.<COMPONENT_NAME>
providers = {
<NAME> = provider.<PROVIDER_NAME>.<PROVIDER_ALIAS>
}
}
프로바이더 매핑은 컴포넌트의 모듈이 리소스 파괴에 요구하는 모든 프로바이더를 포함해야 해요.
providers는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 있으며 Terraform이 리소스를 생성하고 관리하는 방법을 제어해요. 자세한 내용은 providers 참조를 참고하세요.
for_each
for_each 메타-인자는 for_each로 만든 여러 컴포넌트 제거를 지원해요.
값 리스트키-값 쌍의 맵
removed {
for_each = [ "<VALUE>" ]
#...
}
removed {
for_each = {
"<KEY>" = "<VALUE>"
}
#...
}
for_each를 사용해 특정 리전이나 환경의 컴포넌트를 제거할 수 있어요.
for_each는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 있으며 Terraform이 리소스를 생성하고 관리하는 방법을 제어해요. 자세한 내용은 for_each 참조를 참고하세요.
요약
- 데이터 타입: 맵 또는 set
- 기본값: 없음
- 예제: 리전별 컴포넌트 제거
예제 (Examples)
다음 예제는 removed 블록의 일반적인 사용 사례를 보여줘요.
기본 컴포넌트 제거
다음 예제에서 Stack에 database 컴포넌트를 만드는 구성을 적용한다면:
component "database" {
source = "./modules/database"
inputs = {
instance_class = "db.t3.micro"
}
providers = {
aws = provider.aws.main
}
}
이후 apply에서 ./modules/database에서 소싱하고 aws.main 프로바이더를 사용하는 database 컴포넌트를 제거하도록 removed 블록을 정의할 수 있어요:
component "database" {
source = "./modules/database"
inputs = {
instance_class = "db.t3.micro"
}
providers = {
aws = provider.aws.main
}
}
removed {
source = "./modules/database"
from = component.database
providers = {
aws = provider.aws.main
}
}
HCP Terraform에서 다음 배포 실행을 적용한 후 Terraform은 연결된 Stack 배포에서 database 컴포넌트와 그 리소스를 제거해요. 그런 다음 tfcomponent.hcl 파일에서 component 블록과 removed 블록을 모두 제거할 수 있어요.
리전별 컴포넌트 제거
다음 예제에서 HCP Terraform은 여러 리전에 regional_storage 컴포넌트를 배포했어요.
다음 구성을 적용하면 HCP Terraform은 var.regions_to_remove에 지정된 리전에서 regional_storage 컴포넌트를 제거하며, 각 리전에 대해 provider.aws.configurations의 해당 프로바이더 구성을 사용해요:
component "regional_storage" {
for_each = var.regions
source = "./modules/s3"
inputs = {
region = each.value
}
providers = {
aws = provider.aws.configurations[each.value]
}
}
removed {
for_each = var.regions_to_remove
source = "./modules/s3"
from = component.regional_storage[each.value]
providers = {
aws = provider.aws.configurations[each.value]
}
}
여러 프로바이더로 컴포넌트 제거
다음 예제에서 Terraform은 ./modules/kubernetes-app에서 소싱하고 세 개의 프로바이더를 사용하는 기존 k8s_app 컴포넌트를 제거해요:
removed {
source = "./modules/kubernetes-app"
from = component.k8s_app
providers = {
kubernetes = provider.kubernetes.main
helm = provider.helm.main
random = provider.random.main
}
}
더 알아보기 (Learn more)
- component 블록 참조: 컴포넌트 정의
- 컴포넌트 구성 개요: tfcomponent.hcl 파일
- 메타-인자 (Meta-arguments): for_each, providers
- removed 블록 (기존): 전통적 제거