Piculetの定義ファイル内のIPアドレスに別名をつける/社内で使ってる補助スクリプトを紹介します #codenize

2016.12.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越妙高オフィスです。先日のCodenize Meetup #1で発表した資料でご紹介した、Piculetをちょっと便利につかうために社内で使ってるスクリプトを公開します。

元々のコードを書いてくれた望月さんに公開許可をもらいました。ありがとうございます。くらめそ社内のノウハウは積極的に公開していくスタイルですね。

ソースコードと使い方

ソースコード

ソースコードはGistで公開しています。

使い方

上記URLで公開している3ファイルをPiculetの設定ファイルと同じディレクトリに保存しておきます。 piculetでexportした後にinject_definition.rbを実行すると、エクスポートされた定義ファイルのIPアドレス部分を置換してくれます。

export.sh

#!/bin/sh

piculet -export --region ap-northeast-1 --split
rm Groupfile
ruby inject_definition.rb

Piculetでapplyするときには通常通りに操作すればOKです。--dry-runしてから実行すると安心ですね。

import.sh

#!/bin/sh

for vpc in $(ls *.group | xargs -I % basename % .group)
do
  piculet --region ap-northeast-1 -a --ec2s ${vpc} -f ${vpc}.group "$@"
done
$ ./import.sh --dry-run
$ ./import.sh

環境に応じた修正点

  • IPアドレスと名前のマッピングを address_list.yml に追記してください。
  • inject_definition.rb はVPCごとにファイルを分割しているので、1ファイルで扱いたい場合は Groupfile を読み込むよう修正してください。

コードの解説

実は私は望月さんが作ってくれたのをありがたく使わせてもらってるだけなので・・・コードに記載されてる参考URLのブログの解説を読むのが良さそうですね。

OpenStructクラスはハッシュを読み込んで、メソッドに展開してくれるようです。ただOpenStructだとネストされた構造を扱えないためDeepStructというクラスに拡張しています。このブログで紹介されている方法を、IPアドレスと名前のマッピングを定義したaddress_list.ymlの読み込み処理とあわせてdefinitions.rbというファイルにまとめています。

まとめ

本日は inject_definition.rb を紹介しました。

IPアドレスと名前をマッピングするだけの処理なのですが、これを使うことで次の点で便利になります。

  • 設定ファイル内のIPアドレスが分かりやすい名前で読めるので、IP制限をかけているサイトなどの許可対象がわかりやすい。
  • 事務所移転などによるIPアドレス変更時はマッピングファイルを修正するだけで良くオペミスが起こりにくい。
  • 同様に事務所移転などIPアドレス変更だけの場合はマッピングファイルを修正するだけで、関連するセキュリティーグループの一括変更ができる。

とても便利に使わせてもらってるので、みなさんもぜひお使いください。