Skip to content

Instantly share code, notes, and snippets.

@juno
Created April 1, 2011 07:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juno/897863 to your computer and use it in GitHub Desktop.
Save juno/897863 to your computer and use it in GitHub Desktop.
AWS EC2のインスタンス状態をポーリングしてZeroMQにPub/Subするデモ。

Prerequisite

$ brew install zeromq
$ ARCHFLAGS="-arch x86_64" gem install zmq -- --with-zmq-dir=/usr/local
$ gem install amazon-ec2

Run

Terminal 1:

$ ruby zmq-publisher.rb
-> running i-fe4ac2ff 2011-04-01T07:44:02.000Z
-> stopping i-fe4ac2ff 2011-04-01T07:44:02.000Z

Terminal 2:

$ ruby zmq-subscriber.rb
i-fe4ac2ff が起動しました
i-fe4ac2ff が停止しました
require 'zmq'
require 'AWS'
ZMQ_PORT = 5000
POLLING_INTERVAL = 10
AWS_CONFIG = {
:access_key_id => '***',
:secret_access_key => '***',
:server => 'ec2.ap-northeast-1.amazonaws.com', # Tokyo
}
ec2 = AWS::EC2::Base.new(AWS_CONFIG)
ctx = ZMQ::Context.new
sock = ctx.socket(ZMQ::PUB)
sock.bind("tcp://127.0.0.1:#{ZMQ_PORT}")
loop do
result = ec2.describe_instances
if result.reservationSet
result.reservationSet.item.each do |reservation|
reservation.instancesSet.item.each do |instance|
state = instance.instanceState.name
identifier = instance.instanceId
launch_time = instance.launchTime
message = "#{state} #{identifier} #{launch_time}"
puts "-> #{message}"
sock.send message
end
end
end
sleep POLLING_INTERVAL
end
# -*- coding: utf-8 -*-
require 'zmq'
ZMQ_PORT = 5000
ctx = ZMQ::Context.new
sock = ctx.socket(ZMQ::SUB)
sock.connect("tcp://127.0.0.1:#{ZMQ_PORT}")
sock.setsockopt(ZMQ::SUBSCRIBE, 'running')
sock.setsockopt(ZMQ::SUBSCRIBE, 'stopped')
running_instances = []
loop do
message = sock.recv
values = message.split(' ', 3)
state = values[0]
identifier = values[1]
if state == 'running' && !running_instances.include?(identifier)
running_instances << identifier
puts "#{identifier} が起動しました"
end
if state == 'stopped' && running_instances.include?(identifier)
running_instances.delete identifier
puts "#{identifier} が停止しました"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment