注目の記事

Aurora Serverlessが一般利用可能になったので試してみた

AWS re:Invent 2017で発表のあったAurora Serverlessがいよいよ一般利用可能になりました。早速Aurora Serverlessに触って確認してみます。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

AWS re:Invent 2017で発表されていたAmazon Aurora Serverlessが一般利用可能になったので、早速試してみました。

Aurora Serverless MySQL Generally Available

Aurora Serverless

概要

AWS re:Invent 2017で発表されていたAuroraの新しい形態の動作モードです。

【速報】新しいDBサービスAurora Serverlessが発表されました! #reinvent

AuroraはSQL処理を行うDBインスタンス部分と高可用性な分散ストレージ部分が分離している構成をとっています。Aurora Serverlessでは通常DBインスタンス部分が起動しておらずストレージ部分だけがあります。そして一旦リクエストが来るとオンデマンドでDBインスタンス部分のコンテナが起動してSQLを処理します。負荷に応じて自動でスケールします。

特徴

Aurora Serverlessの特徴としては、以下のようなものがあります。

  • シンプル
  • インスタンスとキャパシティの管理が不要になります。
  • スケーラブル
  • クライアントとの接続を中断せずにコンピューティングとメモリを拡張します。
  • コスト効率が良い
  • 消費するコンピューティングリソースに対して1秒ごとの料金が発生します。
  • 高い可用性
  • 通常のAuroraと同様の6重化された自己修復を備えたストレージを基盤として構築されています。

ユースケース

Aurora Serverlessのユースケースとしては以下のようなものが想定されています。

  • あまり使用されないアプリケーション
  • 新規アプリケーション
  • 可変ワークロード
  • 予測不可能なワークロード
  • 開発/テストデータベース
  • マルチテナントアプリケーション

なお、Serverless Architecture専用のRDBMSではありませんのでご注意ください。

リージョン

利用可能なリージョンは以下の5リージョンです。東京もファーストリリースに入ってました。

  • 米国東部 (バージニア北部)
  • 米国東部 (オハイオ)
  • 米国西部 (オレゴン)
  • アジアパシフィック (東京)
  • EU (アイルランド)

料金

Aurora Serverlessではコンピューティングリソースが動的に変動するのでAurora Capacity Unit (ACU)という単位で料金が設定されています。1 ACUは2GBのメモリをそれに対応するCPUとネットワークを備えています。ACUのリソースは通常のAuroraと同等のものです。2ACUから最大256ACUまでスケールできます。

||米国東部 (バージニア北部)|米国東部 (オハイオ)|米国西部 (オレゴン)|アジアパシフィック (東京)|EU (アイルランド)| |---|---|---|---|---|---| |1 Aurora Capacity Unit (ACU)|$0.06 |$0.06 |$0.06 |$0.10 |$0.07 | |ストレージ料金(GB-月)|$0.10 |$0.10 |$0.10 |$0.12 |$0.11 | |I/O 料金(100 万リクエスト)|$0.20 |$0.20 |$0.20 |$0.24 |$0.22 |

注意

2018年8月10日現在では、以下の制限があるのでご注意ください。

  • Aurora ServerlessはMySQL 5.6互換でのみ利用可能です。
  • 接続ポートは3306です。
  • Aurora ServerlessにPublic IPを設定することはできません。Aurora Serverlessに接続するにはVPC内からでなければなりません。
  • Aurora ServerlessはVPN接続やVPC Peeringを介してアクセスできません。ただしAWS Direct Connect経由では接続可能です。
  • 以下のクラスタレベルのパラメータのみ設定可能です。
  • character_set_server
  • collation_server
  • lc_time_names
  • lower_case_table_names
  • time_zone
  • Aurora Serverlessでは以下の機能をサポートしていません。
  • S3バケットからのデータロード
  • Amazon Aurora MySQL DB クラスターからの Lambda 関数の呼び出し
  • 高度な監査の使用
  • Auroraレプリカ
  • Backtrack
  • Databaseクローン
  • IAM データベース認証
  • クロスリージョンリードレプリカ
  • MySQLのDBスナップショットからのリストア
  • Amazon S3からのバックアップファイルの移行
  • Secure Socket Layer(SSL)によるDBクラスタへの接続

やってみた

