チーフエンジニアの加辺です。
今回はterraform愛好家のためのメモ書きみたいなものです。
MySQL 5.7互換を謳っているAurora MySQL Compatible v2(以下Aurora v2と略します)ですが、具体的に作成するときにはパラメータの組み合わせがなかなか容易ではありません。
planは通ったけど実際にapplyしてみるとエラーであったり、いつまで経ってもクラスタが作成されなかったり…
そんな憂き目を見る人(含将来の自分)を減らすため、この記事を書くことにしました。
ちなみに大抵の場合、目にするエラーはこれです
InvalidParameterValue: The engine mode provisioned you requested is currently unavailable.
一番大事な設定: engineとengine_version
まず前提として、aws_rds_cluster
とaws_rds_cluster_instance
両方に同じものを記述するのが無難です。
本来aws_rds_cluster
で指定していればaws_rds_cluster_instance
に必要とは考えにくいのですが、現時点ではここに差異があるとエラーとなってしまうので、同じものを明示的に記述します。
pluginのissueで疑問を呈している人もいます。
engine
Aurora v2ではengine
は常にaurora_mysql
とします。v1ではaurora
でしたが、Aurora PostgreSQLが出たのでv2からは変更となったようです。
このあたりの正式な情報源はRDS API Documentかと思います。
Engine
The name of the database engine to be used for this DB cluster.
Valid Values:
aurora
(for MySQL 5.6-compatible Aurora),aurora-mysql
(for MySQL 5.7-compatible Aurora), andaurora-postgresql
したがってterraformでは以下のように記述することになります:
1 | engine = "aurora-mysql" |
engine_version
engine_version
は少し曲者です。というのはRDSコンソールでこの部分のInfoを見ると以下のように記載されているからです:
Regional databases
One writer and multiple readers
5.7.12, 2.03.2, 2.03.3, 2.03.4, 2.04.0, 2.04.1, 2.04.2, 2.04.3, 2.04.4, 2.04.5, 2.04.6, 2.04.7, 2.05.0, 5.6.10a, 1.19.0, 1.19.1, 1.19.2, 1.19.5, 1.20.0One writer and multiple readers – Parallel query
5.6.10a, 1.19.0, 1.19.2, 1.19.5Serverless
5.6.10aGlobal databases
global_10a
今回はこの中でも標準的な
1 | One writer and multiple readers |
について述べますが、Aurora v2のデフォルトは5.7.12
となっています。(5.6.10a
や1.*
はAurora v1のもの)
このように記載されているとついengine_version
にも5.7.12
と記述したくなってしまいます。
実はこれは正しく、5.7.12を利用する場合は5.7.12
が正しい記述です。
1 | engine_version = "5.7.12" |
ただし5.7.12というのはAurora v2の中では最も古いバージョンで、新しい2.*を使いたい場合が問題となります。
2.04.5を使いたいときにそのまま書くのは間違いです。
1 2 | # ×間違い engine_version = "2.04.5" |
正解はRDS API Documentを参照するのが正しく、
Aurora MySQL
Example: 5.6.10a, 5.6.mysql_aurora.1.19.2, 5.7.12, 5.7.mysql_aurora.2.04.5
以下のように記述します。
1 2 | # ◯正しい engine_version = "5.7.mysql_aurora.2.04.5" |
この記法はAPI Documentに記載の通り、Aurora v1でも同様です。
engine_versionの罠
2019/11/13現在、2.05.0
や2.04.7
というバージョンが記載されていますが、実はこれは未リリースのバージョンのようです。Aurora v2のリリース情報に掲載されているバージョンに含まれていません。
これをterraformでengine_versionに指定した状態でterraform apply
を実行すると、何とエラーは発生せず、ひたすら待ち続けることになります。よく確認しましょう。
2019/11/13現在、リリースされている最新バージョンは2.04.6
です。
おすすめ設定: Performance Insightsの有効化
AWS ManagedなRDSを利用することのメリットの1つにはPerformance Insightsが利用できることが挙げられます。これは是非とも利用した方がよいでしょう。
Performance Insightsを利用するためにはいくつかの条件があります。よくドキュメントを確認する必要があります。
Aurora v2の場合の条件は以下の通りです
- engine_versionが2.04.2またはこれ以上の2.*系であること (デフォルトの5.7.12はNG)
- DB instance classがdb.t2またはdb.t3でないこと(つまりr*系のみ)
今から新規Aurora v2クラスタを作成する場合、engine_versionが低すぎるということはまずないと思いますが、特に開発環境などのinstance classには注意が必要です。
具体的には以下のようにlocal
とregexall
を用いて記述すると環境の差異によりPerformance Insightsの有効/無効を切り替えられるので便利です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | locals { # どちらかを記載 db_instance_class = "db.r5.large" db_instance_class = "db.t3.small" } resource "aws_rds_cluster_instance" "instance" { count = 2 identifier_prefix = "test-${count.index}-" engine = "aurora-mysql" engine_version = "5.7.mysql_aurora.2.04.6" cluster_identifier = aws_rds_cluster.test.id instance_class = local.db_instance_class performance_insights_enabled = length(regexall("^db\\.t[23]", local.db_instance_class)) == 0 # 以下略 } |
Enjoy terraforming!
RDSリソースの作成や削除には時間がかかるので、なるべく失敗しないように知見を溜めていきましょう!