EC2 Reserved Instanceの有効期限をAPIで管理する

EC2 Reserved Instanceの有効期限が切れた通知って僕の知る限りはメールで来ないんですよね。カレンダーに登録しとくとかタスク管理ツールに入れとくとかすればいいんですがAPIを使ってcronで毎日確認する方法もあるので軽く書いてみた。引っかかったインスタンスの情報をタスク管理ツールAPI叩いて登録するのが一番スマートですかね。

rubyでの例。

$ gem install aws-sdk
#!/usr/bin/env ruby
require 'aws-sdk'


Aws.config.update({
  region: 'ap-northeast-1',
  credentials: Aws::Credentials.new(
    'your_key',
    'your_secret'
  )
})

# activeなReserved Instanceを取得
ec2_client = Aws::EC2::Client.new
resp = ec2_client.describe_reserved_instances({
   filters: [{ 
     name:'state',
     values:['active']
   }]
})

# 有効期限が1ヶ月以内だったらアラート
resp.reserved_instances.each do |instance|
  if instance.end < Time.now + 60 * 60 * 24 * 30
    puts "リザーブドインスタンス:#{instance.reserved_instance_id} は1ヶ月以内に有効期限切れますよー"
  end
end

リンク

Class: Aws::EC2::Client — AWS SDK for Ruby V2

Atom上でWindows Explorerぽく動作するfile-explorerというパッケージを書いた

Problem

github製のテキストエディターであるAtomにはデフォルトでfuzzy-finderというファイル探索機能がありファイル名を入力すればどこにあるファイルでも見つけることができる。これはとても便利なのだが、Railsなどで開発をしてると開いてるファイルと同じディレクトリ、親ディレクトリ、子ディレクトリにあるファイルが開きたくなる。左カラムに表示されるtree-viewで探せば見つかるのだが巨大なプロジェクトにもなると探すのが結構大変なので困っていた。

Solution

Windows Explorerみたいな動きをするfile-explorerというパッケージを作りました。

f:id:hakutoitoi:20140521011332g:plain

下記のコマンドが使えるようになります。

How to use

カレントディレクトリを開く(cmd-alt-n)

Editorが現在開いてるファイルの親ディレクトリをSelectListViewで開きます。 親ディレクトリを基準にして、その中に存在する全てのファイル、ディレクトリが表示されます。 また親ディレクトリの親が..で表示されます。

入力エリアに文字を入力

fuzzy-finderと同じようにファイル、ディレクトリの絞り込みを行えます。

親ディレクトリを選択 or cmd-[

選択した親ディレクトリを基準にして、SelectListViewで開き直します。

ファイルを選択

ファイルを新しいタブで開きます。

子ディレクトリを選択

選択した子ディレクトリを基準にして、SelectListViewで開き直します。

プロジェクトのルートディレクトリを開く(cmd-shift-h)

プロジェクトのルートディレクトリを開きます。 ルートディレクトリに存在する全てのファイル、子ディレクトリが表示されます。

Passengerでゾンビプロセスを殺す時のベストプラクティス

Passenger EnterpriseでRollingRestartを有効にしているとworkerプロセスがゾンビになって再起動してもプロセスが死なない時がある。

下記のケースではPID24388がtmp/restart.txtをtouchしても死なない状況である。

$  passenger-status
  Requests in queue: 0
  * PID: 24388   Sessions: 1       Processed: 9691    Uptime: 10h 36m 45s
    CPU: 3%      Memory  : 104M    Last used: 2s ago
  * PID: 14112   Sessions: 0       Processed: 1148    Uptime: 1h 17m 31s
    CPU: 3%      Memory  : 57M     Last used: 1m 0s ag
  * PID: 14121   Sessions: 0       Processed: 1327    Uptime: 1h 17m 30s
    CPU: 4%      Memory  : 57M     Last used: 1m 4s ag
  * PID: 14136   Sessions: 0       Processed: 1175    Uptime: 1h 17m 27s
    CPU: 3%      Memory  : 54M     Last used: 3s ago
  * PID: 14159   Sessions: 0       Processed: 1219    Uptime: 1h 17m 23s
    CPU: 3%      Memory  : 54M     Last used: 58s ago
  * PID: 14185   Sessions: 0       Processed: 945     Uptime: 1h 17m 20s
    CPU: 2%      Memory  : 53M     Last used: 5s ago

こういう場合まず最初に思いつくのがkillコマンドを使う事だがその場合運悪くそのプロセスと通信していたクライアントにはエラーを返してしまう。Passenger-4.0.37以上のバージョンを使っているならpassenger-config detach-processコマンドが使えるのでこちらを使うべきだ。

Phusion Passenger 4.0.37 released – Phusion Corporate BlogPhusion Corporate Blog

$ passenger-config detach-process 24388
Process 24388 detached.

問題なくゾンビプロセスは消えてなくなります。

$  passenger-status
  Requests in queue: 0
  * PID: 14112   Sessions: 0       Processed: 1148    Uptime: 1h 17m 33s
    CPU: 3%      Memory  : 57M     Last used: 1m 0s ag
  * PID: 14121   Sessions: 0       Processed: 1327    Uptime: 1h 17m 32s
    CPU: 4%      Memory  : 57M     Last used: 1m 4s ag
  * PID: 14136   Sessions: 0       Processed: 1175    Uptime: 1h 17m 29s
    CPU: 3%      Memory  : 54M     Last used: 3s ago
  * PID: 14159   Sessions: 0       Processed: 1219    Uptime: 1h 17m 25s
    CPU: 3%      Memory  : 54M     Last used: 58s ago
  * PID: 14185   Sessions: 0       Processed: 945     Uptime: 1h 17m 22s
    CPU: 2%      Memory  : 53M     Last used: 5s ago