今更な話題ではありますが、Pythonで作られたAWS Command Line Interface(aws-cli: 従来のJavaで動いていたEC2 API Toolsとは別物)を入れて動かしてみました。メモ的な感じで残しておきます。
aws-cliは、pipで管理できるし、これ1つで複数のAWSサービスを扱うことが出来て、かつレスポンスもJSONとかで返ってくるので、なかなか便利です。
$ aws autoscaling ec2 importexport sns cloudformation elasticache opsworks sqs cloudsearch elasticbeanstalk rds storagegateway cloudwatch elastictranscoder redshift sts datapipeline elb route53 support directconnect emr s3 swf dynamodb iam ses
サブコマンド一覧は↑のような感じで、メインどころのAWSサービスはサポートされています。(公式ツールなので、今後も拡充されていくと思います。)
尚、今から説明することは、大体は以下のAWS公式のドキュメントに記載されていまので、こちらを読んでもらってもいいかと思います。(英語)
インストール
僕は、手元のUbuntuさんにインストールしてみました。
$ pip プログラム 'pip' はまだインストールされていません。 次のように入力することでインストールできます: sudo apt-get install python-pip
pipコマンドを打って、↑のような感じで出力されたら、まだpip自体が入っていないので、、、
$ sudo apt-get install python-pip
書かれている通りに従って、"python-pip"をインストールしてください。その後、
$ sudo pip install awscli
上記のような感じで、今回お目当ての"awscli"をインストールします。
設定
Access Credentials (Access Key) を、以下のURLとかで確認した上で、
[default] aws_access_key_id=(Access Key ID) aws_secret_access_key=(Secret Access Key) region=ap-northeast-1
こんな感じで、1ファイルに記載して、
$ export AWS_CONFIG_FILE=~/config/awscli.conf
↑みたいな感じで、"AWS_CONFIG_FILE"の環境変数に食わせてやればOKです。
実行してみる
上記の設定まで終わると、あとは普通に実行できると思います。例えば以下のコマンド。
$ aws ec2 describe-regions { "Regions": [ { "Endpoint": "ec2.eu-west-1.amazonaws.com", "RegionName": "eu-west-1" }, { "Endpoint": "ec2.sa-east-1.amazonaws.com", "RegionName": "sa-east-1" }, { "Endpoint": "ec2.us-east-1.amazonaws.com", "RegionName": "us-east-1" }, { "Endpoint": "ec2.ap-northeast-1.amazonaws.com", "RegionName": "ap-northeast-1" }, { "Endpoint": "ec2.us-west-2.amazonaws.com", "RegionName": "us-west-2" }, { "Endpoint": "ec2.us-west-1.amazonaws.com", "RegionName": "us-west-1" }, { "Endpoint": "ec2.ap-southeast-1.amazonaws.com", "RegionName": "ap-southeast-1" }, { "Endpoint": "ec2.ap-southeast-2.amazonaws.com", "RegionName": "ap-southeast-2" } ] }
こんな感じ。
コマンドの入力補完
とりあえず、このコマンドの入力補完機能は有効にしておきましょう。便利。
$ complete -C aws_completer aws
↑のコマンド(bash用)を実行すると、入力時にタブを押すことで補完が効いたり、コマンド候補が出るようになります。
便利なので必要に応じて、".bash_profile"とかにも書いておいて、最初に読み込まれるようにしておきましょう。
ちなみに、
tcsh
$ complete aws 'p/*/`aws_completer`/'
zsh
$ source aws_zsh_completer.sh
出力フォーマットの変更
ちなみにhelpを読むと、出力フォーマットは、以下3種類から選べるようです。
- json
- text
- table
デフォルトだとJSONで返ってきますね。(さっき↑で実行したもの)
出力フォーマットの変更は、"--output"オプションを使うみたいです。
text
$ aws ec2 describe-regions --output text ec2.eu-west-1.amazonaws.com eu-west-1 ec2.sa-east-1.amazonaws.com sa-east-1 ec2.us-east-1.amazonaws.com us-east-1 ec2.ap-northeast-1.amazonaws.com ap-northeast-1 ec2.us-west-2.amazonaws.com us-west-2 ec2.us-west-1.amazonaws.com us-west-1 ec2.ap-southeast-1.amazonaws.com ap-southeast-1 ec2.ap-southeast-2.amazonaws.com ap-southeast-2
従来のEC2 API Toolsっぽい感じですw
table
$ aws ec2 describe-regions --output table ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2.eu-west-1.amazonaws.com | eu-west-1 || || ec2.sa-east-1.amazonaws.com | sa-east-1 || || ec2.us-east-1.amazonaws.com | us-east-1 || || ec2.ap-northeast-1.amazonaws.com | ap-northeast-1 || || ec2.us-west-2.amazonaws.com | us-west-2 || || ec2.us-west-1.amazonaws.com | us-west-1 || || ec2.ap-southeast-1.amazonaws.com | ap-southeast-1 || || ec2.ap-southeast-2.amazonaws.com | ap-southeast-2 || |+-----------------------------------+------------------+|
リージョン(Region)の変更
ドキュメントを読む限り、以下の3パターンがあるみたいです。
- AWS_CONFIG_FILE環境変数で指定した設定ファイルの"region"に記載(↑の設定で書いたやり方)
- AWS_DEFAULT_REGION環境変数に指定
- awsコマンドで"--region"オプションの指定(↓みたいな感じ)
$ aws ec2 describe-availability-zones --region us-west-1 { "AvailabilityZones": [ { "State": "available", "RegionName": "us-west-1", "Messages": [], "ZoneName": "us-west-1a" }, { "State": "available", "RegionName": "us-west-1", "Messages": [], "ZoneName": "us-west-1b" }, { "State": "available", "RegionName": "us-west-1", "Messages": [], "ZoneName": "us-west-1c" } ] }
プロファイルの使用
設定ファイルにプロファイルを定義しておくと、コマンドの実行時や環境変数で切り替えることができるみたいです。
[default] aws_access_key_id=(Access Key ID) aws_secret_access_key=(Secret Access Key) region=ap-northeast-1 [development] aws_access_key_id=xxxxxxxxxx aws_secret_access_key=xxxxxxxxxxxxxxxxxxx region=ap-northeast-1 [staging] aws_access_key_id=yyyyyyyyyy aws_secret_access_key=yyyyyyyyyyyyyyyyyyyy region=us-west-1 [production] aws_access_key_id=zzzzzzzzzz aws_secret_access_key=zzzzzzzzzzzzzzzzzzzz region=us-east-1
使い方というか指定方法は、、、
- AWS_DEFAULT_PROFILE環境変数に設定
- "--profile"オプションで定義したプロファイル名を指定する
とかで制御できるみたいっす。
返ってきたJSONを整形したり、必要なものだけ抽出したり
公式ドキュメントにも書かれていますが、"jq"を使うと必要なものだけ抽出できたり、ハイライト表示してくれたりで、なかなかいい感じです。
例えば、"aws ec2 describe-regions"のRegionNameに対するValueだけとる場合は、以下のような感じです。
$ aws ec2 describe-regions | jq '.Regions[].RegionName' "eu-west-1" "sa-east-1" "us-east-1" "ap-northeast-1" "us-west-2" "us-west-1" "ap-southeast-1" "ap-southeast-2"
現在、東京リージョンで稼働中(available)のZoneの一覧とか。
$ aws ec2 describe-availability-zones --region ap-northeast-1 | jq '.AvailabilityZones[] | select(.State == "available") | .ZoneName' "ap-northeast-1a" "ap-northeast-1b" "ap-northeast-1c"
と、こんな感じで色々欲しい値を引っこ抜けます。"jq"の詳しい使い方は、以下のマニュアルまで。
最後に、困ったときは
ヘルプを読みましょー。
$ aws help
とか。以下のようにサブコマンドごとにも用意されています。
$ aws ec2 help
とかとか。
$ aws ec2 describe-regions help
とかとかとか。
それでは! =͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́
参考リンク
まとめ
クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)
- 作者: 並河祐貴,安達輝雄,ITpro/日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2009/11/05
- メディア: 単行本
- 購入: 4人 クリック: 372回
- この商品を含むブログ (18件) を見る