9月 09

このサイトは(本日現在)、Rackspace US社の「Cloud Servers」サービス上で
稼働しています。

Cloud ServersはAmazon EC2相当のサービスで、Slicehostなどを買収したRackspaceが運営するXenベースのホスティングサービスです。

EC2ではなくCloud Serversを選んだ理由を、使用感を元にレポートしたいと思います。

目次

安い(=スペックの選択肢が多い)

もうこれに尽きます。

EC2はスモールインスタンスが$0.1/時間で、これ以下のラインナップがありません。
メモリ1.7GB/ディスク160GBのスペックがオーバースペックだとしても、
選ばなければなりません。

1ヶ月(720時間換算)利用すると$72となり、サーバーの能力を生かしきれない場合どうしても割高な印象になってしまいます。

以下にEC2とCloud Serversのスペックと料金を表にまとめました。
ディスク容量やCPU数なども含め同じスペックとは言えないので
あくまで参考としてご覧ください。青文字の行がEC2の標準的なインスタンスです。

メモリ ディスク 論理CPU数 アーキテクチャ 料金/時間 備考
256MB 10GB 64bit $0.015 Cloud Servers
512MB 20GB 64bit $0.030 Cloud Servers
1GB 40GB 64bit $0.060 Cloud Servers
1.7GB 160GB 1 32bit $0.100 EC2(Small)
2GB 80GB 64bit $0.120 Cloud Servers
4GB 160GB 64bit $0.240 Cloud Servers
7.5GB 850GB 4 64bit $0.400 EC2(Large)
8GB 320GB 64bit $0.480 Cloud Servers
15GB 1690GB 8 64bit $0.800 EC2(Extra Large)
15GB 620GB 64bit $0.960 Cloud Servers

Cloud Serversは、メモリ256MB/ディスク10GBのインスタンスから用意されていて、
このミニマムのインスタンスが$0.015/時間で借りることができます。1ヶ月利用で$10.8
256MB以上のインスタンス、例えばメモリ1GB/ディスク40GBのインスタンスでも$0.06/時間。

ディスク容量がネックになる用途以外では魅力的なラインナップではないでしょうか。

特にテスト機や実験機として一時的に利用したいようなケースでは、ロースペック・ローコストはとても助かります。

自動バックアップサービスが無料

バックアップと言ってもデータ自体のバックアップではなく、LVMのスナップショットベースのバックアップになります。
ファイルを個別に取り出すことはできませんが、データを復元する上では全く問題ありません。

このスナップショットがインスタンスごとに3つまでストックできるようになっていて、Web管理ツールから日次/週次でスケジューリングすることが(しないことも)できます。

日次バックアップは「daily」、週次は「weekly」という名前が自動的につけられ、バックアップが実行される度に上書きされていきます。つまり、日次と週次の両方をセットしてもバックアップの枠が1つ余るようになっています。

実は任意のタイミング、任意の名前でもスナップショットがとれ、なおかつスナップショットから新たなインスタンスをつくる(クローンをつくる)こともできるので、EC2で言うところのAMIと同じ用途でバックアップサービスが利用できるわけです。しかも無料で!

現在はミニマムのメモリ256MBのインスタンスから、512MB、1GB、2GBまでのインスタンスがバックアップに対応していて、今後全てのインスタンスに対応する予定だそうです。
EC2と比較してディスク容量が少ないのはこういうところにあるかもしれません。

さらに、Amazon S3相当のサービスであるRackspace Cloud Filesにバックアップイメージを無料で転送できるようにもなるようです。
これが利用可能になって、Xenのゲストイメージが出し入れできるようになれば、例えば自社サーバーのXen環境をそのままクラウドに移したり、逆に戻したり、インフラに縛られることなく簡単にサービス環境を移すことができるようになりそうです。

2009/9/12 追記

重要なことを書き忘れたので追記します。
バックアップはインスタンスに結びついているものなので、インスタンスを削除すると消えてしまいます(インスタンスを停止するという操作はありません)。
つまり、EC2のようにインスタンスをイメージ化して保存することが現時点でできないため、インスタンスのクローンを作成しようとすると、インスタンスを立ち上げ続けておかなければなりません
バックアップの保存が待ち望まれます。

