Aurora Serverlessを実際に使ってみたメリットとデメリット

Aurora ServerlessというAWSのサービスをご存知でしょうか?RDSやAuroraと比べて比較的新しいRDBサービスで、使い方によっては大きなメリットがあるサービスなのですが、歴史が浅いためかWeb上にある情報は少ないです。実際に弊社PLAN-Bでも導入検討を行う際には、以下のような懸念点が存在しました。

  • 他のサービスと何が違うの?
  • Aurora Serverlessって名前だけど具体的にどこがServerlessなの?
  • ACUでどれぐらいパワーが出るの?

今回は、そんなAurora Serverlessについて事例と共に紹介します。Aurora Serverlessそのものの存在を知らなかった方、システム開発への導入検討をされている方の助けになれば幸いです。

本記事は2020年12月に執筆されたものです。最新の情報とは異なる場合がありますのでご注意ください。

Aurora Serverlessとは

Aurora ServerlessとはAWSが提供するDBのサービスの1つです。AuroraというAWSが独自で開発したDBエンジンを搭載したサービスで、実務で発生するDBのメンテナンス作業や負荷に応じたDBインスタンスのスケーリング管理が不要なところが特徴的なサービスです。

Aurora Serverlessに来たリクエストの量に合わせて、柔軟に性能をスケーリングすることができます。また、このときスケーリングした性能を表す単位をACU(Aurora capacity unit)といいます。

Aurora Serverlessの料金は以下のように計算されます。

(ACUサイズ×起動時間)+DBに対するリクエスト数+データ保存料金

他のAWSのRDBサービスと比較したAurora Serverlessの特徴

Aurora Serverlessとその他のRDBのサービスとの比較です。AWSにはAurora Serverless以外にも様々なRDBのサービスが存在し、それぞれ異なる特徴と適したユースケースが存在します。 各サービスには適材適所、できることできないことが存在します。

弊社でも、Auroraを始めとした各DBサービスを利用してきましたが、実際に使ってみた所感は以下のようなイメージです。

AWSデータベースサービス比較

コスト
Aurora Serverlessが最も安く、Auroraが最も高いです。ただし、AuroraとRDSの金額は起動するインスタンスの台数によって前後します。
性能
Auroraが最も性能が出ます。Aurora Serverlessは後述のスケーリングの影響もあって△にしています。
可用性
RDS, Aurora, Aurora Serverlessそれぞれ自動フェールオーバー機能を保有しており、障害発生時などのエンジニアの負荷が少なくなっています。またAuroraには高速フェールオーバー機能やストレージのリージョン間レプリケーション機能もあります。
メンテナンスの楽さ
いずれのサービスもハードウェアのプロビジョニングやミドルウェアのパッチ適用、バックアップが自動で行われ、開発者の運用負荷を減らすことができます。AuroraとAurora Serverlessではそれに加えてスケーリングの管理も自動で行ってくれます。 

また、Aurora ServerlessはServerlessという名前がついているものの他のServerless Architectureで使用されるサービス(Lambda, SQS, SNSなど)ととりわけ相性が良いというわけではありません。Lambdaと組み合わせるにはVPCの中に入れる必要があったり、Pub/Subメッセージングモデルのような形でDBに対してリクエストを送れるわけでもありません。

あくまでAuroraよりも更に柔軟にスケーリングすることができるようになったDBのようなイメージです。

(こちらの記事もご参考ください AWSマネージドデータベースとは?利点と気をつけたいことまとめ )

LambdaとAurora Serverlessを組み合わせたアーキテクチャと想定トラフィック

弊社PLAN-Bでは実際にAurora Serverlessを利用したビッグデータの分析基盤を構築しようとしていました。 ここでは、使用してみた結果とそこから分かったメリットとデメリットを紹介します。

アーキテクチャ

AWS LambdaとAurora Serverlessを組合わせたデータ分析APIの開発を行いました。 Aurora Serverlessに入っているデータは1テーブルあたりおよそ100万レコード程度です。
また、初回起動時のACUは2からスタートし、SQLはシステムのトラフィックを想定して1秒に一度実行されます。

結果

以下のような簡単な集計SQL文を発行し、Aurora Serverlessにリクエストを送信しました。(データベースのカラム名やテーブル名は加工しています)

