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 MacやLinuxの場合は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
↓のようにAWSのCLIをインストールします。 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 ↓こんな感じのファイルを作成します。
$ 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(コピー元)の設定しかないですよ、と。 つまり、 ・自分のデフォルトの設定が東京(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は↓の値です。 ■ デフォルトでは同時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%でないものをカウントしたり、 こちらのエラーが出たら数十秒待ってからリトライするような実装にすると良いかもしれません。