AWS Management ConsoleのようなGUIは素晴しいですが、コマンドラインの表現力に勝るものはありません!
本日、AWS Command Line Interface (CLI)をリリースいたしました。AWS CLIは、30以上あるAWSサービスに対して、単一の、統一されたインターフェースを提供します。 CLIをダウンロードし、設定を終えれば、Linux、OS X、Windowsのコマンドラインから、Amazon EC2、Amazon S3、Elastic Beanstalk、Simple Workflow Serive、および20の他のサービス(完全なリストはこちら)を操作することができるようになります。
ダウンロードと設定
Getting Startedのページに、AWS CLIのダウンロードと設定に関する情報があります。
Linux、OS Xの場合は、Python(2.6.xから3.3.xまでのいずれかのバージョンである必要があります。)がインストールされている必要がありますが、準備するのはそれだけです。後は、easy_installやpip、Windows MSIを使って、CLIをインストールしてください。
環境変数もしくは、設定ファイルを使って、CLI用のAWSのクレデンシャルを設定することができます。EC2インスタンス上でCLIを実行する場合は、IAM roleを使うこともできます。
オススメは、コマンドラインから実行できるAWSの操作を完全に制御できる権限を持ったIAMユーザー(私はawscliというユーザーを作っています。)を作成する方法です。テストの目的のために、私は、Administrator Accessポリシーテンプレートを使いましたが、実際には、より制限されたテンプレートを使いましょう。
コマンドの実行
AWSのCLIコマンドは次の形式を取ります。
$ aws SERVICE OPERATION [OPTIONS]
SERVICE にはサービス名を指定します。(S3はサービス名以外にs3apiも指定できます) 例えば、s3を指定すれば、強力な一連のファイル操作コマンドを呼びだすことができます。
OPERATION はdescribe-instances、list-bucketsといった、AWS APIの機能に対応した名前を指定します。 helpを指定すると、各サービスで利用可能なOPERATIONの一覧を確認することができます。
$ aws ec2 help
各操作の結果は、デフォルトでは、JSON形式で返されます。 --output text and --output tableを指定することで、出力形式をテキストやテーブルにすることもできます。それぞれの出力結果は次のようになります。



jq(JSON Query)というツールを使うと、JSONデータを簡単に処理することができます。例えば、Redditの最近の投稿にもあった、EC2インスタンスのタグデータの抽出は、AWS CLIとjqを使うと、次のように行えます。
$ aws ec2 describe-instances --output json | jq .Reservations[].Instances[].Tags[]{"Key": "Name","Value": "DevServer"}
S3のファイル操作
AWS CLIはS3による一連のファイル操作もサポートしています。CLIから、一覧表示(ls)、コピー (cp)、移動 (mv)、および、ファイル (S3 objects)の同期 (sync) を行うことができます。また、S3バケットの作成 (mb) および 削除 (rb)もできます。いくつかの例を紹介します。
$ aws s3 mb s3://jbarr-book-code
make_bucket: s3://jbarr-book-code/$ aws s3 sync . s3://jbarr-book-code
upload: CVS/Entries to s3://jbarr-book-code/CVS/Entries
upload: .cvsignore to s3://jbarr-book-code/.cvsignore
upload: Makefile to s3://jbarr-book-code/Makefile
upload: CVS/Repository to s3://jbarr-book-code/CVS/Repository
upload: LICENSE.txt to s3://jbarr-book-code/LICENSE.txt
upload: README to s3://jbarr-book-code/README
upload: NOTICE.txt to s3://jbarr-book-code/NOTICE.txt
upload: TODO.txt to s3://jbarr-book-code/TODO.txt
upload: aws.dot to s3://jbarr-book-code/aws.dot
upload: CVS/Root to s3://jbarr-book-code/CVS/Root
upload: aws_meta.dot to s3://jbarr-book-code/aws_meta.dot
upload: aws_meta.php to s3://jbarr-book-code/aws_meta.php
...
$ aws s3 ls s3://jbarr-book-code
Bucket: jbarr-book-code
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE CVS/
PRE magpierss-0.72/
2013-09-03 20:53:54 63 .cvsignore
2013-09-03 20:53:55 9189 LICENSE.txt
2013-09-03 20:53:55 401 Makefile
2013-09-03 20:53:55 406 NOTICE.txt
2013-09-03 20:53:55 470 README
2013-09-03 20:53:55 2190 TODO.txt
2013-09-03 20:53:55 5941 aws.dot
2013-09-03 20:53:55 763110 aws_meta.dot
...
$ touch ch4*.php$ aws s3 sync . s3://jbarr-book-code
upload: ch4_simple_crawl.php to
s3://jbarr-book-code/ch4_simple_crawl.php
upload: ch4_ec2_setup.php to s3://jbarr-book-code/ch4_ec2_setup.php
大容量のファイルや一度に複数のファイルをAmazon S3にアップロードするような場合は、自動的に並列化されたマルチパートアップロードを使用します。また、cp、mv、rmコマンドを実行する際、--recursiveオプションを指定することで、指定のディレクトリだけでなく、その配下の全てのサブディレクトリも処理することができます。
知っておくと便利なオプション
いくつかのAWSコマンドは、大量のテキストまたはJSONコンテンツをパラメータとして必要とします。この場合、次のように、パラメータの値をファイルやWebでアクセス可能な場所に配置し、参照することができます。
$ aws ec2 authorize-security-group-ingress --group-name MySecurityGroup --ip-permissions file://ip_perms.json$ aws ec2 authorize-security-group-ingress --group-name MySecurityGroup --ip-permissions http://mybucket.s3.amazonaws.com/ip_perms.json
ソースコード
AWS CLIはオープンソースプロジェクトであり、コードはGitHubのhttp://github.com/aws/aws-cliから取得可能です。必要に応じて、ソースコードを閲覧、提案の入力、問題提起、Pull Requestの送信を行えます。