aws-cliのラッパーモジュールを作りました - AWS::CLIWrapper

先日公開されたaws-cliのPerlのラッパーモジュールを作りました。


PerlでAWS EC2のAPIを叩くにはNet::Amazon::EC2が便利です。

一昔前に比べると多くのAPIに対応しているし、パッチ(pullreq)を送るとすぐにお返事が返ってくるのでいい感じです。

が、VPC関連のAPIサポートが乏しく、ちくちくパッチを送るのもしんどいなぁと思っていたところ、先日公開されたAWS本家のaws-cliが、

  • Pythonで書かれている
    • 既存のec2-*コマンドはJavaなんで起動時に時間がかかる
  • レスポンスがJSONなのでparseしやすい
  • awsコマンドだけでEC2ã‚„ELBなどいろんなサービスに対応してる

と、いい感じだったんで週末サクッとラッパーモジュールを書いてみた次第です。

こんな感じ:

use AWS::CLIWrapper;

my $aws = AWS::CLIWrapper->new(
    region => 'us-west-1',
   );

my $res = $aws->ec2('describe-instances');

if ($res) {
    for my $rs ( @{ $res->{reservationSet} }) {
        for my $is (@{ $rs->{instancesSet} }) {
            print $is->{instanceId},"\n";
        }
    }
} else {
    warn $AWS::CLIWrapper::Error->{Code};
    warn $AWS::CLIWrapper::Error->{Message};
}

ほぼaws-cliのコマンドにまるなげで、やってることは

  • JSONã‚’PerlのHashRefにして返す
  • エラーだったら undef 返して $AWS::CLIWrapper::Error に詰めて返す

ぐらいなんですが、生でコマンド実行するよりかは楽だと思います。


ちなみに、aws-cli(0.4.5)でregion指定の環境変数 AWS_DEFAULT_REGION が効かないのは、

の2行パッチで治るので、/usr/{,local/}lib/python2.6/site-packages/awscli/clidriver.py とかにある clidriver.py をいじればいいと思います。

Enjoy!