RDSのマイナーバージョンの自動更新をオフにする with Terraform
はじめに
最近、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.
マイナーバージョンを自動更新するかは auto_minor_version_upgrade
によって切り替えられるようで、Defaults to true とあるので、デフォルトでは有効になっているみたいです。
試しに画面上から確認してみたところ、確かにマイナーバージョン自動アップグレードが有効になっています。
なので、今回の事象の原因は 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
...
}
実行後、再度画面上から確認してみるとマイナーバージョン自動アップグレードが無効になっていることを確認できました!
終わりに
今回は自動更新を無効にする形で対応しました。
ただ、もっと良い方法がありそうな気がするので、うちではこうやってるみたいなのがあれば教えていただけるとすごく嬉しいです🙏
参考
Discussion