Terraform 정리 작업에서 배운 교훈
프로젝트 종료 시 terraform destroy를 실행하면서 IAM 그룹이 삭제되어 AWS 콘솔에 다시 접근할 수 없는 상황을 겪었습니다. 이 경험을 통해 Terraform의 prevent_destroy 속성에 대해 알게 된 경험을 공유합니다.

실제 사용했던 IAM 구성
terraform destroy 명령어 실행 당시, 다음과 같이 Terraform으로 그룹과 그룹 멤버십을 다음과 같이 관리하고 있었습니다:
iam.tf
# ---------- 개발자 그룹 생성 ----------
resource "aws_iam_group" "wonq_developer" {
name = "wonq-developer"
path = "/"
}
resource "aws_iam_group_policy_attachment" "developer_readonly" {
group = aws_iam_group.wonq_developer.name
policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
# ---------- 관리자 그룹 생성 ----------
resource "aws_iam_group" "wonq_administrator" {
name = "wonq-administrator"
path = "/"
}
# ---------- 팀원들을 그룹에 추가 ----------
# 본인은 관리자 그룹과 개발자 그룹 모두에 추가
resource "aws_iam_user_group_membership" "nam_seunghyeon" {
user = "sw1_user2"
groups = [
aws_iam_group.wonq_administrator.name,
aws_iam_group.wonq_developer.name,
]
}
# 팀원들은 개발자 그룹에만 추가전체 IAM 설정은 GitHub 에서 확인 가능합니다.
이로 인해 IAM 그룹과 사용자들이 모두 삭제되어 AWS 콘솔에 접근할 수 없게 되었습니다. 프로젝트 종료가 목적이었기에 큰 문제는 없었지만, 만약 운영 중인 서비스에서 이런 일이 발생했다면 심각한 장애로 이어질 수 있었을 것입니다.
prevent_destroy 속성이란?
앞서 언급한 prevent_destroy는 Terraform의 lifecycle 블록에서 제공하는 안전장치로, 실수로 중요한 리소스가 삭제되는 것을 방지하는 기능입니다.
기본 사용법
resource "aws_instance" "example" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.sg_web.id]
user_data = <<-EOF
#!/bin/bash
apt-get update
apt-get install -y apache2
sed -i -e 's/80/8080/' /etc/apache2/ports.conf
echo "Hello World" > /var/www/html/index.html
systemctl restart apache2
EOF
tags = {
Name = "terraform-learn-state-ec2"
drift_example = "v1"
}
lifecycle {
prevent_destroy = true
}
}
삭제 시도 시 발생하는 오류
$ terraform destroy
Error: Instance cannot be destroyed
Resource aws_iam_user_group_membership.critical_admin has
lifecycle.prevent_destroy set, but the plan calls for this
resource to be destroyed.결론
이번 경험을 통해 얻은 핵심 교훈은 prevent_destroy가 단순한 옵션이 아닌 필수 안전장치라는 점입니다. 특히 IAM, 프로덕션 DB, 도메인 등의 중요 리소스는 반드시 보호 설정을 해야 하며, 프로젝트 초기부터 리소스 보호 전략을 수립하고 적용하는 것이 중요합니다. 이 작은 설정 하나가 큰 사고를 예방할 수 있다는 점을 잊지 않으려고 합니다.
참고 자료
Last updated on