結果は、簡単なSELECTを行うSQLでも5〜6秒前後の時間がかかってしまい、ACU上限を上げても大きな改善にはなりませんでした。また、テーブルを分割し並列でリクエストを投げるという方法を利用して実行時間の短縮を図りましたが、今度はData APIの秒間1000リクエストという制限に抵触しました。更にこのときDBではクエリが常に実行されている状態ではACUの最小単位からスケーリングすることができず、処理速度の改善ができませんでした。結果的に、今回構築するシステムでは性能面の要件からAurora Serverlessの導入は見送りました。

ACU結果

しかし、社内の別のシステムでは、Aurora Serverlessの特性とあっていたため導入が決まりました。以下の理由です。

  • ワークロードが予測不能
    • Aurora Serverlessはその特性上、いつスパイクが発生するか分からないようなシステムに適しています。社内の別のシステムではこの特性に合致していました。
  • 新規のアプリケーション
    • 新規のアプリケーションの場合、1日のアプリケーションのトラフィックが予想できないかつ、開発コストを抑えながら作る必要がありました。Aurora Serverlessを使うことで、最小限のコストで開発を進めることができるので、Aurora Serverlessが最適であるという判断になりました。

以上を踏まえて、メリットとデメリットをまとめます。

Aurora Serverlessのメリットとデメリット

メリット

リクエストが頻繁に来ないアプリケーションであれば安い!

Aurora Serverlessは通常のAuroraやRDSに比べてリクエスト数によるスケーリングが柔軟に行われます。スケーリングの設定はユーザーではできないので注意は必要ですが、RDSやAuroraのような他のサービスのスケーリング方式と違って、使用されていない時間はDBが停止しコストを抑えることが可能です。ここが、Aurora Serverless最大のメリットになります。

サーバーの管理が不要なので楽チン!

アプリケーションの開発者であれば、運用面での手間なども考えなければなりません。Aurora Serverlessではスケーリングをフルマネージド(=サービス側でいい感じ)に行ってくれるので開発者はプロダクトやサービスの開発に集中できます。また、Auroraと同様に開発者はデータベースの管理業務(パッチ適用、バックアップ、セットアップなど)を行う必要がありません。

デメリット

スケールするまでの時間が遅い

Aurora Serverlessはクエリが処理されている間はスケーリングできません。つまり継続的にクエリが実行されるようなアプリケーションでは、スケーリング自体がいつまでも実行されない可能性があり、想定していた性能が出ない場合があります。具体的に秒間1回以上リクエストが来るようなシステムでは、AuroraをはじめとしたserverlessではないDBサービスが向いていると言えます。

LambdaからAurora Serverlessへのアクセス時に使用するData APIの制限がツラい!

Data APIとはAurora Serverlessに接続する際にコネクション数を気にせずLambdaなどのサービスと繋ぐためのAPIです。このData APIですが便利な半面、「1秒間あたり最大1000コール」や「レスポンスのサイズが最大1MB」といった制限が存在します。性能面でリクエストを並列で投げたり、一度のクエリあたりのレスポンスサイズを大きくしたりしようとするとこの制限に引っかかってしまいます。設計の際はこの制限を考慮する必要があります。

感想

Aurora Serverlessを導入検討するときは、システムへのアクセス頻度やスパイクが、オートスケーリングの特性に対して問題がなさそうかを事前に考慮・検証することが重要です。例えば、リクエストが断続的に来るような少トラフィックのアプリケーションや、開発環境でちょっと試してみる用途であればAurora Serverlessは費用も運用コストも低く抑えられます。一方、今後ユーザー数がどんどん増えることが見込まれていたり、1秒間に100や200といったアクセスが発生したりするようなアプリケーションでは制限やスケーリングが問題になる可能性があります。

まとめ

Aurora ServerlessはAWSに今までになかった新しいデータベースサービスです。メリットも大きい反面、使い所も限られてきます。特にトラフィックが少ないアプリケーションで費用を抑えながら構築したい場合、Aurora Serverlessは力を発揮するでしょう。Aurora Serverlessというサービスについて知りたい方、Aurora Serverlessを導入しようかどうか悩んでいる方の参考になれば幸いです。