読者です 読者をやめる 読者になる 読者になる

capistrano-pit-aws って gem を作った

最近、capistrano 経由で AWS の API を叩く遊びをしているのだけど、
deploy.rb の中で

set :aws_access_key_id, ...
set :aws_secret_access_key, ...

とかって書くのがイヤになった。
アクセスキーをコミットして何処かに置くというのが気持ち悪いし、誰かに見せるサンプルを作るときにフィルタをしなくちゃならない。

で、いろいろぐぐってみたのだけど、多くの人がとっている手は環境変数を使うというものだった。
つまり、.bashrc とかとかで

export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...

としておいて、deploy.rb では

set :aws_access_key_id, ENV['AWS_ACCESS_KEY_ID']
set :aws_secret_access_key, ENV['AWS_SECRET_ACCESS_KEY']

とする方法だ。これは確かに美しい。余計なものをコミットせずに済むし、誰かに見せるときも安心してそのまま見せることができる。
やった。


…と思ったのだけど、環境変数にセットするということは、僕がシェルで実行するすべてのコマンド
AWS のアクセスキーが渡されるということだ。
僕がオープンソースプロダクトの作者だったら、さり気なく環境変数にアクセスしてその結果を 2ch にポストするコードを
プロダクトのどこかに仕掛けたくなってしまう(やらないけどね)。

いくらなんでも環境変数は…というわけで、capistrano-pit-aws というモジュールを作ってみました。
どう考えても自分用です。
Pit というライブラリをご存じない方はぐぐって調べていただくと良いかと思います。
動きとしては AWS のふたつのアクセスキーを Pit に管理させる、というそれだけのレシピです。
deploy.rb の中で

require 'capistrano/pit/aws'

とすると :aws_access_key_id と :aws_secret_access_key というふたつの変数が自動的にセットされます。
(存在しない場合は Pit により、$EDITOR が起動されます)

ちなみに、誤解しないようにお伝えしておくと、Pit は別にセキュアに値を保存するわけではないので、
~/.pit/ 以下を覗きこむと保存した値がそのまま読めます。
単に deploy.rb や環境変数にアクセスキーを置かずに済む、という程度のものですので、ご注意くださいな。