AWS ELB を Terraform で消そうとしたらハマった
AWS を terraform で操作することにハマっています.
便利ですね〜
昨日,ハマったことがあるので共有します.
一緒に VPC リソースも作った
テスト用だったので,こんな感じに VPC からすべて同時に作成しました.
resource "aws_vpc" "network" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
enable_dns_support = true
enable_dns_hostnames = true
}
resource "aws_subnet" "public" {
vpc_id = aws_vpc.network.id
cidr_block = "10.0.0.0/24"
map_public_ip_on_launch = true
}
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.network.id
}
resource "aws_lb" "test" {
name = "test-lb-tf"
internal = false
load_balancer_type = "network"
subnets = [aws_subnet.public.id]
enable_deletion_protection = true
}
resource "aws_lb_listener" "test" {
load_balancer_arn = aws_lb.test.arn
port = "443"
protocol = "TCP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.test.arn
}
}
...
terraform apply
して,terraform 便利〜とやった後にお片付け,
terraform destroy
しました.
terraform destroy が一生成功しない
aws_internet_gateway.gw
の削除が一生成功しない状態になりました.
具体的には,still deleting...
の状態が10分以上続く状態です.
それ以外にエラーなどを出さなかったので,「???」状態です.
Console から消してみた
どうせ消えないので,コンソールから internet gateway を削除.
すると,「紐付いているサブネットだかVPCだかがあるから消せないよ」というエラーが.
なるほど?なぜ terraform destroy
で言ってくれない??
原因: nlb に delete protection を付けていたこと
最終的な原因は,nlb の enable_deletion_protection
を有効化していたことでした.
これが有効化されていたため, terraform で nlb が削除されずに gw の削除が走り,成功しなかったというわけでした.
キモは,enable_deletion_protection
がある nlb を含む destroy が走った際には, nlb の destroy は何も言わずに終了する,という点でした.
これは,他のリソースの削除に成功した場合に exit 0 を返すためだろうと思います.
gw の削除はエラーを出してくれよ...と思ったのでした.