📝

RDSのマイナーバージョンの自動更新をオフにする with Terraform

2022/12/10に公開

はじめに

最近、Terraform で構築した RDS のマイナーバージョンがいつの間にか上がったことで、コードの定義と差分が出るという事象がありました。その時に対応したことをまとめておこうと思います。

何が起きたか

少し前に下記のようなコードで terraform apply を実行し、 RDS DB インスタンスを作成しました。

resource "aws_db_instance" "example" {
  ...
  engine_version = "13.4"
  ...
}

それからしばらく経った後、terraform plan を実行してみると、マイナーバージョンが上がっていてコード上の定義と差分が発生していました。

$ terraform plan
...
~ engine_version                        = "13.7" -> "13.4"
...

原因調査

aws_db_instance リソースのドキュメントを見ていると関係してそうな引数がありました。

auto_minor_version_upgrade - (Optional) Indicates that minor engine upgrades will be applied automatically to the DB instance during the maintenance window. Defaults to true.

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance#auto_minor_version_upgrade

マイナーバージョンを自動更新するかは auto_minor_version_upgrade によって切り替えられるようで、Defaults to true とあるので、デフォルトでは有効になっているみたいです。

試しに画面上から確認してみたところ、確かにマイナーバージョン自動アップグレードが有効になっています。

rdsの設定変更前

なので、今回の事象の原因は RDS DB インスタンスを作成する時に auto_minor_version_upgrade を指定していなかったため、マイナーバージョンが更新されていたということになります。

対応方針を決める

原因がわかったので、どのように対応するか検討していきます。

マイナーバージョンアップにはバグ修正やセキュリティアップデートが含まれていると思うので極力上げていきたいです。ですが、コードの定義との差分が発生してしまうところが微妙かな...と思いました。

また、ステージング環境で動作確認 → 問題なければ本番環境にも適用という流れで対応したかったので、ひとまずマイナーバージョンの自動更新はオフにする方針で進めることにしました。

マイナーバージョンの自動更新をオフにする

RDS DB インスタンスの定義を下記のように terraform apply を実行します。(今回は本番稼働していないアプリだったので、ついでにマイナーバージョンも上げています)

resource "aws_db_instance" "example" {
  ...
- engine_version = "13.4"
+ engine_version = "13.7"
+ # マイナーバージョンの自動更新を無効にする
+ auto_minor_version_upgrade = false
  ...
}

実行後、再度画面上から確認してみるとマイナーバージョン自動アップグレードが無効になっていることを確認できました!

rdsの設定変更前

終わりに

今回は自動更新を無効にする形で対応しました。
ただ、もっと良い方法がありそうな気がするので、うちではこうやってるみたいなのがあれば教えていただけるとすごく嬉しいです🙏

参考

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance

Discussion