AWSの新しいCLI(1.0.x)ならマルチアカウントが捗る

新しいAWSのCLI(AWS Command Line Interface 1.0.0)、もう使ってますか?

従来のCLIに比べ、各種AWSに対してほぼ同じフィーリングで操作できることを目指し、コマンドライン体系が劇的に、それはもう劇的に整理されています。

【AWS発表】 新しいAWS コマンドラインインターフェース (CLI) が正式リリース から用法を引用しますと、

基本構文

$ aws SERVICE OPERATION [OPTIONS]

もうこの時点ですごく進化したことが感じ取れます、対応サービスも多い。

AVAILABLE SERVICES

[ autoscaling, cloudformation, cloudwatch, directconnect, dynamodb, ec2, elasticache, elasticbeanstalk, elastictranscoder, elb, help, iam, importexport, opsworks, rds, redshift, route53, s3, s3api, ses, sns, sqs, storagegateway, sts, support, swf ]

ヘルプが見たい

$ aws SERVICE help

OPERATIONOPTIONのリストも一律これで参照できます、ちなみにOPERATIONに当たるのはおなじみdescribe-*な感じです。

余談ですがaws help SERVICEの順でヘルプを掘れたほうが、Ruby系のツールっぽくてよかったなあ。

AWS CLI(1.0.0)のマルチアカウント管理

新しいCLIを使い始めて、私が特に気に入ったのがアカウント切り替えの方法です。
まさかAWSを使っていて、アカウント(Access_key)が一つしか無いという環境はありえないと思っていますが、これを切り替えて使う際どうしてましたか?

私はENVをまとめたファイルを使って、export/unsetなどを適当に処理する、またはCLIに直接キーを渡して区別するなどで切り替え対応していました。

新しいCLIでは最初からマルチアカウントが想定されており、専用のインターフェースが実装されています。

.aws/config にアカウント列挙

アカウントはプロファイルという単位でconfigファイルに集約して記述するようになっています。AWS_CONFIG_FILE環境変数で他のパスを指定することも一応できますが、アカウント切り替えだけなら集約してしまうほうが便利です。

[default]
aws_access_key_id = AK**************
aws_secret_access_key = ***************************************
region = ap-northeast-1

[profile opsrock]
aws_access_key_id = AK**************
aws_secret_access_key = ***************************************
region = ap-northeast-1

[profile other1]
aws_access_key_id = AK**************
aws_secret_access_key = ***************************************
region = ap-northeast-1

これらのプロファイルは全てのコマンドから--profileオプションでどれを利用するか指定できます。

--profileオプションを省略した場合に使われる設定は[default]ですが、AWS_DEFAULT_PROFILE環境変数で定義することができます。

ちなみにCLIが動作する際の大まかな優先順は以前と似ています。

  1. cliにオプションで渡したアクセスキー
  2. 環境変数に設定したキー
  3. configファイルのプロファイルにあるキー

新しいAWS CLIでプロファイルを切り替える

省略時(default)、opsrock指定時とother1指定時のRoute53HostedZoneを取得してみます。

$ aws route53 list-hosted-zones --output text
False  100
54  ********-****-***-****-***********  /hostedzone/********  higanlabos.com.
CONFIG  for research

$ aws route53 list-hosted-zones --output text --profile opsrock
False  100
2  ********-****-***-****-***********  /hostedzone/********  opsrockin.com.
CONFIG  for_develop_and_test


$ aws route53 list-hosted-zones --output text --profile other1
False  100
3  ********-****-***-****-***********  /hostedzone/********  niboshipro.com.
CONFIG for_api

見事に複数アカウントの切り替えができていますね、これは助かる!

AWS_DEFAULT_PROFILEの動作も見ておきましょう。

$ export AWS_DEFAULT_PROFILE=opsrock
$ aws route53 list-hosted-zones --output text
False  100
3  ********-****-***-****-***********  /hostedzone/********  niboshipro.com.
CONFIG for_api


$ unset AWS_DEFAULT_PROFILE
$ aws route53 list-hosted-zones --output text
False  100
2  ********-****-***-****-***********  /hostedzone/********  opsrockin.com.
CONFIG  for research

デフォルトの挙動を切り替えることが出来ました。

感想

AWSが思い切って体系を一新したことで、以前より直感的にCLIを使えるようになりました。
ソースコードもGithubで公開してユーザとの意見交換&プルリクエストも盛んで今後の拡張にも期待できますね。

Author Profile

sawanoboly@higanworks
sawanoboly@higanworksについて

HiganWorks LLCの代表、クラウドを利用したインターネットアプリケーションのプラットフォーム構築・運用の自動化をテーマに活動しています。OpsCode承認コントリビュータ等、サービスに関連するオープンソースコミュニティにも参加しています。