話題の記事

【速報】Amazon Auroraでも一時的な停止がサポートされました

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

2018年9月21日 15:35 初版 2018年9月25日 10:30 料金、注意事項について追記 2018年9月25日 11:50 Management Consoleの操作について追記

大栗です。

AWS CLIのコマンドリファレンスを見ていたら見慣れぬコマンドが増えていたと思ったのですが、Auroraクラスタの停止ができるようだったので試してみました。

Auroraクラスタの停止

Amazon RDSではAurora以外のDBエンジンでは一時的な停止をサポートしています。しかしAuroraについては一時的な停止ができず開発/検証環境で可動していない夜間などの利用費が無駄になっていました。

[速報] RDSインスタンスの起動/停止

今までもDBインスタンスだけを削除してDBクラスタ(ストレージ)だけ残すことで同様のことができましたが、停止を行うことで簡単に使用していない時の料金を削減できるようになります。

停止中の料金

停止中はクラスタストレージ、手動スナップショット、自動バックアップストレージのみ料金は発生して、DBインスタンスには料金が発生しません。

注意事項

Auroraには以下の4種類がありますが、Aurora Serverlessは停止をサポートしていない模様1です。なお、本日Aurora MySQL 1.18.0がリリースされましたが、旧バージョンでも停止可能でした。

  • Aurora MySQL 1系 (MySQL 5.6互換) <- 停止をサポート
  • Aurora MySQL 2系 (MySQL 5.7互換) <- 停止をサポート
  • Aurora Serverless (MySQL 5.6互換) <- 停止をサポートせず
  • Aurora PostgreSQL <- 停止をサポート

DBクラスタを停止し続けられる期間は7日間です。DBクラスタは7日後に自動的に起動します。

DBクラスタの停止中は構成の変更やDBインスタンス/DBクラスタの削除を行えません。

DBクラスタの停止中は自動バックアップが取得されません。またバックアップの保持期間も伸びません。そのため停止の長さによってはバックアップが無くなることがあるのでご注意ください。

やってみた

Auroraの停止/再開を行ってみます。ここではAurora MySQL 1.14.4を前提としています。

AWS CLI版

AWS CLIは最新のバージョン1.16.18とします。古いバージョンのAWS CLIにはコマンドがないのでご注意ください。

$ aws --version
aws-cli/1.16.18 Python/2.7.10 Darwin/17.7.0 botocore/1.12.8

クラスタ名がcluster-1-14-4で作成しています。

DBインスタンスは2台起動しています。

クラスタを指定してstop-db-clusterコマンドを実行します。

$ aws rds stop-db-cluster --db-cluster-identifier cluster-1-14-4
{
    "DBCluster": {
        "MasterUsername": "awsuser",
        "ReaderEndpoint": "cluster-1-14-4.cluster-ro-abcdefghijkl.ap-northeast-1.rds.amazonaws.com",
        "ReadReplicaIdentifiers": [],
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-12345678"
            }
        ],
        "HostedZoneId": "ABCDEFGHIJKLMN",
        "EngineMode": "provisioned",
        "Status": "available",
        "MultiAZ": true,
        "LatestRestorableTime": "2018-09-21T05:37:28.179Z",
        "PreferredBackupWindow": "19:31-20:01",
        "DBSubnetGroup": "default",
        "AllocatedStorage": 1,
        "BackupRetentionPeriod": 1,
        "PreferredMaintenanceWindow": "sat:18:28-sat:18:58",
        "Engine": "aurora",
        "Endpoint": "cluster-1-14-4.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com",
        "EarliestRestorableTime": "2018-09-21T04:40:27.352Z",
        "IAMDatabaseAuthenticationEnabled": false,
        "ClusterCreateTime": "2018-09-21T04:39:52.693Z",
        "EngineVersion": "5.6.10a",
        "DBClusterIdentifier": "cluster-1-14-4",
        "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "DBClusterMembers": [
            {
                "IsClusterWriter": true,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "DBInstanceIdentifier": "db-1-14-4"
            },
            {
                "IsClusterWriter": false,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "DBInstanceIdentifier": "db-14-4-b"
            }
        ],
        "DBClusterArn": "arn:aws:rds:ap-northeast-1:123456789012:cluster:cluster-1-14-4",
        "StorageEncrypted": false,
        "AssociatedRoles": [],
        "DBClusterParameterGroup": "default.aurora5.6",
        "AvailabilityZones": [
            "ap-northeast-1d",
            "ap-northeast-1a",
            "ap-northeast-1c"
        ],
        "Port": 3306
    }
}

RDSのコンソールを確認すると以下のように停止し始めます。

