🤠

Amazon Aurora についてかんたんにまとめる【がんばりすぎないインフラ】

2021/01/23に公開

こんにちは。 sasumasa です。

僕は去年くらいからサーバーサイドエンジニアやインフラエンジニアとして AWS について触れることが多くなりました。

それぞれのサービスについてもう少し踏み込んで理解するために「がんばりすぎないインフラ」というテーマでその時々で気になった要素についてまとめていこうと思っています。

できるだけドキュメントやソースを貼りながらまとめていこうと思っていますが、間違っている情報があったらご指摘ください。

第一回は Amazon Aurora についてです。

Amazon Aurora とは

Amazon Aurora とは AWS のデータベースサービスの一つです。公式ドキュメントを参考にしながら概要をまとめてみます。

  • クラウド向けのリレーショナルデータベースで、RDS を使ったマネージドサービス
  • MySQL および PostgreSQL と互換性がある
  • 標準的な MySQL データベースと比べて最大で 5 倍高速
  • 標準的な PostgreSQL データベースと比べて最大で 3 倍高速
  • 商用データベースと同等のセキュリティ、可用性、信頼性を 10 分の 1 のコストで実現
  • もう RDS 使うなら Aurora でいいんじゃないかなという気持ちになりますね。

RDS についてもまとめておきます。

RDS とは

公式ドキュメントはこちらです。ポイントは以下の通りです。

  • クラウド上のリレーショナルデータベースのセットアップ、オペレーション、スケールが簡単になる
  • 使い慣れたデータベースエンジンから選択できる
    • Amazon Aurora
    • PostgreSQL
    • MySQL
    • MariaDB
    • Oracle データベース
    • SQL Server

ざっくりとまとめるとリレーショナルデータベースの管理の面倒なところを丸投げして利用できるようになる感じです。

Aurora を使わないケース

AWS で RDS を使うならデータベースエンジンは Amazon Aurora で一択のように見えますが、Aurora を利用しないとしたらどんな理由が考えられるのでしょうか。

AuroraかRDSどちらを選ぶべきか比較する話をDevelopers.IO 2019 in OSAKAでしました #cmdevioによると、Aurora は

  • 利用したい DB エンジンが異なる
    • 先に述べたように Aurora は MySQL or PostgreSQL のみ互換性があります
  • 利用できるエンジンのバージョンが異なる
  • ストレージエンジンが異なる
  • DB エンジンの新機能が使えるタイミングが少し遅れる
  • ユースケースによっては割高になる

といった点があるらしく、この点は注視した方が良さそうです。

上の記事はとてもよくまとめられているので、 Aurora のメリットについて詳しく知りたかったら調べてみてみると良さそうです。

Aurora DB クラスター

最後に、Aurora を使う仕事をしてて個人的につまずいた点をまとめたいと思います。Aurora DB クラスターについてです。

Aurora DB クラスターの構成図は以下のようになっています。

参考: https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.html

Aurora は DB インスタンスとインスタンスのデータを管理するクラスターボリュームが分離されており、クラスタボリュームは複数の AZ にまたがります

そして書き込みと読み込みができる唯一のプライマリ DB インスタンスはそのクラスターボリュームに書き込み・読み込みをします。

リードレプリカは他の AZ に分散して置くことで高可用性を維持します。

Aurora を利用するときは基本的に DB インスタンスのエンドポイントを指定するのではなく、クラスターのエンドポイントを利用します。クラスターのエンドポイントはプライマリ DB インスタンスをポイントし、そのプライマリ DB インスタンスが失敗し置き換えられるといい感じにポイントを変更してくれます。

ちなみにAurora のコンソールでは以下のように表示されます。上から順にクラスター、プライマリ DB インスタンス、リードレプリカとなります。このクラスターは Terraform を利用して DB インスタンスを立てていますが、特にインスタンスを立てる際には Read や Write は指定していません。

そのためこのクラスターを作った当初は Write が Read/Write のことを指すのか、ap-northeast-1c のリソースから Aurora に接続すると Write ができないのか?など混乱してしまいました。

いくら Terraform から AWS のリソースの関連や設定を把握できるとしても、実際に立てるリソースについては概要のみならずその詳細もしっかり把握しておかないといけないなと改めて思いました。

Discussion