はじめに
こんにちは。CCI インフラチームのOGAWAです。
Terraformを利用してRDSのMySQLのバージョンアップを行う場合、
1. 既存RDSの変更
2. スナップショットからのRDS構築+変更
この二つの方法でバージョンアップができます。
この二つをそれぞれ検証し、
発生したエラーと解消方法を共有します。
MySQLのバージョンをあげるときは、
バージョンアップに関わる項目の値を許可する形で設定する
オプショングループとパラメータグループの値はバージョンアップ後の値を指定するMySQLをスナップショットから作成する形でバージョンをあげるときは、
オプショングループとパラメータグループの値はバージョンアップ前の値を指定する
今回は以下ブログ記事の続編となります。
目次
1. 検証その1
・ 既存RDSのMySQLをバージョンアップ
・発生したエラー
2. 検証その2
・スナップショットからRDSを構築する際にMySQLをバージョンアップ
・発生したエラー
3. Terraformを利用したMySQLバージョンアップの注意点
1. 検証その1
既存RDSのMySQLをバージョンアップ
では、その1から始めます。
【目的】
terraformを使用してRDSのMySQLバージョンアップができるか確認する
【方法】
検証環境にてMySQL5.7のRDSを構築し、Terraformファイルにてバージョンアップを行う
検証環境サーバにログインし、RDSのMySQLをバージョンアップする内容の
Terraformファイルを作成し、apply実行しました。
# 検証前に作成したrds.tf 抜粋 resource "aws_db_instance" "stg-db" { ~~ 省略 ~~ allow_major_version_upgrade = false apply_immediately = false option_group_name = "default:mysql-5-7" parameter_group_name = "default.mysql5.7" ~~ 省略 ~~ }
発生したエラー
基本的な項目は事前に先輩方がRDSを構築した時の資料からお借りして作成したのですが、
初回、applyを実行したところさっそくエラーが発生しました。
Error: updating RDS DB Instance (XXXXX): operation error RDS: ModifyDBInstance, https response error StatusCode: 400, RequestID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, api error InvalidParameterCombination: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.
allow_major_version_upgrade(メジャーバージョンアップグレード)の値が
falseになっていました。
trueに修正して再実行します。
allow_major_version_upgrade = true今度は実行できたのに、ブラウザに全く反映されません。
再度コードを確認したところ、
apply_immediately(DB変更内容即時反映)設定がfalseになっていました。
これでは実行後にすぐ変更内容が反映されないので、trueに変更して再実行します。
apply_immediately = true
今度はバージョンアップがブラウザに反映されました!
しかし、よく見ると
option_group_name(オプショングループ)とparameter_group_name(パラーメータグループ)の
バージョンが以前のままです。
修正して、再度apply実行したところ…
option_group_name = "default:mysql-8-0" parameter_group_name = "default.mysql8.0"
想定通り、バージョンアップができました!
3. 検証その2
スナップショットからRDSを構築する際にMySQLをバージョンアップ
続いて、その2です。
【目的】
Terraformを使用してスナップショットからRDSを構築するのと同時に
MySQLバージョンアップができるか確認する
【方法】
MySQL5.7のRDSスナップショットを作成し
TerraformファイルにてRDS構築と同時にバージョンアップを行う
検証環境サーバにログインし、MySQLをバージョンアップする内容でRDS構築を行う
Terraformファイルを作成し、apply実行しました。
# 検証前に作成したrds.tf 抜粋 resource "aws_db_instance" "stg-db" { ~~ 省略 ~~ option_group_name = "default:mysql-8-0" parameter_group_name = "default.mysql8.0" ~~ 省略 ~~ }
発生したエラー
項目は検証その1から大きく変更せず、snapshot_identifier(スナップショットの元ファイル)を
指定したところ、次のようなエラーが出ました。
option_group_name(オプショングループ)が現DBのエンジンバージョンと合わないらしく
バージョンを設定していた8-0から5-7に修正してapply実行しました。
option_group_name = "default:mysql-5-7"またエラーです。
parameter_group_name(パラメータグループ)が現DBのエンジンバージョンと合わないらしく
こちらもバージョンを設定していた8.0から5.7に修正してapply実行してみたところ…
parameter_group_name = "default.mysql5.7"
想定通り、バージョンアップができました!
ブラウザ画面上で確認したところ、MySQLのバージョンだけでなく
オプショングループもパラメータグループもバージョンアップされていました。
どうやら、オプショングループとパラメータグループは現行のバージョンを指定することで
エンジンバージョンにて指定したバージョンに自動的にアップデートされるようです。
実行後のtfstateファイル上では、オプショングループとパラメータグループの値は
バージョンアップ後の値に修正されていました。
apply実行後にrds.tfの値もtfstateと同バージョンに修正し
plan実行して差分が出ないことを確認することをお勧めします。
option_group_name = "default:mysql-8-0" parameter_group_name = "default.mysql8.0"
3. Terraformを利用したMySQLバージョンアップの注意点
改めて、今回の検証を通した注意点は以下2点となります。
MySQLのバージョンをあげるときは、
バージョンアップに関わる項目の値を許可する形で設定する
オプショングループとパラメータグループの値はバージョンアップ後の値を指定するMySQLをスナップショットから作成する形でバージョンをあげるときは、
オプショングループとパラメータグループの値はバージョンアップ前の値を指定する