2011年12月26日月曜日

whois複数検索をdotcloudに移行しました

個人的に作成していたwhois複数検索サービスをdotcloud+Amon2の環境に移行しました。
http://whois.0tt.0t0.jp/
http://whois-snumano4.dotcloud.com/

今回の目的は、「WAFでの再構築」「PaaSへの移行」でした。
dotcloud+Amon2の環境や移行に伴う手順は、前回記載した手順とほぼ同じ。
ハマッったポイントは下記。

  • 内部処理でLinuxのwhoisコマンドを使用していたが、dotcloud環境ではこのコマンドは使えず、install不可であることが判明。代わりに、同等のサイトにhttp getで情報を取得するように変更。


これで今年の計画は完了。

現在、CSS勉強中。少しは見た目の良いサイトにしたいので。。。
---
追記
2012/11/03 dotcloudの仕様変更につき、URL変更になっています。custome domainが無料で使えるherokuへの移行検討中です。

このエントリーをはてなブックマークに追加

2011年12月18日日曜日

Twitterの「必読」URL抽出サービス リリースしました

「多量のtweetの中から面白そうな情報だけ選択したい」そのために、作成しました。
サービス概要
  • tweet中「必読」という文字列とURLがあれば抽出します。
  • 短縮URLの場合展開し、URLをカウントします。
  • 過去1日、1週間、1ヶ月のURLカウント数のtop20がリスト表示されます。
  • URL先の内容については関知しません。ご了承ください。

システム構成
  • 言語:Perl
    使い慣れているので。Perlでのobject指向の書き方を勉強し、他のスクリプト言語への移行も計画中
  • DB
    MySQLを使用
  • WAF(Web Application Framework):Amon2
    CatalystやMojolicious::liteも勉強してみたが、結局、YAPC::AsiaでAmon2の作者の方の発表を聴いて身近に感じたから。後、簡単そうだったので。
  • PaaS:dotcloud
    PerlやMySQLが使えるPaaS。fluxflexもperl対応しているようだが、今はdotcloudの方がCPANモジュールinstallなど使いやすそうなので。
  • バージョン管理
    dotcloudで、バージョン管理していないようなので、githubを利用

進め方
  1. サイト企画
  2. Twitter APIの学習
  3. 言語の選択
  4. WAFの選択
  5. サーバ(IaaS,PaaS)の選択
  6. バージョン管理方法の選択
    今回はgithubを使用
  7. コード作成
  8. 動作確認、デザイン修正
  9. デバッグ
  10. google analytics設定
  11. 免責などの記載
  12. favicon作成
    favicon generatorを使用
  13. 連絡先のtwitterを準備
  14. DNS切り替え
    myDNSを使用
  15. URL監視設定
    cmanを利用
  16. リリース、周知

ハマりポイント
  • dotcloudがいまいち安定しない
    • 正しくコンテンツをpushをしてもサイトが正しく表示されない事、ssh接続ができない事が何回かあった。その時には別アカウントを作成して、切り分けを実施した。結局、別アカウントだと正常に動いた。Forumでも同様の質問があり、supportに連絡してほしいという結論になっていた。
    • で、やっと動作したかと思ったら、翌日には動かなくなっていた。この時はrestartを実施して、復旧した。
  • (今回は不要だったが)apacheでamon2を動かす方法がよくわからなかった
    • dotcloudの運用を諦めて自分のサーバ上で構築を検討していた際、既存の環境のapacheでamon2を動かす方法を調べてたがまだ情報少ない。結局はapacheでPSGIを動かす方法となるのだが、正常動作確認には至らなかった。

todo
  • logの確認、デバッグ
  • サイトの安全性チェック
    googleでできそう。
  • 公式RT対応

今後
  • 本サービスのチューニングやってみたい。ボトルネックでてくるぐらいまでになってくれれば。。。
  • 今回のdotcloud+amon2の組み合わせを使って、他サービスも作ってみたい。作成時間は短縮できるハズ。
  • WAFを使っていない作成済のサービスをAamon2を使って再構築。
  • 他PaaSを利用してみたい。
    Rubyでnode.js勉強して、Herokuやnode ninjaなど。
  • NoSQLも
    Cassandra、mongoDBあたり試せるようなサービス考え中。

変更履歴
  • 2012/8/26 githubを追記
