terraformでAurora MySQL Compatible v2を作成するときのベストプラクティス

KabeTomoya

このエントリーをはてなブックマークに追加

チーフエンジニアの加辺です。

今回は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_clusteraws_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), and aurora-postgresql

したがってterraformでは以下のように記述することになります:

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.0

One writer and multiple readers – Parallel query
5.6.10a, 1.19.0, 1.19.2, 1.19.5

Serverless
5.6.10a

Global databases
global_10a

今回はこの中でも標準的な

について述べますが、Aurora v2のデフォルトは5.7.12となっています。(5.6.10a1.*はAurora v1のもの)

このように記載されているとついengine_versionにも5.7.12と記述したくなってしまいます。

実はこれは正しく、5.7.12を利用する場合は5.7.12が正しい記述です。

ただし5.7.12というのはAurora v2の中では最も古いバージョンで、新しい2.*を使いたい場合が問題となります。

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

以下のように記述します。

この記法はAPI Documentに記載の通り、Aurora v1でも同様です。

engine_versionの罠

2019/11/13現在、2.05.02.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には注意が必要です。

具体的には以下のようにlocalregexallを用いて記述すると環境の差異によりPerformance Insightsの有効/無効を切り替えられるので便利です

Enjoy terraforming!

RDSリソースの作成や削除には時間がかかるので、なるべく失敗しないように知見を溜めていきましょう!

インフラ周りに関することなら
お気軽にご相談ください。

お客様のご要望に合わせて柔軟な対応をさせていただきます。
お見積り依頼やご相談・ご質問はお問い合わせフォームからお願いいたします。

ご相談・お問い合わせ