takutakahashi.dev

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 の削除はエラーを出してくれよ...と思ったのでした.