このエントリーをはてなブックマークに追加

2011年12月15日木曜日

iperfと一緒にiftopをつかってみる

前回iperf使ったのですが、実際のトラフィック量を測定するのにiftopを使いました。
今回はiftopの紹介です。

linuxでのトラフィック量計測は何かアプリをinstallする必要がありそうですね。
ここを参考にiftopを使うことにしました。


ここからDLしてinstallを実施。
事前にlibpcapとncurses,ncurses-devel,libpcap-develをyum installで入れておきます。
 

実行はrootでiftopするだけ。
下記のようにsession毎にトラフィック量を計測してくれます。


このエントリーをはてなブックマークに追加

2011年12月4日日曜日

RightScriptsを公開しました

前回紹介したRightScriptsをRightscaleのMultiCloud Marketplaceに公開しました。















下記を参考にさせていただきました。(いつもありがとうございます)
無償アカウントで、MultiCloud Marketplaceでデビュー(第一回リビジョン?) | RightScale Hack
無償アカウントで、MultiCloud Marketplaceでデビュー(第二回公開方法) | RightScale Hack

ポイントは下記。

  • Settings -> Account Settings ->Usersで、「publisher」権限を付与
  • 公開したいrevにて「Publish To MultiCloud Marketplace」をクリック
これで、自分の好きなRightScriptを作成、公開までできました。
ServerTemplateも同様の手順でできるかと思います。
このエントリーをはてなブックマークに追加

2011年11月27日日曜日

CloudStack API用Perlライブラリを公開しました

以前作成したスクリプトをライブラリ化してCPANに公開しました。
Net::CloudStack

CloudStack APIについてのdocumentは下記をご参照ください。
Developer's Guide:CloudStack


ライブラリinstall手順(cpan install以外の部分) についてまとめます。
  1. 事前準備
    #yum install make cpan gcc expat-devel
    #cpan YAML               #私の環境ではcpanで必要でした。
    #cpan YAML::Tiny            #後述のサンプルスクリプトで使用。
    Cent6.xの場合
    # vi /usr/share/perl5/CPAN/Config.pm
    Cent5.xの場合
    # vi /usr/lib/perl5/5.8.8/CPAN/Config.pm
      'prerequisites_policy' => q[follow],        #[yes]押下を省略するため、ask->followに変更
  2. 事前準備その2(https対応必要の場合)
    #yum install openssl-devel
    #cpan LWP::Protocol::https
  3. ライブラリinstall
    #cpan Net::CloudStack

以下簡易なサンプルスクリプト例と実行例です。(冗長な部分もあるかもしれませんが、ご勘弁)
  • client用サンプルスクリプト(cs-api.pl)
    #!/usr/bin/perl -w
    use strict;
    use warnings;
    use Net::CloudStack;
    use YAML::Tiny;
    use Data::Dumper;
    use JSON;
    use XML::Simple;

    my ($xml_json,$send_request);
    my $yaml = YAML::Tiny->new;
    $yaml = YAML::Tiny->read('cs-api.yml');
    my $obj;

    if(defined($yaml->[0]->{xml_json})){
        $xml_json = $yaml->[0]->{xml_json};
    }
    else{
        $xml_json = 'json';
    }

    if(defined($yaml->[0]->{send_request})){
        $send_request = $yaml->[0]->{send_request};
    }
    else{
        $send_request = 'no';
    }

    my $api = Net::CloudStack->new(
        api_key => $yaml->[0]->{api_key},
        secret_key => $yaml->[0]->{secret_key},
        base_url => $yaml->[0]->{base_url},
        api_path => $yaml->[0]->{api_path},
        xml_json => $xml_json,
        send_request => $send_request,
        );

    my $cmd = $ARGV[0];
    if(defined($ARGV[1])){
        $api->${cmd}("$ARGV[1]");
    }
    else{
        $api->${cmd};
    }
    print Dumper($api->url);
    print Dumper($api->response);
    if($api->xml_json =~ /json/i){
        $obj = from_json($api->response);
    }
    else{
        my $parser = XML::Simple->new;
        $obj = $parser->XMLin($api->response);
    }
    print Dumper($obj);
    if($api->xml_json =~ /json/i){
        foreach (keys %$obj){
            print Dumper($obj->{$_}->{jobid});
        }
    }
    else{
            print Dumper($obj->{jobid});
    }
    exit;
  • 設定ファイル(cs-api-yml)
    cs-api.plと同じディレクトリに保存。(下記伏字にしています)
    ---
    api_key:    ***
    secret_key: ***
    base_url:   http://*.*.*.*
    api_path:   portal/client/api?  #your API PATH
    xml_json:   json
    send_request:   yes
  • 実行例
    # ./cs-api.pl startVirtualMachine id=521
    $VAR1 = 'http://*.*.*.*/portal/client/api?apikey=*****&command=startVirtualMachine&id=521&response=json&signature=***';
    $VAR1 = '{
       "startvirtualmachineresponse" : {
          "jobid" : 2114
       }
    }
    ';
    $VAR1 = {
              'startvirtualmachineresponse' => {
                                                 'jobid' => 2114
                                               }
            };
    $VAR1 = 2114;
