皆さんこんにちは。テクニカルグループの山田です。
今回は、NetFlixがオープンソースで公開しているJanitor Monkeyを紹介します。
Janitor Monkey とは?
Netflixのgithubページ
JanitorMonkeyの動作には以下の環境が必要となるため、各自用意してください。
・"SIMIAN_ARMY"というSimpleDBのドメイン (各AWSリソースの情報を保存するため)
・Production申請済みのSES、SESへのアクセス環境 (実行レポートをSESでメール送信するため)
・IAMユーザ、アクセスキーID、シークレットアクセスキー
インストール作業
まず、インストールに必要なソフトウェアを用意します。
$ sudo yum -y update $ sudo yum -y groupinstall "Development Libraries" "Development tools"
次に、公式のgithubからソースコードをダウンロードします。
$ git clone git://github.com/Netflix/SimianArmy.git
ダウンロードしたものをビルドします。
$ cd SimianArmy $ ./gradlew build
BUILD SUCCESSFUL と出力されればビルド成功です。
インストールすると、○○ MonkeyというNetflixのツール群 (Simian Army) がインストールされます。
Janitor Monkeyの設定
設定ファイルをデフォルトから書き換えます。
設定ファイルは、インストールディレクトリ以下の ( ~/SimianArmy/src/main/resources/ )にあります。
$ tree SimianArmy SimianArmy ---省略--- └── src ├── main │ │ │ ├── resources │ │ ├── chaos.properties │ │ ├── client.properties │ │ ├── conformity.properties │ │ ├── janitor.properties │ │ ├── log4j.properties │ │ ├── simianarmy.properties │ │ └── volumeTagging.properties │ │ ---省略--- 230 directories, 878 files
まず、AWSリソースを監視する際に必要となるアクセスキーとシークレットアクセスキーと監視するリージョンを設定します。
設定するファイルは client.properties です。
simianarmy.client.aws.accountKey = XXXXXXXXXXXXXXX simianarmy.client.aws.secretKey = XXXXXXXXXXXXXXXXXXXXXXXXX simianarmy.client.aws.region = ap-northeast-1
次にChaos Monkey(インスタンス障害を意図的に起こすツール) と Conformity Monkey(ベストプラクティスから外れているインスタンスをシャットダウンするツール) の設定をします。
今回は、Chaos Monkey と Conformity Monkey は使わないので無効にします。
まず、Chaos Monkeyを ( chaos.properties ) を無効にします。
simianarmy.chaos.enabled = false
Conformity Monkey ( conformity.properties ) を無効にします。
simianarmy.conformity.enabled = false
simianarmy.scheduler.frequency = 10 simianarmy.scheduler.frequencyUnit = MINUTES
・監視開始時刻と終了時刻とタイムゾーンを設定
simianarmy.calendar.openHour = 10 simianarmy.calendar.closeHour = 19 simianarmy.calendar.timezone = Asia/Toyko
・dryrunモードの有効無効の設定 (今回は動作確認のみなのでtrueに設定します)
simianarmy.janitor.leashed = true
・監視対象にするAWSリソースを設定 (今回はSnapshotのみを監視対象にします)
simianarmy.janitor.enabledResources = EBS_Snapshot
・監視結果レポートを送信するためのメール設定
simianarmy.janitor.notification.sourceEmail = foo@bar.com # 通知する際の送信元アドレス simianarmy.janitor.summaryEmail.to = foo@bar.com # 通知する際の送信先アドレス
・リソース削除前の最後通告の日数を設定
simianarmy.janitor.notification.daysBeforeTermination = 2
※例えば6月27日に削除されるインスタンスがあるとして、この値が2に設定されていると6月25日にメールで事前に通知されます。 リソースの削除ルール設定
次にそれぞれのAWSの監視ルールです。
先ほど simianarmy.janitor.enabledResources で指定した、Snapshotの削除ルールを設定したいと思います。
Snapshotで指定するプロパティは3つです。
・Snapshotの監視を有効/無効
simianarmy.janitor.rule.noGeneratedAMIRule.enabled = true
・どのAMIにも紐付いていない、かつ作成されてからこの日数が経過すると削除候補としてマークされる
simianarmy.janitor.rule.noGeneratedAMIRule.ageThreshold=30
・削除通知メールが届いてから削除されるまでの日付
simianarmy.janitor.rule.noGeneratedAMIRule.retentionDays = 7
Janitor Monkeyの設定は以上になります。
その他のAWSリソースの削除ルールを設定するプロパティはこちら (https://github.com/Netflix/SimianArmy/wiki/Janitor-Settings) にあります。
Janitor Monkeyの実行
さて、ひと通りの設定が完了したので早速実行しましょう。
SimianArmyディレクトリに移動して実行します。
$ cd SimianArmy $ ./gradlew jettyRun
Janitor MonkeyによるAWSのリソース監視が開始されます。
:compileJava UP-TO-DATE :processResources UP-TO-DATE」 :classes UP-TO-DATE :jettyRun ------省略------ > Building > :jettyRun > Running at http://localhost:8080/simianarmy
すると、設定ファイルで指定したメールアドレスに、以下の様な形式でAWSリソースの監視レポートが送られます。
タイトル:Janitor monkey execution summary (ap-northeast-1) Total markings for EBS_SNAPSHOT = 3 in region ap northeast 1 List: snap-xxxxxxxx,snap-xxxxxxxx,snap-xxxxxxxx Total unmarkings for EBS_SNAPSHOT = 0 in region ap northeast 1 List: Total cleanups for EBS_SNAPSHOT = 0 in region ap northeast 1 List: Total cleanup failures for EBS_SNAPSHOT = 0 in region ap northeast 1 List:
markings for EBS_SNAPSHOT = 3 とあるので3つのSnapshotが削除候補としてマークされていることが分かります。
まとめ
普段から意識していても、ついつい忘れてしまうリソースの消し忘れをすべて自動で管理してくれるのは非常に魅力的ですね。
例え間違って削除条件を設定してしまってもメールで通知が来るので安心です。
個人的に使っているAWSアカウントにも使いっぱなしのリソースがあるので、これを機に大掃除しようかと思います。