スケールアップ、スケールダウンが簡単

EC2で、サービス稼働中のスモールインスタンスをラージインスタンスにスケールアップさせようとしたら、別途ラージインスタンスを立ち上げて、そこに環境を乗せ変える必要があります。
稼働中のスモールインスタンスのAMIを生成して、そのAMIからラージインスタンスを立ち上げる方法ができそうですが、これはアーキテクチャ(i386/x86_64)が違うためできません。
できたとしても、どちらも別途インスタンスを用意する必要があります。

Cloud Serversのアーキテクチャは全てx86_64なので、ミニマムからマックスまで自在にリサイズ可能です。
インスタンスのリサイズはWeb管理ツール上でほぼ自動でできます。

それでもダウンタイムが発生するので、それが許容できない場合はスナップショットから別途インスタンスを立ち上げる方法もあります。ただし、EC2のElastic IP相当の機能はないので、IPアドレスが変わることを考慮する必要があります。

DNSが無料、しかも逆引きにも対応

EC2ではサポートされていないので、外部にDNSサーバーを用意する必要があります。

Cloud ServersではWeb管理ツールでDNSレコードが登録できます。
dns1.stabletransit.comとdns2.stabletransit.comをレジストラーに登録すれば、このDNSサーバーが利用できるようになりますので、別途DNSサーバーを用意する必要は(とりあえず)ありません。
ライトユーザー向けのサービスかもしれませんが、嬉しいサービスです。

それからIPアドレスからドメイン名を引く「逆引き」をした場合に返すドメイン名の変更にも対応しています。

あまり関係ないかもしれませんが、スパム対策でメールサーバーなどが逆引きをしてドメイン名を確認する場合などがありますので、そういうケースにも安心して利用できます。

その他、補足

帯域の料金

IN OUT
EC2 $0.10 $0.17
Cloud Servers $0.08 $0.22

帯域の料金は、サーバーからみてダウンロードはCloud Serverの方が安いんですが、アップロードはEC2の方が安くなっています。
EC2のように利用量によって単価がさがるプランもないので、動画配信やストリーミングなどの用途では高くつく可能性があるので注意が必要です。

回線の応答速度

気になる回線の応答速度は、同時刻にそれぞれのサーバーから日本のサーバーへpingを飛ばした平均で、EC2が193.592ms、Cloud Serverが152.008ms でした。体感としては同じで、日本からだと遅く感じるのは否めません。

セキュリティー

EC2の場合はSecurity Groupを設定することでサーバーより前でポートを閉じることができますが、Cloud Serversには用意されていません。
インスタンスがDMZに展開されますので、iptablesなどでしっかり対策する必要があります。
ちなみにCentOS5.3で起動した直後はiptablesによって22ポート以外は閉じられていました。

セキュリティーがらみで気になったのは、インスタンスのrootパスワードの発行です。
EC2ではあらかじめ用意した鍵をセキュアな通信で送信し、その鍵を使ってログインする仕様ですが、Cloud ServersではSSL通信のWeb管理ツール上にrootパスワードとIPアドレスが表示されるだけではなく、メールでも同じ内容が送られてきます。これには頭を抱えてしまいました。
自動発行されたrootパスワードはログイン後即効変更しましょう。

参考

http://www.rackspacecloud.com/cloud_hosting_products/servers/compare
http://aws.amazon.com/ec2/
http://www.rackspacecloud.com/cloud_hosting_products/servers/pricing

Tagged with:
9月 07

WordPressのコメントをOpenID対応にしました。
導入目的はコメント書き込みの敷居をいかに下げるかです。

目次

2系→3系の変更点

mixi OpenIDをWordPressで利用する方法 でも紹介しましたが、「WP-OpenID」プラグインが2系から3系に上がり、名称も「OpenID」プラグインになり、コメントフォームに含めるOpenIDのフィールド名が変わりました。