また、CPANに公開するまでの手順もまとめました。
CPAN Authorになるまでのまと

備忘録。下記対応予定です
  • APIをresponse処理対応
  • error処理
  • document整備
---
追記 2011/12/02
  • サンプルスクリプトについて追記
追記 2011/12/06
  • ライブラリ更新に伴い、サンプルスクリプト修正
追記 2012/2/17
  • Cent5.xの手順を追加
このエントリーをはてなブックマークに追加

CPAN Authorになるまでのまとめ

先の記事で報告した通り、今年の個人的な目標の1つの「CPAN Author」になれましたので、簡単にまとめておきたいと思います。

    1. PAUSEへ登録
      これは数ヶ月前に登録済でした。これは自分の登録だけなので、まだライブラリ作成前でもok。
      ***@cpan.orgのmail addressをもらえます。
      しかし、登録時に自分のmail addressへの転送設定をちゃんとしておかないと、最初のvalidationができず、せっかくもらったmail addressが使えません。
    2. CPAN searchで事前確認
      自分が作成しようとするライブラリが存在しないことを確認。
    3. ライブラリの作成
      module::starterというツールを使うと、CPANに必要なファイルの雛形を容易してくれます。
      皆、こういうの使っていたんですね。
    4. PAUSEへ名前空間の登録
      DNSと似たような階層構造で名前をつけるのが一般的のようです。あまりtopレベルの名前空間は取得しないものらしい。
      今回は「Net::CloudStack」としました。
      (Net::Amazon::EC2やNet::OpenStack::Computeというライブラリがあったので、同様にNet::を使うことにしました)
    5. PAUSEからライブラリのupload
      下記の2パターン。
      1. 手動でPerl Makefile.PL;make;make test;make distして、tar.gzを作成し、pauseからuploadする
      2. shipitコマンド
        コマンドラ一発で、gitとmakeとuploadしてくれます。便利。
        こちらを参考にやっと使えるようになりました。
    6. CPANでライブラリ公開
      5,6から数時間で、公開されてました。
      http://search.cpan.org/dist/Net-CloudStack/
  • 学んだこと
    上記のCPAN公開までの手順以外に下記を学びました。
    • オブジェクト型Perl
      Mooseを使いました。Perl4時代の書き方しか知らなかったので新鮮でした。
    • バージョン管理
      gitを使うようになりました。
  • 今後
    モダンPerlのスマートな書き方、運用の仕方を学んでいきたいと思います。
    また、javascriptも挑戦したいと思います。Firefox、chromeなどの拡張や、node.jsなどやってみたいですね。node ninjaで遊んでみたいです。

### 2012/1/29追記 ###
shipitについて追記しました。


このエントリーをはてなブックマークに追加

2011年11月17日木曜日

CloudStack API情報まとめ

CloudStack APIの情報をまとめてみました。

<公式情報>
http://docs.cloud.com/CloudStack_Documentation/Developer%27s_Guide%3A_CloudStack
http://download.cloud.com/releases/2.2.0/api_2.2.11/TOC_User.html

<各言語対応情報>



皆さん情報公開いただいて感謝です。おかげでコードを見ながら、実装することができます。
CloudStackのサイトにJavaのサンプルコードがありましたが、今は見つかりませんでした。
---
2011/11/28追記
CPANでPerlライブラリ公開しましたので、関連リンクを追記しました。
このエントリーをはてなブックマークに追加