AWS CLI 1.0と新しいS3コマンド(sync)を試してみた

AWS

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

ども、大瀧です。 今朝かた、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と言った操作-対象という命名規則だったのが、lscpなど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のコマンドでしたが、それ以外のコマンドについてもアップデートがあればまたブログでお伝えしたいと思います。

脚注

  1. 正確には、Developer Previewの頃も新オプションが動いていたようです