AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Terraform で管理している RDS (MySQL) のパッチバージョン管理を悩むおじさん

例えば以下のような記述にして、マイナーバージョン自動アップグレードを有効にしているとき。

resource "aws_db_instance" "rds_contents_instance" {
  engine = "mysql"
  engine_version = "8.0.35"
  auto_minor_version_upgrade = "true"

...

}

現在において実行すると、以下のように差分が出る。

  # aws_db_instance.rds_contents_instance will be updated in-place
  ~ resource "aws_db_instance" "rds_contents_instance" {
      ~ engine_version                        = "8.0.40" -> "8.0.35"

...

    }

これは ignore_changes に engine_version を指定すれば雑に回避できるんだけど、それやるとメジャーバージョンを変更した時も気付かない可能性がある。 (自分で作業していたり PR 経由しているのを見ていれば気付くけど、分業制でそうじゃない場合など)

かといって MySQL のときに engine_version = "8.0" のようなパッチバージョンを明示せず latest なものを自動採用する、という動作があるのかはわからない。

なお、以下のモジュールの issue では PostgreSQL のバッチバージョンについては考慮されている、という記述を見つけた。

github.com

う〜ん悩ましい。

ちなみにセマンティックバージョニングに基づくと、マイナーバージョン自動アップグレードというのはなんか違和感が、と思っていたのだが、冷静に考えると MySQL のメジャーバージョンは 8.0 -> 8.4 -> 9.1 となんかそんな感じで、パッチバージョンに相当する箇所がマイナーバージョン管理に使われているのだった。

docs.aws.amazon.com

結局自動アップグレードはオフにして、バージョン固定で ENV ごとに確認とれたら手動で計画停止して更新、がマルいんすかねえ。