terraform taint
terraform taint는 특정 리소스를 "tainted" 상태로 표시하여, 다음 terraform apply 때 해당 리소스를 강제로 다시 만들게 합니다.
특정 리소스를 교체해서 테스트하거나 디버깅해보고 싶을때 taint를 이용하여 리소스를 교체해 볼 수 있습니다.
예제: ig에 장애가 있다 생각하고 해당 리소스를 교체해 본다.
현재 상태 확인하기: tf state list
➜ tf state list
module.route_table__private.aws_resourcegroups_group.this[0]
module.route_table__private.aws_route_table.this
module.route_table__private.aws_route_table_association.subnets[0]
module.route_table__private.aws_route_table_association.subnets[1]
module.route_table__public.aws_resourcegroups_group.this[0]
module.route_table__public.aws_route.ipv4["0.0.0.0/0"]
module.route_table__public.aws_route_table.this
module.route_table__public.aws_route_table_association.subnets[0]
module.route_table__public.aws_route_table_association.subnets[1]
module.subnet_group__private.aws_resourcegroups_group.this[0]
module.subnet_group__private.aws_subnet.this["default-private-001/az1"]
module.subnet_group__private.aws_subnet.this["default-private-002/az2"]
module.subnet_group__public.aws_resourcegroups_group.this[0]
module.subnet_group__public.aws_subnet.this["default-public-001/az1"]
module.subnet_group__public.aws_subnet.this["default-public-002/az2"]
module.vpc.data.aws_region.current
module.vpc.aws_internet_gateway.this[0]
module.vpc.aws_resourcegroups_group.this[0]
module.vpc.aws_vpc.this
위 명령을 통해 관리 중인 리소스의 상태를 확인할 수 있습니다.
인터넷 게이트웨이 리소스 taint하기: tf taint
➜ tf taint 'module.vpc.aws_internet_gateway.this[0]'
>>>
Resource instance module.vpc.aws_internet_gateway.this[0] has been marked as tainted.
변경 사항 적용하기: tf apply
➜ tf apply
>>>
# 중략
Terraform will perform the following actions:
# module.route_table__public.aws_route.ipv4["0.0.0.0/0"] will be updated in-place
~ resource "aws_route" "ipv4" {
~ gateway_id = "igw-09be7ce12b07438cf" -> (known after apply)
id = "r-rtb-0314c188a357c38491080289494"
# (4 unchanged attributes hidden)
}
# module.vpc.aws_internet_gateway.this[0] is tainted, so must be replaced
-/+ resource "aws_internet_gateway" "this" {
~ arn = "arn:aws:ec2:ap-northeast-2:671393671211:internet-gateway/igw-09be7ce12b07438cf" -> (known after apply)
~ id = "igw-09be7ce12b07438cf" -> (known after apply)
~ owner_id = "671393671211" -> (known after apply)
tags = {
"Name" = "default"
"Owner" = "posquit0"
"Project" = "Network"
"module.terraform.io/full-name" = "terraform-aws-network/vpc"
"module.terraform.io/instance" = "default"
"module.terraform.io/name" = "vpc"
"module.terraform.io/package" = "terraform-aws-network"
"module.terraform.io/version" = "0.24.0"
}
# (2 unchanged attributes hidden)
}
Plan: 1 to add, 1 to change, 1 to destroy.
ig에 연결되어있던 라우팅 테이블 규칙이 update 됐습니다. → 의존성
terraform untaint
taint 상태를 제거하고 싶다면, terraform untaint 명령어를 사용하면 됩니다.
➜ tf untaint 'module.vpc.aws_internet_gateway.this[0]'
같은 기능을 하는 명령어
리소스를 갱신하고 싶을 때, taint 외에도 아래와 같은 방법을 사용할 수 있습니다:
- terraform plan -replace=resource
- terraform apply -replace=resource
이러한 방법은 하나의 리소스를 대체할 때 유용하며, 여러 리소스를 갱신하고 싶을 때는 **taint**를 사용하는 것이 좋습니다.
'IaC > Terraform' 카테고리의 다른 글
[Terraform]워크스페이스 디렉토리 구성 전략 (0) | 2023.09.11 |
---|---|
[Terraform]다른 워크스페이스의 정보 가져오기 - terraform_remote_state 사용법 (0) | 2023.09.03 |
[Terraform]상태(state) 관리 명령어 사용 방법 (0) | 2023.08.27 |
[Terraform]상태 저장소 설정하는 방법(Backend) (0) | 2023.08.27 |
[Terraform]반복문(For)을 사용하여 resource 작성하는 방법 (0) | 2023.08.20 |