以下の環境を前提としています。

  • リージョン: 東京
  • クライアントOS: Amazon Linux 2
  • Aurora Serverless (MySQL 5.6互換)

RDSのManagement Consoleのインスタンスかクラスタの画面からデータベースの作成をクリックします。

Aurora ServerlessはMySQL5.6互換のAuroraが対象なので選択します。MySQL5.6互換の箇所にも"Aurora Serverless capacity is only available with this edition."との記載があります。

DB詳細の指定を行います。

Capacity typeという項目が増えています。ここでServerlessを選択します。ちなみに既存のAuroraはProvisionedのようです。

[詳細設定] の設定を行います。

まずはキャパシティーの設定です。ここでは、最小を2 ACU(4GB RAM)、最大を64 ACU(122GB RAM)を設定しました。64 ACU以上はメモリが正確に2GB単位でないようです。64 ACUは122GB、128 ACUは244GB、256 ACUは488GBとなっている模様です。

また、スケーリングの追加設定でアイドル状態に一時停止するかを設定できます。ここではデフォルトのまま5分で停止する設定にしています。

セットワーク & セキュリティは既存のAuroraと同様です。

追加設定を確認するとEncryptionが有効になっています。少なくともManagement Console上では暗号化が必須のようです。

上記設定でDBクラスタを作成します。

しばらくするとクラスタが作成されます。

アクセスしてみる

EC2のログインして、MySQLクライアント(実態はMariaDB)をインストールします。

$ sudo yum install -y mysql

CloudWatch上でServerlessDatabaseCapacityが0で落ち着いていることを確認してから、初回の起動速度を確認してみます。

すると、今回の環境では22秒ほどかかりました。一旦起動すると0.1秒以下となりました。

$ time echo '' | mysql -u awsuser -pmypassword -h serverless.cluster-a1b2c3d4e5f6.ap-northeast-1.rds.amazonaws.com

real	0m22.089s
user	0m0.005s
sys	0m0.000s
$ time echo '' | mysql -u awsuser -pmypassword -h serverless.cluster-a1b2c3d4e5f6.ap-northeast-1.rds.amazonaws.com

real	0m0.022s
user	0m0.005s
sys	0m0.000s

次にデータベースとテーブルを作成してみます。

MySQL [(none)]> CREATE DATABASE ServerlessDB;
Query OK, 1 row affected (0.01 sec)

MySQL [(none)]> use ServerlessDB;
Database changed
MySQL [ServerlessDB]> CREATE TABLE sample_table
    -> (col1 int,
    ->  col2 varchar(20),
    ->  col3 datetime);
Query OK, 0 rows affected (0.03 sec)

MySQL [ServerlessDB]> SHOW TABLES;
+------------------------+
| Tables_in_ServerlessDB |
+------------------------+
| sample_table           |
+------------------------+
1 row in set (0.00 sec)

MySQL [ServerlessDB]> SHOW CREATE TABLE sample_table;
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                          |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sample_table | CREATE TABLE `sample_table` (
  `col1` int(11) DEFAULT NULL,
  `col2` varchar(20) DEFAULT NULL,
  `col3` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

普通にデータの挿入も出来ます。

MySQL [ServerlessDB]> INSERT INTO sample_table
    -> (col1,
    ->  col2,
    ->  col3
    -> ) VALUES
    -> (1,
    ->  'Aurora Serverless',
    ->  now()
    -> );
Query OK, 1 row affected (0.03 sec)

MySQL [ServerlessDB]> commit;
Query OK, 0 rows affected (0.01 sec)

MySQL [ServerlessDB]> SELECT * FROM sample_table ;
+------+-------------------+---------------------+
| col1 | col2              | col3                |
+------+-------------------+---------------------+
|    1 | Aurora Serverless | 2018-08-10 03:09:54 |
+------+-------------------+---------------------+
1 row in set (0.00 sec)

ログインして使用する限りは普通のMySQLとして使用できます。

さいごに

コンピュートリソースを常時起動せずにオンデマンドで起動するというのはLambdaと同様の考え方で動いているので、極めてコスト効率が良いと思われます。初回の起動に少し時間がかかる点もLambdaににています。しかし初回起動時間がLambdaと比較すると現状では少し大きいのでユースケースを考えながら利用すると良いのではないでしょうか。