2012-01-01から1年間の記事一覧

IAMでソースIPを制限する

AWS

こんな感じ。 { "Statement": [ { "Action": [ "ec2:Describe*" ], "Effect": "Allow", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "100.100.100.10", "100.100.101.0/24" ] } } } ] }

Brainf*ck

class Brainfuck options no_result_var rule exp: | exp ope ope: '>' { @ptr += 1 } | '<' { @ptr -= 1 } | '+' { @ary[@ptr] ||= 0 @ary[@ptr] += 1 } | '-' { @ary[@ptr] ||= 0 @ary[@ptr] -= 1 } | '.' { print (@ary[@ptr] || 0).chr } | ',' { @ary[@…

応用編

kyowa.y class Kyowa options no_result_var rule exp: | exp ope ope: '(」・ω・)」きょう(/・ω・)/わー' { @ptr += 1 } | '(」・ω・)」きょう!!(/・ω・)/わー!!' { @ptr -= 1 } | '(」・ω・)」きょう!(/・ω・)/わー!' { @ary[@ptr] ||= 0 @ary[@ptr]…

「入力して出力」を繰り返す

この手のも再帰使うのが定石なのかな。。。 #!/usr/bin/env ocaml open Printf;; let rec input_loop line = printf "%s\n" line; input_loop (read_line ()) ;; input_loop (read_line ());;

ドル→円変換

#!/usr/bin/env ocaml open Printf;; let conv dollar = let rate = 114.32 in let yen = rate *. dollar in let i_yen = int_of_float yen in (* printf "(%f)\n" yen; *) if (yen -. float_of_int i_yen) < 0.5 then i_yen else i_yen + 1 ;; let rec inpu…

capitalize

無力だ。 #!/usr/bin/env ocaml let capitalize c = let ic = int_of_char c in if 'a' <= c && c <= 'z' then char_of_int (ic - 32) else c ;; let ch = 'h';; print_char (capitalize ch);;

MySQLからMongoDBへレプリケーションする

ruby-binlogを使ったサンプル。mysql2mongo.rbは以下の通り。 #!/usr/bin/env ruby require "rubygems" require "binlog" require "mongo" # カラム情報はMySQLから取得した方がよいかも… TABLE_COLUMNS = { "employees" => %w(id name age), } def insert(e…

mysql-replication-listenerのspecを書いた

%define _libdir /usr/lib Name: mysql-replication-listener Version: 0.0.47 Release: 2%{?dist} Summary: A STL/Boost based C++ library used for connecting to a MySQL server and process the replication stream as a slave. Group: Development/Lib…

mysql-replication-listenerのバインディングを書きました…が

少し前に話題に上ったmysql-replication-listener(libreplication)のRubyバインディングを書きました。https://bitbucket.org/winebarrel/ruby-binlog/ require "binlog" client = Binlog::Client.new("mysql://repl:repl@nyarlathotep") client.connect c…

Amazon LinuxにHeartbeatをインストールする

EC2

詳細はリンク先を参照のこと。 http://www.thatsgeeky.com/2011/07/installing-heartbeat-on-amazon%E2%80%99s-ec2/ rpmを作ったので添付しておく。 cluster-glue-1.0.9-1.amzn1.x86_64.rpm cluster-glue-debuginfo-1.0.9-1.amzn1.x86_64.rpm cluster-glue-l…

attach-eniコマンドを使ったフェイルオーバー

EC2

https://bitbucket.org/winebarrel/attach-eni サーバ cthulhu(クライアント): 10.0.0.172 hastur: 10.0.0.171 nyar: 10.0.0.170 ENI: 10.0.0.150 事前準備 haster/nyarにattach-eniをインストールしておく 新規に作成したENIとhuster/nyarのeth0で『Source/…

Heartbeatとattach-eniコマンドを使った冗長化

サーバ構成やHeartbeatのインストールなどについては前のエントリを参照。 attach-eniコマンドを使ったフェイルオーバー Amazon LinuxにHeartbeatをインストールする Hertbeatの設定 /etc/ha.d/ha.cf (hastur) logfile /var/log/ha-log keepalive 2 deadtime…

Heartbeatとattach-eniコマンドを使った冗長化 その2: L7のヘルスチェック

L7のヘルスチェックを追加してみる。とりあえず、hasterとnyarにmysql-serverをインストール。 以下のヘルスチェック用デーモンを作成。 /usr/local/bin/mysql-pingd #!/bin/bash INTERVAL=5 while true; do /usr/bin/mysqladmin ping --connect_timeout=3 i…

スレーブでデータを自動的に暗号化する

トリガを使ってスレーブで自動的にデータを暗号化してみる。 テーブルはこんな感じ。 CREATE TABLE `hoge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `value` text, PRIMARY KEY (`id`) ) スレーブ側でトリガを準備。 DELIMITER // CREATE TRIGGER encrypt_v…

[EC2] プライベートIPを(APIレベルで)アサインするスクリプトを書いてみた…が

スクリプトは以下の通り。gemは不要。1.8/1.9共通 #!/usr/bin/env ruby require 'cgi' require 'base64' require 'net/https' require 'openssl' require 'optparse' require 'rexml/document' Net::HTTP.version_1_2 class EC2Client API_VERSION = '2012-0…

IAMのユーザ一覧を出力する(グループ・アクセスキー付き)

AWS

#!/usr/bin/env ruby require 'cgi' require 'base64' require 'net/https' require 'openssl' require 'time' require 'rexml/document' class IAMClient API_VERSION = '2010-05-08' HOST = 'iam.amazonaws.com' ALGORITHM = :SHA1 #ALGORITHM = :SHA256 d…

Security GroupをGraphvizで可視化する

EC2

とりあえず非VPCだけ。 ec2-describe-group | awk -F'\t' 'BEGIN{print "digraph G {"} /^GROUP/{vpc = $6 ? 1 : 0} $9~/CIDR/{src=$10} $9~/USER/{gsub(/NAME /,"",$11); src=$11} !vpc && /^PERMISSION/{dst=$3; pair=sprintf("\"%s\" -> \"%s\"",src,dst)…

CapistranoとJGitを使ったS3からEC2へのデプロイ

EC2

デプロイ時の負荷対策の一解決策になる、、、かも。 JGitのインストール http://eclipse.org/jgit/ 『org.eclipse.jgit.pgm-1.3.0.201202151440-r.sh』はus-east-1しか操作できないバグあり https://git.eclipse.org/r/#/c/5255/ jgitに名前を変えて、ローカ…

EC2でOpenFlowを動かしてみる on VPC

EC2

基本情報 同じサブネット上に構築 Amazon Linux AMI 2012.03 (64bit / m1.small) × 3台 サーバ構成 source-01 (10.0.10.1) switch-01 (10.0.10.2) 『net.ipv4.ip_forward = 1』 『net.ipv4.conf.default.rp_filter = 0』 Source Dest. Checkはdisabled dest-…

日本語でタグをつける

EC2

どうもいろいろとよくわかんなかったので、少し追ってみた。 ポイントは POSTで投げる Content-Typeに「; charset=utf-8」をつける SignatureVersionは「2」 right_awsではURLエンコードに独自メソッドと実装してたけど、CGI.escapeで大丈夫、、だと思う。 …

Ruby+SES(smtp)でメールを送信

例によってシンプルな情報が少ないので、すこしまとめてみた。 設定の確認とCredentialの作成 Management Consoleの「SES > SMTP Settings」でSMPTの設定の確認と、Credentialを作成。*1 メールアドレスの認証 sandbox状態だと認証された送信者・受信者でし…

趣味はプログラミングです

昔、コンプティークか電撃王かに「趣味は楽しくない」という話を書いたエッセイが載っていた。大昔のことなのでほとんど覚えていないのだが、話の筋は「登山している友人に楽しいかと聞いてみたところ『きつくて臭くて最悪だよ』という答えが返ってきた。し…

ec2-api-tools.spec作成スクリプト

EC2

#!/bin/sh SOURCE=ec2-api-tools.zip SPEC=ec2-api-tools.spec DESTDIR=/usr wget -q http://s3.amazonaws.com/ec2-downloads/$SOURCE -O $SOURCE VERSION=`unzip -l ec2-api-tools.zip | awk '/ec2-api-tools-/{print $4; exit}' | sed -r 's|ec2-api-tools…

EventMachineで簡単なロードバランサーを書いてみた

同期の問題は大変デスネー Hostヘッダ渡さなくてもレスポンス返してくれたのがちょっと意外だった。 hHatena Blogはレスポンス返してくれるのかな? #!/usr/bin/env ruby require 'rubygems'a require 'eventmachine' class Backend < EM::Connection def i…

EventMachineで簡単なロードバランサーを書いてみた その2

あ、さっきの嘘だ。 普通にラウンドロビン実装できた。 #!/usr/bin/env ruby require 'rubygems' require 'eventmachine' class Backend < EM::Connection def initialize(proxy) @proxy = proxy end def receive_data(data) @proxy.send_data(data) end end…

EventMachineでHTTPd

重い処理はバックグラウンドに回すのが正解なのかな。 基本的にmutableなオブジェクトの共有はNGな気がするな。 #!/usr/bin/env ruby require 'rubygems' require 'eventmachine' class HTTP < EM::Connection def receive_data(data) operation = lambda do…

MurakumoによるElastic Network Interfaceのフェイルオーバー

Murakumo 0.4.5をリリースしました。 https://rubygems.org/gems/murakumo/versions/0.4.5 今回はKeepalived/Heartbeatのような冗長化機能を追加しました。 Elastic Network Interfaceを使った冗長化の例 ■概要 アクティブなサーバのMySQLが落ちたとき・サー…

Scheduled Eventチェック用Nagiosプラグイン

#!/usr/bin/env ruby require 'cgi' require 'base64' require 'net/https' require 'openssl' require 'rexml/document' Net::HTTP.version_1_2 class EC2Client API_VERSION = '2011-12-15' SIGNATURE_VERSION = 2 def initialize(accessKeyId, secretAcce…

例のアレ

EC2

画面はできましたがテストができません…

例のアレ その2

EC2

テストできちゃったよ…