- 一番大事な設定: engineとengine_version
- engine
- engine_version
- engine_versionの罠
- おすすめ設定: Performance Insightsの有効化
- Enjoy terraforming!
チーフエンジニアの加辺です。
今回は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かと思います。
EngineThe 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), and aurora-postgresql
したがってterraformでは以下のように記述することになります:
engine = "aurora-mysql"
engine_version
engine_version
は少し曲者です。というのはRDSコンソールでこの部分のInfoを見ると以下のように記載されているからです:
Regional databasesOne writer and multiple readers5.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 query5.6.10a, 1.19.0, 1.19.2, 1.19.5Serverless5.6.10aGlobal databasesglobal_10a
今回はこの中でも標準的な
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
が正しい記述です。
engine_version = "5.7.12"
ただし5.7.12というのはAurora v2の中では最も古いバージョンで、新しい2.*を使いたい場合が問題となります。
2.04.5を使いたいときにそのまま書くのは間違いです。
# ×間違い
engine_version = "2.04.5"
正解はRDS API Documentを参照するのが正しく、
Aurora MySQLExample: 5.6.10a, 5.6.mysql_aurora.1.19.2, 5.7.12, 5.7.mysql_aurora.2.04.5
以下のように記述します。
# ◯正しい
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の有効/無効を切り替えられるので便利です
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リソースの作成や削除には時間がかかるので、なるべく失敗しないように知見を溜めていきましょう!