AWSの構成変更を把握する

確定申告が終わったので久々に書きます。3月からAWSを使う現場になって、ふと思いついたことをやってみます。AWSの構成管理についてです。

構成管理というと作る方が気になるもので、前にTerraFormを試したこともありますが、この現場はCloudFormationです。どちらにしても、初期構築はすんなりいって、構成変更が入ると技が必要になったりしますね。そこに手作業での構成変更が混じってきたらもう大変です。

というわけで、とりあえず今の構成を一覧で出したいんだ、ってときに役立つものを考えてみました。単にaws サービス describe-種別を連発するだけです。

まずは何をdescribeするか定義します。ディレクトリとファイルを作るだけです。

$ mkdir ap-northeast-1/ec2 -p
$ touch ap-northeast-1/ec2/security-groups

これは東京リージョンでEC2サービスのセキュリティグループを指しています。

試しにfindしてみましょう。

$ find *-*-* -mindepth 2 -maxdepth 2 -type f
ap-northeast-1/ec2/security-groups

出てきましたね。他にも作れば一覧されるはずです。

これを価値あるコマンドに変換しましょう。

$ find *-*-* -mindepth 2 -maxdepth 2 -type f | awk -F/ '{printf "aws --region %s %s describe-%s > %s/%s/%s\n", $1, $2, $3, $1, $2, $3}'
aws --region ap-northeast-1 ec2 describe-security-groups > ap-northeast-1/ec2/security-groups

長い。単にawsコマンドに変換しているだけです。出力先は元のファイルになるようにしています。

後はshに流し込むだけ。

$ find *-*-* -mindepth 2 -maxdepth 2 -type f | awk -F/ '{printf "aws --region %s %s describe-%s > %s/%s/%s\n", $1, $2, $3, $1, $2, $3}' | sh

そうすると?

$ more ap-northeast-1/ec2/security-groups
SECURITYGROUPS	ELB created security group used when no security group is specified during ELB creation - modifications could impact traffic to future ELBs	sg-016a0f64	default_elb_25a4fc0d-0cc8-3cdb-b33f-ebc2d3ec0faf	900412032069	vpc-31ce0f
54
IPPERMISSIONS	80	tcp	80
IPRANGES	0.0.0.0/0
IPPERMISSIONSEGRESS	-1
IPRANGES	0.0.0.0/0
SECURITYGROUPS	open web	sg-30da5755	openweb_SG_tokyo	900412032069	vpc-31ce0f54
IPPERMISSIONS	80	tcp	80
IPRANGES	0.0.0.0/0
IPPERMISSIONS	443	tcp	443
IPRANGES	0.0.0.0/0
IPPERMISSIONSEGRESS	-1
IPRANGES	0.0.0.0/0

こんな感じで出てきます。テキスト形式です。JSONが好きな人もいるでしょうが、ここはテキスト形式をお勧めしておきます。普段はjsonにしておいて、この場面だけ--output textってしてもいいでしょう。

そして、なぜテキスト形式をお勧めするかというと、SubversionやGitで管理するときに生きてくるのです。

$ svn st
M       ap-northeast-1/ec2/security-groups
$ svn di
Index: ap-northeast-1/ec2/security-groups
===================================================================
--- ap-northeast-1/ec2/security-groups	(リビジョン 2)
+++ ap-northeast-1/ec2/security-groups	(作業コピー)
@@ -11,8 +11,6 @@
 IPPERMISSIONSEGRESS	-1
 IPRANGES	0.0.0.0/0
 SECURITYGROUPS	open web	sg-30da5755	openweb_SG_tokyo	900412032069	vpc-31ce0f54
-IPPERMISSIONS	80	tcp	80
-IPRANGES	0.0.0.0/0
 IPPERMISSIONS	443	tcp	443
 IPRANGES	0.0.0.0/0
 IPPERMISSIONSEGRESS	-1

こんな感じです。jsonだと上下に長いのでCLIだとデフォルトの差分ではどこに変更があったか分かりにくいですが、テキストなら上下が詰まっているので把握しやすいです。でも、これも好みか?

構成管理とかなかなか導入できなくて、みんな好き勝手やってるようなところでは役に立つかもしれませんね。クラウド内の見える化、大事です。