DBクラスタはstoppingと表示されています。

DBクラスタは停止中と表示されています。

しばらくすると完全に停止します。通常のRDSではレプリカやMulti-AZ構成の場合は停止できませんが、Auroraでは問題なく停止できるようです。

Auroraを再開します。再開はstart-db-clusterコマンドを実行します。

$ aws rds start-db-cluster --db-cluster-identifier cluster-1-14-4
{
    "DBCluster": {
        "MasterUsername": "awsuser",
        "ReaderEndpoint": "cluster-1-14-4.cluster-ro-abcdefghijkl.ap-northeast-1.rds.amazonaws.com",
        "ReadReplicaIdentifiers": [],
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-12345678"
            }
        ],
        "HostedZoneId": "ABCDEFGHIJKLMN",
        "EngineMode": "provisioned",
        "Status": "stopped",
        "MultiAZ": true,
        "LatestRestorableTime": "2018-09-21T05:41:42.645Z",
        "PreferredBackupWindow": "19:31-20:01",
        "DBSubnetGroup": "default",
        "AllocatedStorage": 1,
        "BackupRetentionPeriod": 1,
        "PreferredMaintenanceWindow": "sat:18:28-sat:18:58",
        "Engine": "aurora",
        "Endpoint": "cluster-1-14-4.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com",
        "EarliestRestorableTime": "2018-09-21T04:40:27.352Z",
        "IAMDatabaseAuthenticationEnabled": false,
        "ClusterCreateTime": "2018-09-21T04:39:52.693Z",
        "EngineVersion": "5.6.10a",
        "DBClusterIdentifier": "cluster-1-14-4",
        "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "DBClusterMembers": [
            {
                "IsClusterWriter": true,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "DBInstanceIdentifier": "db-1-14-4"
            },
            {
                "IsClusterWriter": false,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "DBInstanceIdentifier": "db-14-4-b"
            }
        ],
        "DBClusterArn": "arn:aws:rds:ap-northeast-1:123456789012:cluster:cluster-1-14-4",
        "StorageEncrypted": false,
        "AssociatedRoles": [],
        "DBClusterParameterGroup": "default.aurora5.6",
        "AvailabilityZones": [
            "ap-northeast-1d",
            "ap-northeast-1a",
            "ap-northeast-1c"
        ],
        "Port": 3306
    }
}

Auroraクラスタが起動し始めます。

DBインスタンスはWriter(マスタ)から先に起動するようです。

暫く待つと起動が完了しました。

ログインしてみます。特に問題ありません。

$ mysql -u awsuser -pmypassword -h db-1-14-4.abcdefghijkl.ap-northeast-1.rds.amazonaws.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MySQL [(none)]> select @@aurora_version;
+------------------+
| @@aurora_version |
+------------------+
| 1.14.4           |
+------------------+
1 row in set (0.01 sec)

ちなみにAurora Serverlessで実行しようとすると以下のようなエラーメッセージが出力されます。

$ aws rds stop-db-cluster --db-cluster-identifier serverless

An error occurred (InvalidDBClusterStateFault) when calling the StopDBCluster operation: Stop-db-cluster is not supported for these configurations

Management Console版

こちらではManagement ConsoleからDBクラスタの停止/起動を実施してみます。

なお、東京リージョンのManagement Consoleでは機能がデプロイされていないようだったのでバージニアリージョンで実施しています。

クラスタ名がcluster-1-14-4で作成しています。

クラスタを選択してクラスターアクションをクリックすると停止というアクションが増えています。これをクリックします。

停止の確認を求められます。ここでデータベースの停止をクリックして停止します。

DBクラスタが停止中となります。

DBインスタンスを確認すると、こちらも停止中となります。

次はDBクラスタを再開してみます。

まずDBインスタンスを選択してインスタンスの操作をクリックすると開始があるのでクリックしてみます。

DBインスタンス側で開始しようとすると、DBクラスタを起動する必要がある旨のメッセージが表示されます。

改めてDBクラスタを選択してクラスターアクションをクリックすると開始があるのでクリックします。

DBクラスタが開始し始めます。

DVインスタンスも開始し始めました。

Management ConsoleではDBクラスタ側で停止/開始を行う必要があります。

さいごに

開発/検証環境では24*365でDBが稼働する必要がない場合が多いです。しかしAuroraでは手軽に夜間停止などを行えませんでした。今回のアップデートでサービスの非稼働時間帯の料金の削減が図れるのではないでしょうか?


  1. Aurora Serverlesに対してstop-db-clusterコマンドを実行すると、コマンドをサポートしていない旨のエラーメッセージが表示されます。