okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

コマンドラインでRDSスナップショットのリージョン間コピーをやってみる

こんにちは@oko_changです。

前回はRDSをリージョン間でレプリケーション構成にしてみましたが、今回はこちらも少し前にサポートされたRDSスナップショットのリージョン間コピーを試してみたいと思います。

Amazon Web Services ブログ: 【AWS発表】 Amazon RDSのリージョン間スナップショットコピーが可能に

環境

今回はMac OSXにインストールされたRDS Command Line ToolkitAWS Command Line Interfaceの両方で試してみます。
それぞれのインストール方法は以下をご参考下さい。

RDS Command Line Toolkitの場合

バージョンを確認しておきます

$ rds --version
Relational Database Service CLI version 1.15.001 (API 2013-09-09)

コピーするスナップショット(rds:okochangdb-2013-11-09-03-50)を確認します

$ rds-describe-db-snapshots \
--region ap-northeast-1 \
--snapshot-type automated
DBSNAPSHOT  rds:okochangdb-2013-11-09-03-50  2013-11-09T03:50:46.386Z  okochangdb  2013-11-09T03:48:26.507Z  mysql  10  available  100  root  default:mysql-5-6  5.6.13  general-public-license  automated  vpc-0fc5a566

東京リージョンのスナップショットをシンガポールリージョンへコピーします

$ rds-copy-db-snapshot \
-s arn:aws:rds:ap-northeast-1:123456789123:snapshot:rds:okochangdb-2013-11-09-03-50 \
-t okochangdb-snapshot --region ap-southeast-1
DBSNAPSHOT  okochangdb-snapshot  okochangdb  2013-11-09T03:48:26.507Z  mysql  10  creating  0  ap-northeast-1  root  5.6.13  general-public-license  manual

コピーが開始されています

$ rds-describe-db-snapshots \
--region ap-southeast-1 \
--snapshot-type manual
DBSNAPSHOT  okochangdb-snapshot  okochangdb  2013-11-09T03:48:26.507Z  mysql  10  creating  1  ap-northeast-1  root  5.6.13  general-public-license  manual

コピーが完了すると以下のようにavailableになります

$ rds-describe-db-snapshots \
--region ap-southeast-1 \
--snapshot-type manual
DBSNAPSHOT  okochangdb-snapshot  2013-11-09T04:03:54.297Z  okochangdb  2013-11-09T03:48:26.507Z  mysql  10  available  100  ap-northeast-1  root  5.6.13  general-public-license  manual

AWS Command Line Interfaceの場合

バージョンを確認しておきます

$ aws --version
aws-cli/1.2.4 Python/2.7.1 Darwin/11.4.2

コピーするスナップショット(rds:okochangdb-2013-11-09-03-50)を確認します

$ aws rds describe-db-snapshots --snapshot-type automated --region ap-northeast-1
{
    "DBSnapshots": [
        {
            "Engine": "mysql", 
            "SnapshotCreateTime": "2013-11-09T03:50:46.386Z", 
            "AvailabilityZone": "ap-northeast-1a", 
            "MasterUsername": "root", 
            "LicenseModel": "general-public-license", 
            "Status": "available", 
            "VpcId": "vpc-0fc5a566", 
            "DBSnapshotIdentifier": "rds:okochangdb-2013-11-09-03-50", 
            "InstanceCreateTime": "2013-11-09T03:48:26.507Z", 
            "OptionGroupName": "default:mysql-5-6", 
            "AllocatedStorage": 10, 
            "EngineVersion": "5.6.13", 
            "SnapshotType": "automated", 
            "Port": 3306, 
            "DBInstanceIdentifier": "okochangdb"
        }
    ]
}

東京リージョンのスナップショットをシンガポールリージョンへコピーします

$ aws rds copy-db-snapshot \
--source-db-snapshot-identifier arn:aws:rds:ap-northeast-1:123456789123:snapshot:rds:okochangdb-2013-11-09-03-50 \
--target-db-snapshot-identifier okochangdb-hoge \
--region ap-southeast-1
{
    "DBSnapshot": {
        "Engine": "mysql", 
        "Status": "creating", 
        "MasterUsername": "root", 
        "LicenseModel": "general-public-license", 
        "DBSnapshotIdentifier": "okochangdb", 
        "InstanceCreateTime": "2013-11-09T03:48:26.507Z", 
        "AllocatedStorage": 10, 
        "EngineVersion": "5.6.13", 
        "SnapshotType": "manual", 
        "Port": 3306, 
        "DBInstanceIdentifier": "okochangdb"
    }
}

コピーが開始されています

$ aws rds describe-db-snapshots --region ap-southeast-1 --snapshot-type manual
{
    "DBSnapshots": [
        {
            "Engine": "mysql", 
            "Status": "creating", 
            "MasterUsername": "root", 
            "LicenseModel": "general-public-license", 
            "DBSnapshotIdentifier": "okochangdb", 
            "InstanceCreateTime": "2013-11-09T03:48:26.507Z", 
            "AllocatedStorage": 10, 
            "EngineVersion": "5.6.13", 
            "SnapshotType": "manual", 
            "Port": 3306, 
            "DBInstanceIdentifier": "okochangdb"
        }
    ]
}

コピーが完了すると以下のようにavailableになります

$ aws rds describe-db-snapshots --region ap-southeast-1 --snapshot-type manual{
    "DBSnapshots": [
        {
            "Engine": "mysql", 
            "SnapshotCreateTime": "2013-11-09T04:36:18.840Z", 
            "MasterUsername": "root", 
            "LicenseModel": "general-public-license", 
            "Status": "available", 
            "DBSnapshotIdentifier": "okochangdb", 
            "InstanceCreateTime": "2013-11-09T03:48:26.507Z", 
            "AllocatedStorage": 10, 
            "EngineVersion": "5.6.13", 
            "SnapshotType": "manual", 
            "Port": 3306, 
            "DBInstanceIdentifier": "okochangdb"
        }
    ]
}

まとめ

それぞれのコマンドを実行するだけなので簡単にコピーが出来ます。
Management Consoleでも簡単ですが、コマンドラインツールでの実行方法を覚えておくとスクリプトとかを作るときに楽ですね。
ポイントはコピー元のスナップショットはARNで指定するってところでしょうか。
今回のARNは以下のようなルールになっています。

  • arn:aws:rds:リージョン:アカウントID:snapshot:スナップショット名