はじめに

4月から新社会人になり研修終了後インフラを担当する部署へ配属され、すぐに使う機会があったツールで「最高に便利!!」と感じた2つを簡単にまとめました。
使用PC:Mac ※bundleインストール済み

direnv

各ディレクトリに環境変数を定義し、作業を行ないたいディレクトリになった時に環境変数が有効になり、そのディレクトリから抜けると無効になるツールです。 なので、プロジェクト固有の環境変数を使用できます。

仕組み
direnvはカレントディレクトリと親ディレクトリに”.envrc”ファイルの存在確認が取れると実行できるようになります。なので、実行できるときは設定した環境変数がエクスポートされます。

piculet

piculetはAWSのセキュリティグループを管理するためのツールで、Ruby DSLを使用し、更新をすることができます。

仕組み
すでに設定している内容をRuby DSLにエクスポートし編集を行うことでAWSのセキュリティーグループを更新します。操作を1回行っても複数回行っても結果が、Ruby DSLの記述通りにAWSが設定されます。

DSLは以下のようになっています。

DSL

ec2 "vpc-XXXXXXXX" do
  security_group "default" do
    description "default VPC security group"

    ingress do
      permission :tcp, 80..80 do
        ip_ranges(
          "0.0.0.0/0",
        )
      end
      permission :any do
        groups(
          "any_other_group",
          "default"
        )
      end
    end

AWSのセキュリティーグループを設定

はじめにdirenvの設定をします

インストール

$brew install direnv

AWSのセキュリティーグループファイルを置きたいディレクトリに移動する

初期設定

$echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
$source ~/.bashrc

.envrcを作成

$direnv edit .

環境変数

export AWS_ACCESS_KEY_ID=AWSアクセスキー
export AWS_SECRET_ACCESS_KEY=AWSシークレットアクセスキー
export AWS_REGION=リージョン名

確認

$env | grep ^AWS

direnvの設定が完了後、AWSセキュリティーグループの設定に入ります。

piculet

インストール

$gem install piculet --no-ri --no-rdoc

セキュリティグループを取得

$bundle exec piculet -e -o Groupfile

※確認・更新するときは毎回実行する。

Groupfile編集

$vim Groupfile

テスト・適用

$bundle exec piculet -a  Groupfile --dry-run
$bundle exec piculet -a  Groupfile

もうdirenvとpiculetは手放せません。その理由は

direnv
一度設定してしまえばAWSのIAMアカウントが多くても間違えることがほぼ無くなるのでトラブル対策にもなります。AWSセキュリティーグループだけでなく、他にAMIのバックアップをAWS CLIで行うときにも使え、2回目からAWSアクセスキー、AWSシークレットアクセスキーの入力の手間が省けるので良いと感じました。

piculet
作業履歴を残したいとき、AWSコンソール画面のスクリーンショット数が増えるとめんどくさいですが、piculetを使えば少なくとも更新前と更新後の結果をコピーするだけでいいからです。私の場合は–dry-runを行なったさいのテスト結果も一度コピーをとるのですが、スクリーンショットするより圧倒的に楽なのでありがたいです。

参考元

https://so-wh.at/entry/20131105/p1
https://direnv.net/

元記事はこちら

direnvとpiculetを使いAWSのセキュリティーグループを設定する