WP-OpenIDプラグイン 2系
<input type="text" name="openid_url" id="openid_url" />

OpenIDプラグイン 3系
<input type="text" name="openid_identifier" id="openid_identifier" />

設定

設定は、敷居を下げる目的なので、
「Don’t require name and e-mail for comments left with verified OpenIDs」をチェックします。
OpenIDプロバイダーになるつもりはないので「OpenID Provider Options」のチェックは全てはずしておきます。

カスタマイズ

標準ではドーンとOpenID(URL)を入力するフォームを用意するだけの簡素なものなので、あらかじめ主要なOpenIDプロバイダーへのログインボタンを用意したものへとカスタマイズしました。

コメント欄キャプチャ

OpenID認証を利用した場合は、名前とメールアドレスの入力を省くことができる設定にしたので、既存のコメントフォームにOpenIDを入力するフォームだけ追加してもユーザビリティーが悪くなります。

対応策として、「通常のコメントフォーム」と「OpenID対応コメントフォーム」を用意して、デフォルトはOpenID対応、クリックによって通常とOpenID対応がtoggleする仕様にしました。

各(X)HTMLにclassとidを付けます。

  • OpenID対応のコメントフォーム(form)にid=”openid_commentform”を設定
  • OpenID対応のコメント欄(textarea)にid=”openid_comment”を設定
  • 各OpenIDプロバイダーの画像にclass=”openid_submit”、それぞれ個別にidを付ける
  • toggleのスイッチになるリンクにid=”comment_toggle”を設定

javascript(jQuery)を追加します。

jQuery(document).ready(function(){

    jQuery(".openid_submit").click(function(){
        if(jQuery('#openid_comment').val() == ''){
            alert('コメントを入力してください。');
            return false;
        }
        var openid_target= jQuery(this).attr('id');
        var openid_url = '';
        if(openid_target == 'mixi'){
                openid_url = 'https://mixi.jp/';
        }else if(openid_target == 'google'){
                openid_url = 'https://www.google.com/accounts/o8/id';
        }else if(openid_target == 'yahoo'){
                openid_url = 'http://yahoo.co.jp/';
        }else if(openid_target == 'livedoor'){
                openid_url = 'http://livedoor.com/';
        }else if(openid_target == 'hatena'){
                var hatena_id = window.prompt("はてなIDを入力して下さい。","");
                if(hatena_id == null) return false;
                openid_url = 'http://www.hatena.ne.jp/'+hatena_id+'/';
        }else if(openid_target == 'other'){
                var open_id = window.prompt("OpenID(URL)を入力して下さい。","");
                if(open_id == null) return false;
                openid_url = open_id;
        }

        if(openid_url == ''){
            alert('不正なOpenIDです。');
            return false;
        }

        jQuery('#openid_identifier').val(openid_url);
        return true;
    });
    jQuery(".openid_submit").mouseover(function(){
        jQuery(this).css('border-color','#e6db55 #dfcd2a #dfcd2a #e6db55');
    });
    jQuery(".openid_submit").mouseout(function(){
        jQuery(this).css('border-color','#CCCCCC #AAAAAA #AAAAAA #CCCCCC');
    });

    jQuery("#commentform").hide();
    jQuery("#comment_toggle").toggle(
            function(){
                jQuery("#openid_commentform").hide();
                jQuery("#commentform").show();
                jQuery('#comment_toggle').text("OpenID認証のコメント欄に切り換え");
            },
            function(){
                jQuery("#commentform").hide();
                jQuery("#openid_commentform").show();
                jQuery('#comment_toggle').text("通常のコメント欄に切り換え");
            }                
    );
});

PHP5.3.0でハマった

このサーバーではWordPressをPHP5.3.0で動かしています。
OpenIDプラグインはPHP OpenID Libraryを内包していて、OpenIDにかかわる実装はこのライブラリに依存していますが、これが5.3.0に対応していないため、素のままでは動きません。

問題の解説と解決方法はこちらのブログが詳細ですので、ご覧ください。
PHP 5.3: 参照渡しの関数/メソッドを定義してた人は call_user_func_array に注意 – 肉とご飯と甘いもの @ sotarok

