Aurora Serverlessが出たので早速テスト環境に適用してみた

社内でAuroraのサーバーレスというのが出たらしいというので触ってみました。

Auroraのサーバーレス?

ん?Auroraのサーバーレス?どういうことだ? よくわからなかったので、読んでみました。

これがAWSのニュース記事はこれ。

Aurora Serverless MySQL Generally Available | AWS News Blog

最初の方の文を抜き出してみると、インスタンスを意識しないで良いということだそうです。

You may have also heard of serverless, which allows you to build and run applications and services without thinking about instances.

簡単な構成図も説明と一緒に記載されています。

https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2018/08/08/vpc-883x1024.png

  • It creates an Aurora storage volume replicated across multiple AZs.

  • It creates an endpoint in your VPC for the application to connect to.

  • It configures a network load balancer (invisible to the customer) behind that endpoint.

  • It configures multi-tenant request routers to route database traffic to the underlying instances.

  • It provisions the initial minimum instance capacity.

でも、結局日本人なので日本語が一番理解できました。 インスタンスが自動でスケール・縮退・停止することから、

  • システムリソースへの考慮が大幅に減ること
  • 使った分だけの従量課金に限りなく近くなること

と理解しました。

Amazon Aurora – 自動スケーリングサーバーレスデータベースサービス – AWS

Aurora Serverless は、 Aurora のオンデマンド自動スケーリング構成です。データベースのキャパシティーがアプリケーションのニーズに基づいて自動的に起動、シャットダウン、スケールアップまたはスケールダウンされます。Aurora Serverless を使用すれば、データベースインスタンスクラスターを管理せずにクラウド内でデータベースを実行できます。Aurora Serverless は、自動的に起動し、アプリケーションの使用状況に合わせて容量を調整し、使用していないときはシャットダウンするため、まれにしか発生しない、断続的な、または予測不可能なワークロードに対するシンプルで費用対効果の高いオプションです。

検証機のDBを切り替えてみた

早速適用してみることになりました。

当初東京リージョンはもう少し先かと思ったのですが、既に来ているようでした。

常にアクセスがあるわけでない検証機は考えるまでもなく、費用削減効果が高そうなので、前提条件もクリアしてそうだったので、早速切り替えてみることにしました。

クラメソさんの記事には、本当にいつもお世話になっております。

dev.classmethod.jp

手順

普通のRDSのバックアップリストアとほどんど変わりません。難しい手順は無いのですが、以下の通りやりました。

スナップショット取得

通常どおりスナップショットを取得。

インスタンス復元

インスタンス復元時にServerlessが指定できます。

起動を待つ

タイプがサーバーレスと表示されて少し楽しみです。ちなみに従来のAuroraのタイプは Provisioned になっています。

f:id:yomon8:20180810161649p:plain:w300

f:id:yomon8:20180810161657p:plain:w300

DBのサイズにもよるのかもしれませんが、クラスタ作成に20分ほどかかりました。

接続確認

作成後、mysqlコマンドで繋ぎにいったところ数十秒応答が無かったので、少し焦りましたが、上記のクラメソさんの記事でも最初は時間かかるとあったので、待ったら普通につながりました。

$ mysql -hmy-serverless-db.cluster.ap-northeast-1.rds.amazonaws.com -umyuser -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

アプリ側はSpring Bootで動いているのですが、当然ながら接続設定変更して普通に動きました。

設定を確認してみる

クラスタ作成後に設定を変更できる点は以下の通りです。

f:id:yomon8:20180810161703p:plain:w300

特徴となるのがACU(Aurora キャパシティーユニット)で、2から64で何段階かに調整でき、即時反映されます。

  • 最小ACU
  • 最大ACU

f:id:yomon8:20180810161706p:plain:w300

f:id:yomon8:20180810161709p:plain:w200

アイドル時の自動停止までの時間も、最小5分から最大24時間で、秒単位指定できました。

気づいたこと

スケーリングの情報はログに出力されて管理画面で確認できる

拡張・縮退のタイミングはログに出力されているので、後からACUが変更されたタイミングを確認できます。

アプリケーション側から少しでもアクセスあるとAuroraは停止しない

当然といえば当然なのですが、常時DB接続があるタイプのアプリケーションでは、たとえアプリケーションそのものにアクセスが無くともAurora Serverlessは停止しません。監視等でちょっとした情報を定期的にDBに問い合わせる処理があっても同様です。この場合、Aurora Serverlessは最低限の2ACUで動き続けます。

DB接続のメトリクスなどがわかりやすいと思います。

Aurora Provisionedの東京の料金は以下の通りです。

タイプ 料金
db.t2.smal |0.063USD
db.t2.medium 0.125USD

現時点のAurora Serverlessの最低料金は2ACUで0.2USDです。

つまり、もともと大きなインスタンスを割り当てている場合はAuroraは安くつきますが、db.t2.smallで事足りる環境なら現状より高くついてしまうことになります。またはアプリケーション側を停止可能な場合は、開発環境などはアプリケーション側も停止してあげればAuroraが停止して費用的なメリットを見込めます。