AWS CLI 1.0と新しいS3コマンド(sync)を試してみた
ども、大瀧です。
今朝かた、AWSを操作するPython版コマンドラインツール、AWS CLI(aws-cli)のバージョン1.0(Developer Previewを脱した最初の正式リリース)とaws s3コマンドの新しいサブコマンド群のリリースがありました。
早速、手元のMBAで試してみた様子をレポートします。
AWS CLIによるAWS環境の操作は、弊社阿部のシリーズで詳しくご紹介しています。こちらもどうぞ。
検証環境
- OS : Mac OS X 10.8.4(Mountain Lion)
- Python : バージョン 2.7.4(Homebrew)
AWS CLIのアップグレード
Pythonのパッケージ管理コマンド、pipで一発アップグレードできます。新規インストールの場合は、--upgradeオプションを省略してください。
$ easy_install pip $ pip install awscli --upgrade
$ aws --version aws-cli/1.0.0 Python/2.7.4 Darwin/12.4.1 $
バージョン1.0の表記になっていますね!
あとは、AWSにアクセスするためのアクセスキーおよびシークレットキーを事前に環境変数に設定しておきます。アクセスキー/シークレットキーは、AWS Management Consoleで作成・確認します。また、aws-cliにはシェル補完機能があるので、これも有効にします。
~/.bash_profileの例
(略) export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX export AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY complete -C aws_completer aws
aws s3コマンドの新サブコマンド群
Developer Previewのaws-cliでは、他のサービス向けコマンドと同様のサブコマンドのようにcreate-bucketと言った操作-対象という命名規則だったのが、ls、cpなどLinuxのシステムコマンドに寄せた命名に変更されました *1。
普段Linuxを使っているエンジニアには親和性の高い作りになったと思います。
S3バケットの参照(aws s3 ls)例
$ aws s3 ls CreationTime Bucket ------------ ------ 2013-08-05 00:44:45 cf-templates-1y1oq01n4kxp6-ap-northeast-1 2013-09-04 10:31:42 cm-s3sync-test $ aws s3 ls s3://cm-s3sync-test Bucket: cm-s3sync-test Prefix: LastWriteTime Length Name ------------- ------ ---- $
各サブコマンドの使い方は、サブコマンドのあとにhelpを付加し、manライクなマニュアルで確認できます。
$ aws s3 ls help LS() LS() NAME ls - DESCRIPTION List S3 objects and common prefixes under a prefix or all S3 buckets. SYNOPSIS ls <S3Path> or NONE OPTIONS None
ここで覚えておかなければならないのが、コマンドの書式にある<S3Path>の書き方です。<S3Path>は、S3のバケット/オブジェクトをコマンドで指定するための独特な記法で、以下の規則で記述します。
s3://<バケット名>/<プレフィックス>
<プレフィックス>は、バケット内のフォルダ名およびオブジェクト名を指定する際に使用します。
先ほど紹介したシェル補完を利用して、サブコマンド一覧を確認してみます。bashのシェル補完は、コマンドラインを途中まで入力し、<TAB>キーを2回押します。
$ aws s3 <TAB><TAB> cp ls mb mv rb rm sync
mbサブコマンドは、Make Bucketということでバケット作成、rbサブコマンドはRemove Bucketでバケット削除という感じです。
で、今回の変更で最も気になるのがsyncサブコマンドではないでしょうか。
syncサブコマンド
その名の通り、syncサブコマンドはaws-cliを実行するマシンのローカルのファイル/ディレクトリをS3と同期するために使用します。これまではs3cmdなどのツールで同期することができましたが、aws-cliでもサポートされたことになります。
$ aws s3 sync <ローカルのディレクトリ名> <S3path>
今回はお試しとして、LinuxディストリビューションのインストールISOイメージ(3ファイル合計9GB)をS3にアップロードしてみます。
$ ls -l total 17746952 -rw-r--r-- 1 ryuta staff 4353378304 3 6 2013 CentOS-6.4-x86_64-bin-DVD1.iso -rw-r--r-- 3 ryuta staff 3998007296 6 16 08:39 debian-7.1.0-amd64-DVD-1.iso -rw-r--r-- 1 ryuta staff 735051776 4 24 06:24 ubuntu-13.04-server-amd64.iso $
せっかくなので、前後にdateコマンドを挟んで時間を測ってみました。
$ date; aws s3 sync isos s3://cm-s3sync-test; date 2013年 9月 4日 水曜日 12時58分01秒 JST upload: isos/ubuntu-13.04-server-amd64.iso to s3://cm-s3sync-test/ubuntu-13.04-server-amd64.iso upload: isos/CentOS-6.4-x86_64-bin-DVD1.iso to s3://cm-s3sync-test/CentOS-6.4-x86_64-bin-DVD1.iso upload: isos/debian-7.1.0-amd64-DVD-1.iso to s3://cm-s3sync-test/debian-7.1.0-amd64-DVD-1.iso 2013年 9月 4日 水曜日 13時15分34秒 JST $
まとめ
Python版AWS CLIのバージョン1.0の様子をご紹介しました。今回はS3のコマンドでしたが、それ以外のコマンドについてもアップデートがあればまたブログでお伝えしたいと思います。
脚注
- 正確には、Developer Previewの頃も新オプションが動いていたようです ↩