PHP OpenID Libraryのオフィシャルでも5.2.4までしかテストしてないよと言っているので仕方ないところです。
修正箇所が3箇所なので、パッチを作成しました。パスを変えれば、PHP OpenID Libraryのパッチとしても動くはずです。
wordpress-openid-3.2.3-cloudrop-090907.patch.tar.gz

それから、id:sotarokさんが触れられている時とドキュメントが変わってましたので、触れておきます。

下位互換性のない変更点

旧ドキュメント

引数を参照渡しする関数に値を渡した場合の振る舞いが変更されました。 以前は値渡しとして引数を受け取っていましたが、5.3.x からは warning が生成され、 全ての参照渡しのパラメーターが NULL となります。

現在のドキュメント

引数を参照渡しする関数に値を渡した場合の振る舞いが変更されました。 以前は値渡しとして引数を受け取っていましたが、今は fatal error が発生するようになりました。 参照渡しを期待している関数に定数やリテラルを渡していたコードは、 いったんその値を変数に代入してから関数に渡すよう書き換える必要があります。

Tagged with:
9月 03

cloudrop

cloudropのロゴはLogoTournamentで、アメリカのtsquareさんという方につくっていただきました。と言っても、全く面識ないんですが。

LogoTournamentはコンペ方式で世界中の人にロゴの制作をお願いできるサービスです。
いわゆる、ロゴ制作に特化したクラウドソーシングサービスです。

最低報酬額が$250で、30エントリーに達しなかった場合には返金制度もあります。
詳しくは、このサービスを利用するときに参考にした以下のブログをご覧ください。

利用して感じたことを書きたいと思います。

デザイナーの数が多い

利用して感じたのは、圧倒的に制作者の数が多いこと。
何人登録しているのか数字で出せないので推測の域を出ませんが、英語がネイティブでない国の人も多く参加していて、英語ベースのクラウドソーシングの層の厚さを感じました。
日本にもLancersC-Teamなど、クラウドソーシングのサービスがありますが、コミュニケーションが安心してできる反面、応募数が限られる問題があります。

ことロゴ制作に限っては、「ロゴに母国語を利用してほしい」などの要望がない限り、制作の進行にあまり影響がないのも功を奏していると思います。
下地を白にしてほしい・・・なんてことは、background-color: white,ok?的なもので十分通じます。

安い

今回は賞金を$300として募集をかけました。
手数料として約3%、$9.27が上乗せされた金額が支払い金額で、先月13日のpaypalの為替レートで98.66円/ドル、30,512円でした。

最終的に312個のロゴを応募してもらったので、1個当たり約97.8円。
これは爆安です。

ロゴ制作でググると、「2バージョンまで無料で作ります。その後、気に入った方のロゴをベースに本制作を・・・」みたいなサービスをやっている会社がありますが、お願いする方からすると、イメージがざっくりとしか決まってないのに2バージョンから選ぶなんて怖くてできないし、無料で作る方にしたら普通に手を抜くだろうから、安くできるかもしれないけど、いいものができる可能性は低いと思うんですよね。

質も含めて考えると、数がある分、いいもの(好みに合ったもの)が安くできる思います。

それから、権利関係も明確で、賞金と引き換えに所有権の移管に関する覚書が電磁的に結ばれるようになっています(これが法律的に有効なものなのかどうかは不明)。

データもEPSで入稿してもらえるので、名刺に使ったり

名刺
印刷:オフセット印刷、表 モノクロ1色、裏 カラー1色。
YMCardにて100枚1,800円(送料込)

faviconやiPhone用アイコンなんかにも加工することができます。

favicon iphone_icon

ちなみにコンテスト(コンペ)は基本的に公開制で、参加者以外も見ることができます。
それが嫌な場合は、+$50支払ってプライベートモードにすることもできます。

とりあえず、ロゴ・名刺~コーポレートサイト制作を手がけるサービスを安価に提供できる気がしました。
パッケージ化できたらラインナップに加えます。

Tagged with:
preload preload preload