🧑💻
RDSをterraform destroyできない時は
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