🧑‍💻

RDSをterraform destroyできない時は

2022/12/18に公開

EC2、RDS構成のAWSインフラをTerraformで構築してクリーンアップするというハンズオンの中で、
RDSだけがterraform destroyで削除できず以下のようなエラーが出てハマってしまったので、
対応方法を説明していこうと思います!

final_snapshot_identifier is required when skip_final_snapshot is false

ハマった際のTerraformテンプレート

最初、私はRDSのTerraformテンプレートを下記のように記述していました。
terraform applyは正常に実行されるものの、terraform destroyを実行してもRDSだけ削除できませんでした。

resource "aws_db_instance" "dbserver" {
  identifier              = "dbinstance"
  allocated_storage       = 5
  engine                  = "mysql"
  engine_version          = "5.7"
  instance_class          = "db.t3.micro"
  storage_type            = "gp2"
  username                = var.aws_db_username
  password                = var.aws_db_password
  vpc_security_group_ids  = ["${aws_security_group.db-sg.id}"]
  db_subnet_group_name    = aws_db_subnet_group.db-subnet.name

RDS削除時のスナップショット取得設定について

なぜ、上記の記述では削除できなかったのでしょうか?
実は、RDSにはインスタンス削除時にスナップショットを取得するかどうかを設定できるskip_final_snapshotという項目があります。
この項目を設定ぜずにRDSを構築し、削除しようとしていたためエラーが出てしまっていたのです。

修正済みのTerraformテンプレート

skip_final_snapshotはデフォルトで false (=インスタンス削除時にスナップショットを作成する)
になっているため、true にしてテンプレートを編集しましょう。

resource "aws_db_instance" "dbserver" {
  identifier        = "dbinstance"
  allocated_storage = 5
  engine            = "mysql"
  engine_version    = "5.7"
  instance_class    = "db.t3.micro"
  storage_type      = "gp2"
  username          = var.aws_db_username
  password          = var.aws_db_password
  vpc_security_group_ids = ["${aws_security_group.db-sg.id}"]
  db_subnet_group_name   = aws_db_subnet_group.db-subnet.name
  skip_final_snapshot    = true  

terraform applyを再度実施後、terraform destroyを実行すると無事削除できました!

・
・
・
Destroy complete! Resources: 18 destroyed.

おつかれさまでした!

Discussion