AWS CLIを使ったEBS Snapshotの別リージョンへのコピー

AWS CLIは先日↓のように各サービス統一のインターフェースなバージョンが正式リリースされましたが、 【AWS発表】 新しいAWS コマンドラインインターフェース (CLI) が正式リリース たまたまEBSのスナップショットをたくさんコピーする機会があったので使ってみました。     ■ 前準備   Windowsだとインストールはとても簡単で、↓からmsiを落としてきて入れるだけです。 http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html#install-on-windows スクリーンショット 2013-10-01 15.56.32   MacLinuxの場合はeasy_install か pip を使います。 僕のMacの場合は↓こんな感じだったのでeasy_installで。

$ python --version
Python 2.7.2
$ easy_install --help

Global options:
  --verbose (-v)  run verbosely (default)
〜略〜
$ pip --help
-bash: pip: command not found

  ↓に従って入れていく感じ http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html#installing-prerequisites

$ cd setuptools-1.1.6
$ sudo python ez_setup.py
Password:
Extracting in /tmp/tmpKYbSq7
Now working in /tmp/tmpKYbSq7/setuptools-1.1.6
Installing Setuptools
〜略〜
Installed /Library/Python/2.7/site-packages/setuptools-1.1.6-py2.7.egg
Processing dependencies for setuptools==1.1.6
Finished processing dependencies for setuptools==1.1.6

  ↓のようにAWSCLIをインストールします。 http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html#installing-with-easy-install

$ sudo easy_install awscli
Searching for awscli
Reading http://pypi.python.org/simple/awscli/
Best match: awscli 1.1.0
〜略〜
Installed /Library/Python/2.7/site-packages/ply-3.4-py2.7.egg
Finished processing dependencies for awscli

    ■ アクセスキー&リージョンの設定   ↓に従う形で。設定するクレデンシャルの値はmanagement consoleの右上の自分の名前の所をビヨっとやって"Security Credentials"から。 http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#d0e670 スクリーンショット 2013-10-01 16.26.56 ↓こんな感じのファイルを作成します。

$ cat .aws/config
[default]
aws_access_key_id = <アクセスキー>
aws_secret_access_key = <シークレットキー>
region = ap-northeast-1

    ■ Snapshotのコピー   ↓EBSのSnapshotのコピーはAWS CLI的にはEC2のところ。 http://docs.aws.amazon.com/cli/latest/reference/ec2/copy-snapshot.html   ↓みてみるとsource(コピー元)の設定しかないですよ、と。 スクリーンショット 2013-10-01 16.11.00   つまり、 ・自分のデフォルトの設定が東京(ap-northeast-1)になってて、 ・コピー先がシドニー(ap-southeast-2)だった場合、   以下のように ・--regionでコピー先のリージョンを指定して、 ・source(コピー元)のリージョン(東京。ap-northeast-1)と ・source(コピー元)のスナップショットのIDを指定してやる、と。

aws --region ap-southeast-2 ec2 copy-snapshot --source-region ap-northeast-1 --source-snapshot-id snap-xxx001

    ■ コピー状況の確認   AWS CLIでは ec2 describe-snapshots というコマンドでコピー状況をトレースできます。 コピーの際に戻り値でコピー先のスナップショットIDが取得できるのでコレを使います。

$ aws --region ap-southeast-2 ec2 copy-snapshot --source-region ap-northeast-1 --source-snapshot-id snap-99xxx
{
    "SnapshotId": "コピー先のスナップショットID"
}

  ↓のようにコピー先のスナップショットIDを指定して。(コレやらないと自分以外のスナップショットも含めて非常に沢山の結果が返ってきます。。)

$ aws --region ap-southeast-2 ec2 describe-snapshots --snapshot-ids コピー先のスナップショットID
{
    "Snapshots": [
        {
            "Description": null,
            "VolumeId": "vol-9999f99",
            "State": "pending",
            "VolumeSize": 8,
            "Progress": "88%",
            "StartTime": "2013-10-01T07:42:54.000Z",
            "SnapshotId": "snap-xxx999",
            "OwnerId": "オーナーID"
        }
    ]
}

  複数件一気に状況を取得したい場合は自分のスナップショットだけを指定(--owner-ids)を使ったり。

 aws --region ap-southeast-2 ec2 describe-snapshots --owner-ids オーナーID
{
    "Snapshots": [
        {
            "Description": null,
            "VolumeId": "vol-bbbbbbbb",
            "State": "completed",
            "VolumeSize": 8,
            "Progress": "100%",
            "StartTime": "2013-10-01T06:34:56.000Z",
            "SnapshotId": "snap-ccccccc",
            "OwnerId": <オーナーID>
        },
        {
            "Description": null,
            "VolumeId": "vol-aaaaaa2",
            "State": "completed",
            "VolumeSize": 8,
            "Progress": "100%",
            "StartTime": "2013-10-01T06:35:04.000Z",
            "SnapshotId": "snap-dddddd8",
            "OwnerId": <オーナーID>
        }
    ]
}

オーナーIDは↓の値です。 スクリーンショット 2013-10-01 16.51.06     ■ デフォルトでは同時5スナップショットコピーまでの制限がある   あんまりガツガツとコピーをすると↓のように怒られます。

A client error (ResourceLimitExceeded) occurred: Too many snapshot copies in progress. The limit is 5 for this destination region.

  上記 ec2 describe-snapshots でprogressが100%でないものをカウントしたり、 こちらのエラーが出たら数十秒待ってからリトライするような実装にすると良いかもしれません。    

Amazon Web Services クラウドデザインパターン 設計ガイド
玉川 憲 片山 暁雄 鈴木 宏康
日経BP
売り上げランキング: 16,920