<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>cloudrop</title>
	<atom:link href="http://cloudrop.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://cloudrop.jp</link>
	<description>クラウド使ったインターネットサービスの技術支援、ウェブサービスの開発</description>
	<lastBuildDate>Wed, 25 Aug 2010 15:49:43 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/feed" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>CentOS4.8からCentOS5.5へアップグレードしたメモ</title>
		<link>http://cloudrop.jp/server/upgrade_memp_centos4to5?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=upgrade_memp_centos4to5</link>
		<comments>http://cloudrop.jp/server/upgrade_memp_centos4to5#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:49:43 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[サーバー]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[GRUB]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=523</guid>
		<description><![CDATA[最近仮想OSばかり触っているので、たまにいじったサーバーのOSアップグレードメモです。
アップグレードするサーバーにはDVDドライブが付いていたので、DVDブートで挑戦してみました。
CentOS5.5のISOを落として [...]]]></description>
			<content:encoded><![CDATA[<p>最近仮想OSばかり触っているので、たまにいじったサーバーのOSアップグレードメモです。<br />
アップグレードするサーバーにはDVDドライブが付いていたので、DVDブートで挑戦してみました。</p>
<h3 id="toc-centos5-5isodvd">CentOS5.5のISOを落としてDVD化</h3>
<p>ISOはこちらから落としました。<br />
<a href="http://ftp.riken.jp/Linux/centos/5.5/isos/i386/">http://ftp.riken.jp/Linux/centos/5.5/isos/i386/</a>CentOS-5.5-i386-bin-DVD.iso</p>
<h3 id="toc-dvd">DVDでブートして上書きインストール</h3>
<p>ブートして通常通りインストールを進めていくと、インストーラーが既存のOSをチェックして「CentOS4.8に上書き」 or「再インストール」とたずねてくるので、上書きを指示します。</p>
<p>その後、DVDからハードディスクへファイルのコピーが始まります。コピーするファイル数、合計のバイト数、その途中経過を表示しながら進んでいきます。</p>
<h4 id="toc-1">トラブル1「インストール途中で止まる」</h4>
<p>残り40ファイル、50MBくらいあるファイルをコピーした直後、インストーラーがフリーズしてしまいました。この時点で上書きされたファイルとそうでないファイルが同居しているという気持ち悪い状況でしたが、迷わずCtrl+Alt+Delで強制再起動。<br />
再度DVDブートして進めていくと、ちゃんと途中から始まりました。賢いインストーラーです。<br />
（途中で上書き or 再インストール？の質問時にラベルが「CentOS5.5」になってしまっていましたが、ここも上書きを選びます。）</p>
<h4 id="toc-2grub">トラブル2「Grubで止まる」</h4>
<p>無事インストールが終わって、DVDを取り出して再起動すると、「GRUB loading stage 2 」とGRUBのところでストップ。<br />
どうもブートローダーが正しく上書きされなかったようです。再度DVDを入れDVDブートします。<br />
起動コマンド入力プロンプトで「linux rescue &lt;enter&gt;」と入れてレスキューモードに入り、シェルのプロンプトが表示されたら、</p>
<pre class="terminal">
chroot /mnt/sysimage
grub-install /dev/sda
</pre>
<p>とGRUBを再インストールします。インストール先のデバイス（/dev/sdaの部分）は環境によって変わるのでdfコマンドなどで確認します。</p>
<h3 id="toc-">無事起動</h3>
<p>DVDを取り出して再起動すると、無事起動しました。<br />
ところが、</p>
<h4 id="toc-3yum">トラブル3「yumがエラーで起動しない」</h4>
<p>yumを実行すると、</p>
<pre class="terminal">
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   No module named sqlite

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.4.3 (#1, Sep  3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]

If you cannot solve this problem yourself, please go to
the yum faq at:

http://wiki.linux.duke.edu/YumFaq
</pre>
<p>とエラーが表示されて起動できません。</p>
<p>python-sqliteはすでにインストールされているのですが、このエラーが表示されます。</p>
<p>yumが使えないのでrpmファイルを落としてきて、強制的に上書きします。</p>
<pre class="terminal">
wget http://mirror.centos.org/centos-5/5.5/os/i386/CentOS/python-sqlite-1.1.7-1.2.1.i386.rpm
rpm -Uvh python-sqlite-1.1.7-1.2.1.i386.rpm <span style="color:#0f0;">--force</span>
</pre>
<p>（&#8211;forceを付けないとすでにインストールされている！と取り合ってくれません。）</p>
<h3 id="toc-yum">yumでアップデート</h3>
<p>4系から5系にアップデートしたので不具合が起こらないようにyumのキャッシュを消してからアップデートします。</p>
<pre class="terminal">
sudo yum clean all
sudo yum update
</pre>
<p>以上で、現在も正常に動いています。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/server/upgrade_memp_centos4to5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/server/upgrade_memp_centos4to5" />
	</item>
		<item>
		<title>さくらのVPSにMongoDB+PHP+Apacheをインストールしたメモ</title>
		<link>http://cloudrop.jp/labs/install_memo_on_sakuravps?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=install_memo_on_sakuravps</link>
		<comments>http://cloudrop.jp/labs/install_memo_on_sakuravps#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:02:43 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[実験・研究]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[PHP5.3]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Twitter Streaming API]]></category>
		<category><![CDATA[さくらのVPS]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=493</guid>
		<description><![CDATA[Twitter Client Ranking by Streaming APIの構成は、
PHP5.3.3(with APC) + MongoDB1.6.1 + Apache2.2.3で、フレームワークにsyfmony1 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tr.labs.cloudrop.jp/">Twitter Client Ranking by Streaming API</a>の構成は、<br />
PHP5.3.3(with APC) + MongoDB1.6.1 + Apache2.2.3で、フレームワークにsyfmony1.4.6を利用しています。この構成が動く最低限の環境を構築した際のメモです。<br />
さくらのVPSはサービスはほとんど入っていませんでしたが、gccやautoconfは既に入っていました。</p>
<pre class="terminal">
<span style="color:#0F0;">#Apache</span>
sudo yum install httpd.x86_64

<span style="color:#0F0;">#PHPのコンパイルに必要（パラメータによる）</span>
sudo yum install httpd-devel.x86_64
sudo yum install libxml2-devel.x86_64
sudo yum install openssl-devel.x86_64
sudo yum install curl-devel.x86_64

<span style="color:#0F0;">#最新版PHP取得→コンパイル→インストール</span>
wget http://ve2.php.net/get/php-5.3.3.tar.gz/from/jp2.php.net/mirror
tar vfxz php-5.3.3.tar.gz
cd php-5.3.3
./configure \
--enable-mbstring \
--with-apxs2=/usr/sbin/apxs \
--with-curl \
--with-openssl \
--with-config-file-path=/etc  \
--enable-dom \
--with-libdir=lib64
meke
sudo make install

<span style="color:#0F0;">#symfonyのインストール</span>
sudo pear channel-discover pear.symfony-project.com
sudo pear install symfony/symfony

<span style="color:#0F0;">#PHP拡張のインストール</span>
sudo pecl install apc
sudo pecl install mongo

<span style="color:#0F0;">#PHP拡張の反映</span>
sudo vi /etc/php.ini

extension = mongo.so
extension = apc.so
apc.enabled=1
</pre>
<p>PHPも<a href="http://rpms.famillecollet.com/">Remi</a>のリポジトリを利用すると簡単に最新版がインストールできますが、cli版が<strong>バックグラウンドで実行できない不具合</strong>があるのでソース版を利用しました。</p>
<h4 id="toc-">参考</h4>
<ul>
<li><a href="http://memorandum.yamasnet.com/archives/Post-165.html">CentOS 5.2上でPHP 5.2.6にアップグレード</a></li>
<li><a href="http://a98.jugem.jp/?eid=371">CentOS 5.3 に php-5.2.9, mysql-5.1.35 をインストール(remi レポジットリより)</a></li>
</ul>
<h3 id="toc-mongodb">MongoDBをインストール</h3>
<p>下記URLを参考にMongoDBのリポジトリを設定してインストールします。<br />
参考：<a href="http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages">CentOS and Fedora Packages</a></p>
<pre class="terminal">
sudo vi /etc/yum.repos.d/10gen.repo 

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
gpgcheck=0

sudo yum install mongo-stable* --enablerepo=10gen
</pre>
<p>最新のstableバージョン1.6.1がインストールされます（2010年8月19日現在）。デフォルトの設定は以下の通りです。<br />
設定ファイル：/etc/mongod.conf<br />
ログファイル：/var/log/mongo/mongod.log<br />
データディレクトリ：/var/lib/mongo/</p>
<p>起動は起動スクリプトでOK</p>
<pre class="terminal">
sudo /etc/init.d/mongod start
</pre>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/labs/install_memo_on_sakuravps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/labs/install_memo_on_sakuravps" />
	</item>
		<item>
		<title>さくらのVPS+MongoDBでTwitterクライアントランキングを作ってみた</title>
		<link>http://cloudrop.jp/labs/mongodb_on_sakura_vps?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mongodb_on_sakura_vps</link>
		<comments>http://cloudrop.jp/labs/mongodb_on_sakura_vps#comments</comments>
		<pubDate>Tue, 17 Aug 2010 03:46:15 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[実験・研究]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[さくらのVPS]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=460</guid>
		<description><![CDATA[

はじめに
さくらのVPS
Twitter Streaming API
MongoDB
使い方


はじめに
さくらのVPSをベータ*1として使わせてもらっているのに何もしないのはもったいない＆申し訳ないので、Twit [...]]]></description>
			<content:encoded><![CDATA[<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-">はじめに</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-vps">さくらのVPS</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-twitter-streaming-api">Twitter Streaming API</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-mongodb">MongoDB</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-1">使い方</a></li>
</ol>
</div>
<h3 id="toc-">はじめに</h3>
<p>さくらのVPSをベータ<a href="#fc001">*1</a>として使わせてもらっているのに何もしないのはもったいない＆申し訳ないので、<a href="http://tr.labs.cloudrop.jp/">Twitter Client Ranking by Streaming API</a>というのを、さくらのVPSのパフォーマンスとMongoDBのパフォーマンス・使用感をテーマに実験的に作ってみました。</p>
<p>TwitterのStreaming APIからツイートを取得、保存、解析してどんなクライアントが使われているかをランキング形式に表示するという単純なものです。</p>
<p>解析結果をブログで公開している例があるものの、なかなか直近で連続的なデータを公開しているところがなかったので、勢いで作りました。</p>
<h3 id="toc-vps">さくらのVPS</h3>
<p>さくらのVPSの仕様は以下の通りです。</p>
<table id="sakura_table">
<tr>
<th>メモリ</th>
<td>512MB</td>
</tr>
<tr>
<th>HDD</th>
<td>20GB</td>
</tr>
<tr>
<th>回線</th>
<td>100Mbps</td>
</tr>
<tr>
<th>OS</th>
<td>CentOS 5 x86_64</td>
</tr>
<tr>
<th>グローバル IP アドレス</th>
<td>IPv4 アドレス×1 個</td>
</tr>
<tr>
<th>データ転送量</th>
<td>無制限</td>
</tr>
<tr>
<th>管理者権限</th>
<td>root 権限付与</td>
</tr>
</table>
<p>データを継続的に保存するのにHDDが20GBと心許ないので古くなったデータはどんどん削除していく必要がありそうです。一方でデータ転送量が無制限となっているので、APIからの取得に（料金的な意味で）気を使う必要はなさそうです。<br />
OSは最新のCentOS5.5で、サービスはsendmailとssh以外は何も入っていないので、httpdなどを自由に追加して利用します。また、ポートはすべて公開状態なのでiptablesを設定、有効にすることも必要です。</p>
<h3 id="toc-twitter-streaming-api">Twitter Streaming API</h3>
<p><a href="http://dev.twitter.com/pages/streaming_api">Twitter Streaming API</a>のstatuses/sampleメソッドを利用します。sampleメソッドは公開タイムラインの1%未満がサンプリングされたデータとなります。実際にアクセスをしてみると1分間に350〜650ツイート取得でき、量にかなりムラがあることがわかりました。<br />
HDDの容量を考えて、データはcronで6分毎に1分間取得することにしたので、サンプルは1/6%、全ツイートの約0.167%未満になりそうです。数日間取得してみたところ、1日で約10万〜12万ツイートをサンプリングできています。</p>
<h3 id="toc-mongodb">MongoDB</h3>
<p>MongoDBはドキュメント指向DBと呼ばれる仲間で、Key-Value StoreにRDBMSの色を少し足したようなイメージです。スキーマはダイナミックに変更できる一方で、SQLこそ使えないものの、where, sort, limit, group(by), max, min,などが用意されていて、RDBMSに慣れている人にもとっつきやすいと思います。<br />
さらに、スケールアウトを容易にするSharding機能を標準装備していて、分散したデータベースから複雑な集計ができるMap/Reduceが利用できます。</p>
<p>RDBMSでDBやテーブルにデータを入れようと思った時はあらかじめCREATEしておく必要がありますが、MongoDBは必要ないので存在しないDBやコレクション（RDBMSでいうテーブル）にいきなりデータを投入してもエラーは出ず、コレクションやDBすらダイナミックに作られます。この辺りの挙動はファイル操作に近いので、日付ごとにダイナミックにコレクションを作ることもでき、今回のログの保管などの用途にも適しています。</p>
<p>日付ごとにコレクションを作り、値にはtimestamp, date, source, source_url, time_zone, utc_offset, langを保存することにしました。Sharding環境ではないのでMap/Reduceの力を発揮することもできないのですが、実験的な意味で、データの集計にはMap/Reduce<a href="#fc002">*2</a>を利用しています。</p>
<h3 id="toc-1">使い方</h3>
<p>デフォルトは1日前のサンプリングしたすべてのデータが表示されます。そこから、日付、Lang、Time zone、UTC offsetで絞り込みすることで様々な形で抽出することができます。<br />
例えば、「8月12日のツイートの中から東京（time_zone=Tokyo）で日本語（lang=ja）のツイートをするのに利用されているクライアント」などを抽出・集計することができます。</p>
<p>ランキングだけでは味気ないので、TOP10を円グラフで表すのと、各クライアントが時間ごとにどのくらい利用されているのか3つまで比較出来る機能を用意してみました。住んでいるところやクライアントの種類で利用されている時間外が全然違うのがわかります。</p>
<p>現状、なかなかもっさりとした感じなので、イライラするかもしれません。<br />
実験なので、負荷の問題でサービスを終了するかもしれませんし、逆に、作っただけではなくMongoDBのTipsやチューニングなどで改善し、それをさらにネタにして行きたいとも思っています。</p>
<blockquote><p>
<a name="fc001" id="fc001">*1</a>&#160;7月15日〜8月31日までクローズドベータとして会員限定でプレリリースされたホスティングサービス。2010年9月1日から初期費用無料、月額980円の「さくらのVPS 980」として正式リリースされる。</p>
<p><a name="fc002" id="fc002">*2</a>&#160;今回の実験ではmapReduce()よりgroup()を使った集計の方が速度が速いことが多かったので、当日分のリアルタイム集計ではgroup()を利用しています。mapReduce()の結果は新しくコレクションとして保存することができるので、過去分に関してはmapReduce()で抽出→コレクションとして保存→そこから再集計という実装にしています。
</p></blockquote>
<style type="text/css">
table#sakura_table{
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-left: 1px solid #ccc;
margin-bottom: 15px;
padding:0;
border-collapse:collapse;
}
table#sakura_table th{
border-right: 1px solid #ccc;
border-top: 1px solid #ccc;
padding:2px 2px;
}
table#sakura_table td{
border-top: 1px solid #ccc;
padding:2px 2px;
}
</style>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/labs/mongodb_on_sakura_vps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/labs/mongodb_on_sakura_vps" />
	</item>
		<item>
		<title>symfony1.4(Doctrine1.2)でMySQLのcollationを設定するメモ</title>
		<link>http://cloudrop.jp/symfony/mysql_collation_setting?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql_collation_setting</link>
		<comments>http://cloudrop.jp/symfony/mysql_collation_setting#comments</comments>
		<pubDate>Tue, 02 Feb 2010 06:37:38 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=438</guid>
		<description><![CDATA[環境による問題を起こさないための設定。
databases.ymlの設定がどの段階で効くのかは不明。
config/databases.yml

all:
  master:
    class: sfDoctrineD [...]]]></description>
			<content:encoded><![CDATA[<p>環境による問題を起こさないための設定。<br />
databases.ymlの設定がどの段階で効くのかは不明。</p>
<p>config/databases.yml</p>
<pre class="terminal">
all:
  master:
    class: sfDoctrineDatabase
    param:
      dsn:      mysql:host=localhost;dbname=test
      username: root
      password:
      attributes:
        default_table_charset: utf8
        <span style="color: yellow;">default_table_collate: utf8_general_ci</span>
</pre>
<p>config/doctrine/schema.yml</p>
<pre class="terminal">
Users:
  connection: master
  tableName: users
  actAs:
    Timestampable: ~
  options:
    <span style="color: yellow;">collation: utf8_general_ci</span>
    charset: utf8
    type: INNODB
  columns:
    id:
      type: integer(4)
      primary: true
      unsigned: true
      autoincrement: true
    name:
      type: string(255)
      notnull: true
</pre>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/symfony/mysql_collation_setting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/symfony/mysql_collation_setting" />
	</item>
		<item>
		<title>モバイル向けTwitterクライアントをsymfonyで作った</title>
		<link>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=twitter_client_for_mobile_by_symfony</link>
		<comments>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#comments</comments>
		<pubDate>Mon, 07 Dec 2009 16:47:44 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[yubitter]]></category>
		<category><![CDATA[オープンソース]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=378</guid>
		<description><![CDATA[『yubitter』という携帯電話向けのTwitterクライアントサービス（ゲートウェイ）をsymfonyで作りました。（サービスの詳細はリンク先でご確認下さい。）

cloudrop発のアウトプットとして開発に取り組ん [...]]]></description>
			<content:encoded><![CDATA[<p>『<a href="http://yubitter.com/">yubitter</a>』という携帯電話向けのTwitterクライアントサービス（ゲートウェイ）を<a href="http://symfony-project.org/">symfony</a>で作りました。（サービスの詳細はリンク先でご確認下さい。）</p>
<p><a href="http://yubitter.com/"><img src="http://cloudrop.jp/wp-content/uploads/2009/12/yubitter_banner.png" alt="yubitter" title="yubitter" width="615" height="92" class="alignnone size-full wp-image-411" /></a></p>
<p>cloudrop発のアウトプットとして開発に取り組んだもので、初めてのリリースとなります。<br />
タイトルにはsymfonyと書きましたが、開発には数多くのオープソースソフトウェアのお世話になっています。</p>
<p>できる事ならyubitterもソースを公開したいのですが、利用しているライブラリのライセンスの確認、環境依存部分の抽象化、symfony1.4系への対応、ドイヒーなコードの修正などを行う必要があり、今は難しいところです。<br />
最終的にはそういう諸々を乗り越えての公開を目指して行きたいと思っています。</p>
<p>事実上のモバイル向けクライアントの標準である<a href="http://movatwitter.jp/">モバツイッター</a>や、多機能でアジャイルな<a href="http://movatter.jp/">Movatter</a>、さらには公式の携帯版がある中で、いまさら感の否めないサービスですから、サービス自体による貢献というよりも、サービスやシステムの内部を公開することによる貢献を目指していくつもりです。</p>
<p>そういう意味でも、開発・運用をするにあたっての裏話はどんどん公開していきたいと思います。</p>
<p>もちろん、魅力のないサービスは、システムとしても魅力がないのと同じなので、<br />
サービスとしておざなりにするということではありません。</p>
<p>サービスに関する質問や不具合の報告などは、Twitterで受け付けております。<br />
お気軽にお問い合わせください。（<a href="http://twitter.com/ms76">@ms76</a>）</p>
<p>最後に、利用させていただいているサービスやソフトウェアを紹介いたします。（順不同）<br />
この場を借りて、感謝いたします。ありがとうございます。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-">インフラ</a></p>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-rackspace-cloud-servers">Rackspace Cloud Servers</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-s3">Amazon S3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-cloudfront">Amazon CloudFront</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-os">OS・サーバー・ミドルウェア</a>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-centos-5-3">CentOS 5.3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-apache-2-2-13php-5-3-0">Apache 2.2.13、PHP 5.3.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-mysql-5-0-77">MySQL 5.0.77</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-squid-2-6-stable21">Squid 2.6.STABLE21</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-postfix-2-3-3">Postfix 2.3.3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-flare-1-0-8">flare 1.0.8</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-phppear">PHP、PEARライブラリ</a>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-symfony-1-2-10">symfony 1.2.10</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-mail_mime-1-5-2mail_mimedecode-1-5-1">Mail_Mime  1.5.2、Mail_mimeDecode 1.5.1</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-net_ipv4-1-3-1">Net_IPv4  1.3.1</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-net_useragent_mobile-1-0-0">Net_UserAgent_Mobile 1.0.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-s3-php-class-0-4-0">Amazon S3 PHP class 0.4.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-qdmail-1-2-6b">qdmail 1.2.6b</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-twitteroauth-library">TwitterOAuth library</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-qrcode-image-php-scripts-version-0-50g">QRcode image PHP scripts  version 0.50g</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-html_css_mobile">HTML_CSS_Mobile </a></li>
</ol>
</li>
</ol>
</div>
<h3 id="toc-">インフラ</h3>
<h4 id="toc-rackspace-cloud-servers">Rackspace Cloud Servers</h4>
<p>Webサーバー、アプリケーションサーバー、DBサーバー、セッションサーバーとして利用。</p>
<ul>
<li><a href="http://www.rackspacecloud.com/cloud_hosting_products/servers">Cloud Servers &#8211; Powerful Cloud Computing Servers by Rackspace</a></li>
</ul>
<h4 id="toc-amazon-s3">Amazon S3</h4>
<p>メールによる写真アップロードを受け取るストレージサーバーとして利用。</p>
<ul>
<li><a href="http://aws.amazon.com/s3/">Amazon Simple Storage Service (Amazon S3)</a></li>
</ul>
<h4 id="toc-amazon-cloudfront">Amazon CloudFront</h4>
<p>ストレージサーバーのフロントエンドとして利用。</p>
<ul>
<li><a href="http://aws.amazon.com/cloudfront/">Amazon CloudFront</a></li>
</ul>
<h3 id="toc-os">OS・サーバー・ミドルウェア</h3>
<h4 id="toc-centos-5-3">CentOS 5.3</h4>
<p>Rackspace Cloud Serversにて標準で選択できるOSを利用。</p>
<ul>
<li><a href="http://www.centos.org/">www.centos.org &#8211; The Community ENTerprise Operating System</a></li>
</ul>
<h4 id="toc-apache-2-2-13php-5-3-0">Apache 2.2.13、PHP 5.3.0</h4>
<p>Webサーバー、アプリケーションサーバー（mod_php）として利用。</p>
<ul>
<li><a href="http://httpd.apache.org/">Welcome! &#8211; The Apache HTTP Server Project</a></li>
<li><a href="http://www.php.net/">PHP: Hypertext Preprocessor</a></li>
</ul>
<h4 id="toc-mysql-5-0-77">MySQL 5.0.77</h4>
<p>DBサーバーとして認証用ユーザー情報、設定情報などの保存に利用。</p>
<ul>
<li><a href="http://www.mysql.com/">MySQL ::  The world&#8217;s most popular open source database</a></li>
</ul>
<h4 id="toc-squid-2-6-stable21">Squid 2.6.STABLE21</h4>
<p>外部API接続時のプロキシキャッシュサーバーとして利用。</p>
<ul>
<li><a href="http://www.squid-cache.org/">squid : Optimising Web Delivery</a></li>
</ul>
<h4 id="toc-postfix-2-3-3">Postfix 2.3.3</h4>
<p>メール投稿、メール登録、メール送信時のメールサーバーとして利用。</p>
<ul>
<li><a href="http://www.postfix.org/">The Postfix Home Page</a></li>
</ul>
<h4 id="toc-flare-1-0-8">flare 1.0.8</h4>
<p>セッションサーバーとして利用。</p>
<ul>
<li><a href="http://labs.gree.jp/Top/OpenSource/Flare.html">Flare  &#8211; GREE Labs</a></li>
</ul>
<h3 id="toc-phppear">PHP、PEARライブラリ</h3>
<h4 id="toc-symfony-1-2-10">symfony 1.2.10</h4>
<p>Webフレームワークとして利用。</p>
<ul>
<li><a href="http://www.symfony-project.org/">symfony | Web PHP Framework</a></li>
</ul>
<p>携帯向けに下記プラグインを利用。</p>
<ul>
<li><a href="http://openpear.org/package/sfMobileIPPlugin">sfMobileIPPlugin</a></li>
<li><a href="http://blog.asial.co.jp/380">sfPictogramMobilePlugin</a></li>
</ul>
<h4 id="toc-mail_mime-1-5-2mail_mimedecode-1-5-1">Mail_Mime  1.5.2、Mail_mimeDecode 1.5.1</h4>
<p>受信したメールの処理に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Mail_Mime">Mail_Mime</a></li>
<li><a href="http://pear.php.net/package/Mail_mimeDecode">Mail_mimeDecode</a></li>
</ul>
<h4 id="toc-net_ipv4-1-3-1">Net_IPv4  1.3.1</h4>
<p>IPアドレスが特定のネットワークアドレスの範囲にあるかどうかの計算に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Net_IPv4">Net_IPv4</a></li>
</ul>
<h4 id="toc-net_useragent_mobile-1-0-0">Net_UserAgent_Mobile 1.0.0</h4>
<p>携帯電話のUser Agentの取得に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Net_UserAgent_Mobile/">Net_UserAgent_Mobile </a></li>
</ul>
<h4 id="toc-amazon-s3-php-class-0-4-0">Amazon S3 PHP class 0.4.0</h4>
<p>Amazon S3 APIとの通信に利用。</p>
<ul>
<li><a href="http://code.google.com/p/amazon-s3-php-class/">amazon-s3-php-class &#8211; Project Hosting on Google Code</a></li>
</ul>
<h4 id="toc-qdmail-1-2-6b">qdmail 1.2.6b</h4>
<p>メール送信に利用。</p>
<ul>
<li><a href="http://hal456.net/qdmail/">PHP高機能日本語メール送信ライブラリ・文字化けフリー &#8211; Qdmail &#8211; PHP::Mail Library , Quick and Detailed for Multibyte</a></li>
</ul>
<h4 id="toc-twitteroauth-library">TwitterOAuth library</h4>
<p>Twitter APIのOAuth認証に利用。</p>
<ul>
<li><a href="https://docs.google.com/View?docID=dcf2dzzs_2339fzbfsf4">Twitter-OAuth-PHP</a></li>
</ul>
<h4 id="toc-qrcode-image-php-scripts-version-0-50g">QRcode image PHP scripts  version 0.50g</h4>
<p>QRコード生成に利用。</p>
<ul>
<li><a href="http://www.swetake.com/qr/qr_cgi.html">ＱＲコード CGI &amp; PHP scripts &#8211; QRcode generator for perl &amp; php</a></li>
</ul>
<h4 id="toc-html_css_mobile">HTML_CSS_Mobile </h4>
<p>外部CSSをインラインCSSに変換する際に利用。</p>
<ul>
<li><a href="http://openpear.org/package/HTML_CSS_Mobile">HTML_CSS_Mobile &#8211; Openpear</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony" />
	</item>
		<item>
		<title>Google Analyticsで正確な数字をとるための設定</title>
		<link>http://cloudrop.jp/access_analytics/setting?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=setting</link>
		<comments>http://cloudrop.jp/access_analytics/setting#comments</comments>
		<pubDate>Thu, 29 Oct 2009 10:00:55 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[アクセス解析]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Google Analytics]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=94</guid>
		<description><![CDATA[

アクセス解析の実態
Google Analyticsで測る
内部アクセスの排除

フィルタ マネージャを設定する
IPアドレスで除外する
クッキーで除外する
番外編：Apacheのアクセスログで応用する




アク [...]]]></description>
			<content:encoded><![CDATA[<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-">アクセス解析の実態</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-google-analytics">Google Analyticsで測る</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-1">内部アクセスの排除</a>
<ol>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc--">フィルタ マネージャを設定する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-ip">IPアドレスで除外する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-2">クッキーで除外する</a></li>
<li><a href="http://cloudrop.jp/access_analytics/setting#toc-apache">番外編：Apacheのアクセスログで応用する</a></li>
</ol>
</li>
</ol>
</div>
<h3 id="toc-">アクセス解析の実態</h3>
<p>ネット業界では、ページビュー数（以下PV）やユニークユーザー数が企業やサービスの指標にされる一方で、そのアクセスを計測する方法が業界内で統一されておらず、ロボットやRSSへのアクセスもPVに加える上場企業があったり、酷いところでは画像やCSSのロード（アクセス）までをもPVに加えて水増し、バリューがあるかのように見せかけてるケースもあります（気をつけて！）。</p>
<h3 id="toc-google-analytics">Google Analyticsで測る</h3>
<p>そんな中、Google Analyticsは導入が簡単・高性能、しかも無料ということでPCサイトのアクセス解析ではもはや業界標準になっていると思います。多くの人が使っているということは、例え計測方法がブラックボックスだったとしても「Google Analyticsで計測した値」同士を比較することで、相対的な数字として信頼のできる結果を導くことができます。</p>
<h3 id="toc-1">内部アクセスの排除</h3>
<p>ところが、簡単に導入できる反面Google Analyticsでも設定を行わないと正確な値を取ることができません。それは、自分たちの内部アクセスを排除する設定です。</p>
<p>設定を知らないのか、少しでもPVを稼ぎたいのか、内部アクセスを含めてしまっているケースを多々見かけるので、啓蒙を兼ねて設定方法を書きたいと思います。</p>
<p>正しい戦略は正しい数字から。正しい数字は正しい設定から。</p>
<p><strong>参考サイト</strong></p>
<ul>
<li> <a href="https://www.google.com/support/googleanalytics/bin/answer.py?answer=55481&amp;hl=ja_JP&amp;utm_id=ad">社内からのアクセスを除外するにはどうすればよいですか？ &#8211; Analytics ヘルプ</a></li>
</ul>
<p>上記参考サイトの通りなのですが、ヘルプなのに全然優しくないのがGoogleっぽいです。</p>
<h4 id="toc--">フィルタ マネージャを設定する</h4>
<p>Google Analyticsで解析方法をカスタマイズするには、フィルタ マネージャでフィルタを設定します。トップページ右下の「フィルタ マネージャ」をクリックします。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting01.png"><img class="alignnone size-large wp-image-322" title="ga_setting01" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting01-1024x769.png" alt="ga_setting01" width="500" height="375" /></a></p>
<p>次に「フィルタを追加」をクリックします。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting02.png"><img class="alignnone size-large wp-image-319" title="ga_setting02" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting02-1024x561.png" alt="ga_setting02" width="500" height="274" /></a></p>
<p>以下、順次フィルタ追加画面でフィルタを設定していきます。</p>
<h4 id="toc-ip">IPアドレスで除外する</h4>
<p>社内からなどの内部アクセス元のIPアドレスが固定の場合や、開発環境・テスト環境のアクセス元IP<br />
アドレスがあらかじめ分かっている場合に設定しておく方法です。</p>
<p>既定のフィルタ ＞ IPアドレスからのトラフィック を設定します（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting03.png"><img class="alignnone size-large wp-image-321" title="ga_setting03" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting03-1024x597.png" alt="ga_setting03" width="500" height="293" /></a></p>
<p>上の設定画面ではIPアドレスをサブネットマスクなどを使って範囲で指定することができないので、その場合はカスタムフィルタ（ユーザーのIPアドレス）を使って正規表現で頑張る必要があります。</p>
<p>例えばアクセス元のIPアドレスが192.168.0.0/24だった場合は、<br />
^192\.168\.0\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))$<br />
となります。</p>
<p>この正規表現を生成してくれるツールはGoogleのヘルプにあるので、それを利用しましょう。</p>
<ul>
<li><a href="http://www.google.com/support/googleanalytics/bin/answer.py?answer=55572&#038;cbid=ku8145ufakfi&#038;src=cb&#038;lev=answer">IP アドレスの範囲を指定して、そこからのトラフィックを除外するにはどうしたらよいですか？</a></li>
</ul>
<p>カスタムフィルタ ＞ ユーザーのIPアドレス を設定します（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting05.png"><img class="alignnone size-large wp-image-343" title="ga_setting05" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting05-1024x769.png" alt="ga_setting05" width="500" height="375" /></a></p>
<blockquote><p>
開発環境やテスト環境でのアクセスを除外する方法は、IPアドレス以外にもドメイン名でルールを決めたり（テスト環境のホスト名にはtest.example.comなどのように必ずtest.を付けるとか）、アプリケーション内でGoogle Analyticsコードを出力しないようにプログラマーが頑張ったりする方法もありますが、Google Analyticsを管理する部門と開発部門が同じとも限りませんし、変更が少なく管理が分離しやすいアクセス元IPアドレスで処理する方法がいいと思います。
</p></blockquote>
<h4 id="toc-2">クッキーで除外する</h4>
<p>これは管理が煩雑でお勧めはできません。<br />
アクセス元IPアドレスで除外しきれいないアクセス数が全体から見て無視できる程少なければ、IP<br />
アドレスだけでいいと思います。</p>
<p>完璧主義の人や、出先の無線LANスポットやイーモバイル、iPhoneなどから無視できない程頻繁に中の人がアクセスする場合は、クッキーを利用して除外します。</p>
<p>原理としては、除外したいクライアント（ブラウザー）に目印となる保存期間の長いクッキーを送信しておき、そのクッキーを持っているクライアントからアクセスがあった場合に除外をします。</p>
<p>まず目印となるキーワードを「ユーザー定義」というフィールドに設定しておきます。ここではキーワードを「self_access」としておきます。（クリックで拡大）<br />
<a href="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting04.png"><img class="alignnone size-large wp-image-320" title="ga_setting04" src="http://cloudrop.jp/wp-content/uploads/2009/10/ga_setting04-1024x770.png" alt="ga_setting04" width="500" height="376" /></a></p>
<p>次にクッキーを送信する方法を用意します。</p>
<p>Googleのヘルプには、</p>
<pre class="terminal">
&lt;body onLoad=&quot;javascript:pageTracker._setVar('self_access');&quot;&gt;
</pre>
<p>とbodyタグにJavascriptを埋め込んだコードを書き、除外対象と同じドメインにアップロードしてアクセスするように説明があります。</p>
<p>要は解析用のコードで実行している_gat._getTracker()で取り出したオブジェクト「pageTracker」内の_setVar()にキーワードを渡して実行すると、setCookie()が実行される仕組みです。<br />
ちなみにこのクッキーは「__utmv」という名前で2年間の有効期限で発行されます。</p>
<p>管理が大変だというのは、除外対象のドメインごとにクッキーを発行する仕組みを用意して、さらにクライアントにアクセスさせないといけないというところです。</p>
<p>実践しようしたら、中の人が必ずアクセスする管理ページなどにiframeで除外対象の各ドメインにおいてあるクッキーを発行するURLを読み込ませるなどの力技になってしまいそうです。</p>
<p>間違って一般のユーザーがアクセスできるページでこのクッキーを発行してしまうと、アクセス数がゼロになるので慎重に。</p>
<h4 id="toc-apache">番外編：Apacheのアクセスログで応用する</h4>
<p>アクセス元IPアドレスやクッキーで解析結果から除外する方法は、Apacheのアクセスログにも応用できます。</p>
<p>この設定をすることで、access_logには内部アクセスのログは書き込まれず、内部アクセスのログはlocal_access_logへ書き出されるようになります。</p>
<pre class="terminal">
# 必要なモジュール
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule log_config_module modules/mod_log_config.so

&lt;IfModule setenvif_module&gt;
    # アクセス元IPアドレスで判断
    SetEnvIf Remote_Addr 127.0.0.1 local_log no_log
    SetEnvIf Remote_Addr 192.168.0. local_log no_log

    # Google Analyticsで設定したCookieで判断
    SetEnvIf Cookie &quot;__utmv=[0-9]+\.self_access&quot; local_log no_log

    # （番外）ロボット系もこの程度の設定でだいぶ省けるんですけどね
    SetEnvIf User-Agent &quot;[bB]ot&quot; no_log
    SetEnvIf User-Agent &quot;[sS]pider&quot; no_log
    SetEnvIf User-Agent &quot;[cC]rawler&quot; no_log
    SetEnvIf User-Agent &quot;[rR][sS][sS]&quot; no_log
    SetEnvIf User-Agent &quot;[fF]eed&quot; no_log
&lt;/IfModule&gt;

&lt;IfModule log_config_module&gt;
    CustomLog logs/access_log combined env=!no_log
    CustomLog logs/local_access_log combined env=local_log
&lt;/IfModule&gt;
</pre>
<p>サーバーのログを見ることが多い方はこっちの方が効果です。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/access_analytics/setting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/access_analytics/setting" />
	</item>
		<item>
		<title>メールサーバーにGoogle Apps（Gmail）を使う場合に軽く押さえておくポイント</title>
		<link>http://cloudrop.jp/cloud/mail_by_google_apps?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mail_by_google_apps</link>
		<comments>http://cloudrop.jp/cloud/mail_by_google_apps#comments</comments>
		<pubDate>Fri, 25 Sep 2009 09:02:40 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google Apps]]></category>
		<category><![CDATA[Postfix]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=262</guid>
		<description><![CDATA[セキュリティーの問題がクリアできれば、独自ドメインでメールアドレス（サーバー）を運用するのにGoogle Apps（Gmail）を利用しない理由はないと思います。
無料版であるStandard Editionでは

無料 [...]]]></description>
			<content:encoded><![CDATA[<p>セキュリティーの問題がクリアできれば、独自ドメインでメールアドレス（サーバー）を運用するのにGoogle Apps（Gmail）を利用しない理由はないと思います。</p>
<p>無料版である<a href="http://www.google.com/apps/intl/ja/group/index.html">Standard Edition</a>では</p>
<ul>
<li>無料（広告が表示されるだけ） で1アカウント7GBのメールボックスが<strong>独自ドメイン</strong>で作成できる</li>
<li><strong>50アカウント</strong>まで作成可能</li>
<li>Gmailと同じUI、同等の機能（検索、スパムフィルター、POP/IMAP対応、携帯・iPhone対応など）</li>
</ul>
<p>といった目に見える特徴と、なんと言っても<strong>サーバーを保守する必要がない</strong>という絶大なメリットがあります。</p>
<p>そこで、メールサーバーとしてGoogle Appsを利用する際に行った設定（主にDNS）と、自戒を込めて、アプリケーションサーバーでメールを送信する場合のポイントを書きたいと思います。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/cloud/mail_by_google_apps#toc-mx">MXレコードを設定する</a></li>
<li><a href="http://cloudrop.jp/cloud/mail_by_google_apps#toc-spf">SPFレコードを設定する</a></li>
<li><a href="http://cloudrop.jp/cloud/mail_by_google_apps#toc-mtapostfix">MTAの設定（Postfix）</a></li>
<li><a href="http://cloudrop.jp/cloud/mail_by_google_apps#toc-gmailrelay">Gmailにrelayするという選択肢</a></li>
</ol>
</div>
<p>※<a href="http://www.google.com/a/help/intl/ja/admins/resources/setup/index.html">Google Apps の導入手順</a>のステップ 4: ユーザー アカウントの作成以降の説明となります。</p>
<h3 id="toc-mx">MXレコードを設定する</h3>
<p>利用するドメインを管理しているDNSサーバーにMXレコードを追加します。<br />
<a href="http://www.google.com/support/a/bin/answer.py?answer=33352&#038;topic=9196"><br />
MX レコードの設定 &#8211; Google Apps ヘルプ</a>に設定すべきメールサーバーと、プライオリティーが記されているので、この通り設定します。cloudropではxxxxxx@cloudrop.jpというメールアドレスを利用するので、cloudrop.jpに対してMXレコードを以下のように設定しました。</p>
<p>bindの設定ファイル</p>
<pre class="terminal">
cloudrop.jp.	900	IN	MX	1 aspmx.l.google.com.
cloudrop.jp.	900	IN	MX	5 alt1.aspmx.l.google.com.
cloudrop.jp.	900	IN	MX	5 alt2.aspmx.l.google.com.
cloudrop.jp.	900	IN	MX	10 aspmx2.googlemail.com.
cloudrop.jp.	900	IN	MX	10 aspmx3.googlemail.com.
</pre>
<p>上記ヘルプはたびたび更新されていて、参考にしたタイミングによっては載っているプライオリティーの値やサーバーのアドレスが増減していることがあるようです。サーバーのアドレスがいきなり変わることはないと思いますが、リスクを考えてTTLはなるべく少なくして運用します。<br />
メールサーバーの台数を見ても、同じように自前で5台用意して運用するコストを考えると、メリットは歴然ですね。</p>
<p>ちなみに、digコマンドを利用するとメールサーバーにGoogle Appsを利用しているかどうかがわかります。例えば、有名な事例となっている<a href="http://www.google.com/a/help/intl/ja/admins/case_studies/tokyuhands.html">東急ハンズ</a>のドメインを引いてみると</p>
<pre class="terminal">
dig tokyu-hands.co.jp MX

; <<>> DiG 9.6.0-APPLE-P2 <<>> tokyu-hands.co.jp MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54632
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 3, ADDITIONAL: 5

;; QUESTION SECTION:
;tokyu-hands.co.jp.		IN	MX

;; ANSWER SECTION:
tokyu-hands.co.jp.	900	IN	MX	5 <strong>ALT1.ASPMX.L.GOOGLE.COM.</strong>
tokyu-hands.co.jp.	900	IN	MX	5 <strong>ALT2.ASPMX.L.GOOGLE.COM.</strong>
tokyu-hands.co.jp.	900	IN	MX	10 <strong>ASPMX2.GOOGLEMAIL.COM.</strong>
tokyu-hands.co.jp.	900	IN	MX	10 <strong>ASPMX3.GOOGLEMAIL.COM.</strong>
tokyu-hands.co.jp.	900	IN	MX	1 <strong>ASPMX.L.GOOGLE.COM.</strong>

;; AUTHORITY SECTION:
tokyu-hands.co.jp.	900	IN	NS	ns02.tokyu-hands.co.jp.
tokyu-hands.co.jp.	900	IN	NS	dns2.broadcenter.jp.
tokyu-hands.co.jp.	900	IN	NS	ns01.tokyu-hands.co.jp.

;; ADDITIONAL SECTION:
ASPMX.L.GOOGLE.COM.	131	IN	A	209.85.223.23
ALT1.ASPMX.L.GOOGLE.COM. 127	IN	A	209.85.210.80
ALT2.ASPMX.L.GOOGLE.COM. 211	IN	A	74.125.93.114
ASPMX2.GOOGLEMAIL.COM.	858	IN	A	209.85.135.27
ns02.tokyu-hands.co.jp.	900	IN	A	59.84.175.199
</pre>
<p>と、TTL900でGoogle AppsのMXレコードが５つ設定されているのがわかります。</p>
<h3 id="toc-spf">SPFレコードを設定する</h3>
<p>次に、SPFレコードを設定します。<br />
SPFレコードについては、</p>
<ul>
<li><a href="http://www.atmarkit.co.jp/fsecurity/special/82senderid/sender101.html">Sender ID：送信者側の設定作業 − ＠IT</a></li>
</ul>
<p>が詳しいので、ご覧下さい。<br />
この設定をしておくとことで、スパムフィルターに引っかかる確率が下がります。</p>
<p><a href="http://www.google.com/support/a/bin/answer.py?hl=jp&#038;answer=33786">SPF レコードの設定</a>に詳細が載っていて、DNSのTXTレコードに設定をすれば済むのですが、そのドメイン内で何かしらサービスを動かしている場合、Gmailのサーバー以外からメールを送る可能性があるので、そのサーバーのアドレスも合わせてSPFレコードに登録するべきです。</p>
<p>例えば、Web上から入力されたフォームをinfo宛にメールで飛ばしたり、各サーバーでLogwatchのレポートメールを飛ばしたりする場合です。</p>
<p>cloudrop.jpでは、アプリケーションサーバー（67.23.44.103）も@cloudrop.jpとしてメールを送信するので、以下の設定をしています。</p>
<p>bindの設定ファイル</p>
<pre class="terminal">
cloudrop.jp.	600	IN	TXT	"v=spf1 ip4:67.23.44.103 include:aspmx.googlemail.com ~all"
</pre>
<p>これを設定することで、アプリケーションサーバーが送信するメールのヘッダーが以下のように変ります（Gmailの場合）。</p>
<p>設定前</p>
<pre class="terminal">
Received-SPF: <strong>neutral</strong> (google.com: 67.23.44.103 is neither permitted nor denied by best guess record for domain of example@cloudrop.jp) client-ip=67.23.44.103;
Authentication-Results: mx.google.com; spf=<strong>neutral</strong> (google.com: 67.23.44.103 is neither permitted nor denied by best guess record for domain of example@cloudrop.jp) smtp.mail=example@cloudrop.jp
</pre>
<p>設定後</p>
<pre class="terminal">
Received-SPF: <strong>pass</strong> (google.com: domain of example@cloudrop.jp designates 67.23.44.103 as permitted sender) client-ip=67.23.44.103;
Authentication-Results: mx.google.com; spf=<strong>pass</strong> (google.com: domain of example@cloudrop.jp designates 67.23.44.103 as permitted sender) smtp.mail=example@cloudrop.jp
</pre>
<h3 id="toc-mtapostfix">MTAの設定（Postfix）</h3>
<p>後はアプリケーションサーバーのMTAの設定です。<br />
サーバー導入当初、Postfixの設定を間違えてメールが配送されないというミスをしてしまったので、自戒を込めて。</p>
<p>Postfixは受け取ったメールの送信先ドメインが/etc/postfix/main.cfの$mydestinationに設定したドメイン（FQDN）のリストに含まれているかどうかを判定します。含まれていた場合は自分自身のユーザーへ配信、含まれていない場合は該当するサーバーまで配送します。</p>
<p>Google Appsで設定したドメイン宛のメールはGmailのサーバーへ配送しなければいけないので、<strong>$mydestinationに含んではいけません</strong>。Google Appsに限らずメールゲートウェイでないサーバーでは当たり前の設定なんですが…。</p>
<h3 id="toc-gmailrelay">Gmailにrelayするという選択肢</h3>
<p>いちいちSPFレコードを追加するのも面倒くさいし、いっそのことGmailのサーバーへrelayしてしまえばいいという考えもあります。Postfixでは設定ファイルに数行追加し、パスワードファイルを作成することで簡単にrelayさせることができます。</p>
<p>Postfixの設定ファイルに追加します。（以下、CentOS5の場合）</p>
<pre class="terminal">
> sudo vi /etc/postfix/main.cf

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
</pre>
<p>設定ファイルで追加したパスワードファイルを作成し、ハッシュ化します。</p>
<pre class="terminal">
> sudo vi /etc/postfix/sasl_passwd

[smtp.gmail.com]:587    example@cloudrop.jp:password

> sudo postmap /etc/postfix/sasl_passwd
> sudo /etc/init.d/postfix restart
</pre>
<p>（ハッシュ化するとsasl_passwd.dbというファイルが生成されます。）</p>
<p>参考サイト</p>
<ul>
<li><a href="http://linux.matchy.net/archives/35">Postfix から Gmail 経由でメールを送る linux.matchy.net: 〜Linuxで遊ぼう！〜</a></li>
</ul>
<p>この設定を行うと自サーバーから送信することはなくなるのですが、Gmailの仕様に引っ張られてしまい、<strong>使いにくい面が多々あります</strong>。</p>
<p>まず、<strong>送信元がGmailのアカウントに上書き</strong>されてしまいます。例えば、example@cloudrop.jpというアドレス所有者としてrelayした場合、envelope fromをinfo@cloudrop.jpで送信したとしても、example@cloudrop.jpに上書きされ送信されてしまいます。アプリケーションや用途によって送信元を変えたいのが普通ですので、この仕様では使いにくいところです。</p>
<p>また、relayしたメールは該当メールアドレスのGmail<strong>送信箱に保存</strong>されていきます。1ユーザーのアカウントでrelay設定をした場合、システムが送ったものと人間が送ったものが混ざってしまうということです。</p>
<p>逆に、システム専用のアドレスを用意し、そのアドレスでrelayすればGmailの送信箱にメールが残り、検索しやすくなるなどのメリットもありそうですが、そのサーバーが送信するメールの送信元が全てrelayしたユーザーのアドレスになることを前提にシステムを構築しないといけませんし、Gmailで検索するのにシステム専用のアカウントでログインする必要があるなど、やはり使いにくさは否めません。</p>
<p>Gmailのメリットを享受しようとするならば、Gmailの自分宛にCC（BCC）してラベルを付けるなどした方が楽で、残念ながらrelayして活用するメリットはなさそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/cloud/mail_by_google_apps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/cloud/mail_by_google_apps" />
	</item>
		<item>
		<title>WordPressをPubSubHubbubに対応させてTwitterへリアルタイムで通知されるようにした</title>
		<link>http://cloudrop.jp/wordpress/pubsubhubbub_twitter?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pubsubhubbub_twitter</link>
		<comments>http://cloudrop.jp/wordpress/pubsubhubbub_twitter#comments</comments>
		<pubDate>Mon, 14 Sep 2009 04:57:51 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[FriendFeed]]></category>
		<category><![CDATA[PubSubHubbub]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=176</guid>
		<description><![CDATA[ブログの更新をTwitterへ通知するのにFriendFeedを利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがあり [...]]]></description>
			<content:encoded><![CDATA[<p>ブログの更新をTwitterへ通知するのに<a href="http://friendfeed.com/">FriendFeed</a>を利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがありました。</p>
<p>これを解消するために、最近Googleによって開発・公開された新しいプロトコル<a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>に対応させました。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub">PubSubHubbubとは</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-wordpress">WordPressで対応するには</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub1">PubSubHubbubの実力</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</a>
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-google-reader">Google Reader</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-livedoor-reader">livedoor Reader</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub3">わかりにくいPubSubHubbub</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-">参考サイト</a></li>
</ol>
</div>
<h3 id="toc-pubsubhubbub">PubSubHubbubとは</h3>
<p>PubSubHubbubは、今までの配信者（Publishers。以下、ブログ）と購読者（Subscribers。以下、RSSリーダー）が直接やり取りをしていたその間に、ハブ（Hubs）と呼ばれる中間サーバーを配置して、そのハブを介してメッセージのやり取りをWeb Hooksの仕組みで行うものです。<br />
Web Hooksはある決められたアクション（たとえば、「ブログの公開ボタンを押す」など）をきっかけに動作して、決められたデータを決められたURLに決められた方法で送信する仕組みです。</p>
<p>いままで「更新されました？」「いや、まだです。」と304の繰り返しだったフィードの世界に、「更新したしました」きっかけで、購読者に一斉に通知が行くわけですから、こんなエコな仕組みはないと思います。</p>
<h3 id="toc-wordpress">WordPressで対応するには</h3>
<p>簡単です。プラグインを入れるだけです。<br />
現在PubSubHubbubに対応させるためのプラグインは2つ出ていて、どちらも最新の2.8.4に対応していますし、機能的には同じですので好みで導入しましょう。</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/pubsubhubbub/">PubSubHubbub</a></li>
<li><a href="http://wordpress.org/extend/plugins/wp-pubsubhubbub/">WP Pubsubhubbub</a></li>
</ul>
<p>ハブのURLを登録するだけの簡単な設定画面で、しかもすでに2つのハブが登録されているので特に設定することはありません。</p>
<p>プラグインを有効にすると、出力されたAtomに<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://pubsubhubbub.appspot.com&quot;/&gt;<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://superfeedr.com/hubbub&quot;/&gt;<br />
とハブへのリンクが追加されます。</p>
<p>ここから以下の流れで更新の通知がされるようになります。</p>
<ol>
<li>この新しいフィードを取得したPubSubHubbubに対応したRSSリーダーがハブへのリンクを読み取って、ハブに購読の依頼を行います。</li>
<li>ハブは本当にRSSリーダーが依頼してきたのか確認します。確認ができたら次回の更新から通知するように動作します。</li>
<li>WordPressで新しく記事が公開されたタイミングで、プラグインがハブに対して公開の通知を送信します。</li>
<li>ハブは本当に記事が公開されたのか確認します。確認ができたら購読の依頼があったRSSリーダーへ通知を行います。</li>
</ol>
<h3 id="toc-pubsubhubbub1">PubSubHubbubの実力</h3>
<p>実際に前回の投稿がどのようになったかを追ってみました。</p>
<p>まず投稿後、ハブからチェックがきます（apacheのログ）。</p>
<pre class="terminal">
64.233.172.18 - - [12/Sep/2009:18:42:23 +0900] "GET /feed HTTP/1.1" 200 14246 "-" "AppEngine-Google; (+http://code.google.com/appengine; appid pubsubhubbub)"
</pre>
<p>ハブの<a href="http://pubsubhubbub.appspot.com/publish">デバッグツール</a>でハブにどのように登録されているか確認してみると、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae-300x165.png" alt="ハブのデバッグツールのキャプチャ" title="push_gae" width="300" height="165" class="aligncenter size-medium wp-image-232" /></a></p>
<p>無事登録されているようです。（クリックで拡大）</p>
<p>ではFriendFeedの方はというと、</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_friendfeed.png" alt="FriendFeedのキャプチャ" title="FriendFeedのキャプチャ" width="530" height="80" class="aligncenter size-full wp-image-236" /></p>
<p>WordPressの投稿ボタンを押して、登録が終わってから一拍おいてすぐ画面に現れたくらいの感覚です。</p>
<p>さて、本題のTwitterは</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_twitter.png" alt="Twitterのキャプチャ" title="Twitterのキャプチャ" width="530" height="79" class="aligncenter size-full wp-image-235" /></p>
<p>素晴らしい！画面の更新タイミングに影響していますがが、ほぼリアルタイム。</p>
<h3 id="toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</h3>
<p>FriendFeed以外にも、<a href="http://jp.techcrunch.com/archives/20090805google-reader-speeds-up-sharing-with-pubsubhubbub/">Google Reader</a>や<a href="http://jp.techcrunch.com/archives/20090819google-continues-to-feed-the-pubsubhubbub-google-alerts-now-in-real-time/">Google Alerts</a>、<a href="http://www.itmedia.co.jp/news/articles/0908/18/news090.html">livedoor Reader</a>などが対応していて、確認できるGoogle Readerとlivedoor Readerでも確認してみました。</p>
<h4 id="toc-google-reader">Google Reader</h4>
<p>PubSubHubbubへの対応という記事は共有機能からということだったので、対応していないかもしれないと思ったんですが、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr-300x61.png" alt="Google Readerのキャプチャ" title="Google Readerのキャプチャ" width="300" height="61" class="aligncenter size-medium wp-image-230" /></a></p>
<p>時差なしできっちり更新に上がってきました。（クリックで拡大）</p>
<h4 id="toc-livedoor-reader">livedoor Reader</h4>
<p>こちらは更新がされず…。</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_ldr.png" alt="ライブドアリーダーのキャプチャ" title="ライブドアリーダーのキャプチャ" width="258" height="352" class="aligncenter size-full wp-image-231" /></p>
<p>PubSubHubbub対応後にlivedoor Readerのクローラが来ていることは確認しているので、腑に落ちないところです。</p>
<blockquote><p>(※ 最初の更新でLDRがそのブログのpubsubhubbub対応を検出し，次の更新から更新情報を受けるようになるので，二回目の更新から反映が最速になります。)<br />
<a href="http://blog.livedoor.jp/nabokov7/archives/904777.html">PubSubHubbub で最速に更新を通知しつつ，舌をかまないためのテスト ： nabokov7; rehash &#8211; livedoor Blog</a>
</p></blockquote>
<p>ということなので、この更新から反映されるようになるかもしれません。<br />
今回は確認できず。</p>
<blockquote><p><strong>2009/9/15 追記</strong><br />
やはりlivedoor Readerではすぐに更新されませんでした。<br />
時間が経ってからの更新だとクロールによる更新なのか、ハブからの通知によるものなのか判断できないので、やはり確認できず。<br />
livedoor Readerでちゃんとリアルタイムで更新されてるというパブリッシャーはいらっしゃるんでしょうか。livedoor Blog以外で。<br />
ざっと調べてみたところ実践している方はいらっしゃいましたが、やはりリアルタイムでの更新は確認できていないようです。</p>
<ul>
<li><a href="http://blog.nomadscafe.jp/2009/08/pubsubhubbub.html">昨日のPubSubHubbub記事がどのように反映されたか &#8211; blog.nomadscafe.jp</a></li>
</ul>
</blockquote>
<h3 id="toc-pubsubhubbub3">わかりにくいPubSubHubbub</h3>
<p>読み方の話ではなく。<br />
複数の要素が絡まっているため、仕様が明らかとは言え、ブログ側からするとハブやRSSリーダーの挙動がわからず、更新が通知されない場合に理由がわかりにくい側面があります。</p>
<p>例えば、ハブへ購読依頼をするRSSリーダーが、エントリーが更新されているかどうかにかかわらず、フィード内にハブへのリンクを検出したらハブへ購読依頼をする仕様なのか（FriendFeedはこちらのようです）、エントリーが更新されたタイミングで検出・通知する仕様なのか（livedoor Readerはこちらのようです）、などです。</p>
<p>FriendFeedは前者のようなので、PubSubHubbub対応を行った後に、1度フィードを手動で読み込ませれば次のポストから反映されるはずです。</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update-300x119.png" alt="FriendFeedでフィードの手動取得" title="FriendFeedでフィードの手動取得" width="300" height="119" class="aligncenter size-medium wp-image-250" /></a>
<div style="text-align:center;margin-bottom:15px;">設定→サービス 追加/編集→マイサービスのリンクをクリック→Blogを更新（クリックで拡大）</div>
<p>まだまだ新しい仕組みなので、確立されるまでもう少し時間がかかるかもしれませんが、多くのサービスが対応してさらに便利になることを望みます。</p>
<h3 id="toc-">参考サイト</h3>
<p>FriendFeed→Twitterの詳しい説明が載っています。</p>
<ul>
<li><a href="http://www.ideaxidea.com/archives/2009/06/twitter_via_friendfeed.html">ブログの更新情報は『Friendfeed』で流すことにした &#8211; IDEA*IDEA ～ 百式管理人のライフハックブログ</a></li>
</ul>
<p>PubSubHubbubに関する参考サイト</p>
<ul>
<li><a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub &#8211;  Project Hosting on Google Code</a></li>
<li><a href="http://labs.unoh.net/2009/08/what-is-pubsubhubbub.html">ウノウラボ Unoh Labs: PubSubHubbubとは</a></li>
<li><a href="http://d.hatena.ne.jp/snaka72/20090902/1251916771">自宅でPubsubhubbubのPub,Sub,Hub一式を動かしてみた &#8211; 今日もスミマセン。</a></li>
<li><a href="http://www.ryo.com/2009/09/04/991/">PubSubHubBubのpubに対応する : ryo.com</a></li
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/wordpress/pubsubhubbub_twitter/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter" />
	</item>
		<item>
		<title>クラウド環境でのApacheの設定</title>
		<link>http://cloudrop.jp/cloud/apache_setting?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=apache_setting</link>
		<comments>http://cloudrop.jp/cloud/apache_setting#comments</comments>
		<pubDate>Sat, 12 Sep 2009 09:42:22 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ETag]]></category>
		<category><![CDATA[mod_deflate]]></category>
		<category><![CDATA[mod_expires]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=177</guid>
		<description><![CDATA[クラウドのホスティングサービスは、一定リソースの時間極課金＋通信トラフィックの従量課金が一般的です。
CPUやメモリなどのリソースは、1%しか使わなくても100％使っても時間内の料金は同じです。
一方で通信料は使った分だ [...]]]></description>
			<content:encoded><![CDATA[<p>クラウドのホスティングサービスは、一定リソースの時間極課金＋通信トラフィックの従量課金が一般的です。</p>
<p>CPUやメモリなどのリソースは、1%しか使わなくても100％使っても時間内の料金は同じです。<br />
一方で通信料は使った分だけGB単位などで段階的に課金される仕組みです。</p>
<p>この料金体系では、なるべくリソースを使い切って、且つ通信料を抑えることが最も費用対効果のある利用方法となります。</p>
<p>サーバーからクライアントへのレスポンス、特にブラウザーのロードとレンダリングを高速化させるために、Yahoo!のYSlowやGoogleのPage Speedを使ってチューニングを行うのと同じようなアプローチで、なるべくCPUに仕事をさせて、トラフィックを減らしてみたいと思います。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-">キャッシュ機能を最大限利用する</a></p>
<ol>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-expires">Expires</a></li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-last-modifiedetag">Last-Modified、Etag</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-1">コンテンツは基本、圧縮</a></li>
<li><a href="http://cloudrop.jp/cloud/apache_setting#toc-2">使える外部リソースを使う</a></li>
</ol>
</div>
<h3 id="toc-">キャッシュ機能を最大限利用する</h3>
<h4 id="toc-expires">Expires</h4>
<p>Apacheの<a href="httpd.apache.org/docs/2.2/ja/mod/mod_expires.html ">mod_expires</a>を有効にすることで、レスポンスヘッダーにExpiresフィールドが出力され、最初のアクセス以降設定した期間が経過するまでブラウザーはローカルのキャッシュを利用し続けます。<br />
この設定は強力で、ローカルのキャッシュがなくなるか、強制リロードをしない限り、サーバーへアクセスすらしません。<br />
（逆に、更新をかける余地のあるファイルには設定しない方がいい項目です。）</p>
<pre class="terminal">LoadModule expires_module     modules/mod_expires.so
ExpiresActive On
ExpiresByType application/javascript "access plus 1 days"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType text/javascript "access plus 1 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType image/jpeg "access plus 3 days"
ExpiresByType image/png "access plus 3 days"
ExpiresByType image/gif "access plus 3 days"
ExpiresByType image/x-icon "access plus 3 days"</pre>
<p>有効期間の設定には以下の単位も利用できます。</p>
<ul>
<li>years</li>
<li>months</li>
<li>weeks</li>
<li>days</li>
<li>hours</li>
<li>minutes</li>
<li>seconds</li>
</ul>
<h4 id="toc-last-modifiedetag">Last-Modified、Etag</h4>
<p>次に、キャッシュが切れていよいよブラウザーがアクセスをしてきた時のための設定を施しておきます。</p>
<p>特段設定をしないとApacheは<strong>Last-Modified</strong>と<strong>Etag</strong>フィールドをセットしたヘッダーを送信します。<br />
この値を受け取っているブラウザーは、Last-Modifiedの値を<strong>If-Modified-Since</strong>に、Etagの値を<strong>If-None-Match</strong>に含めてリクエストを送信します。<br />
受け取ったサーバーは値を比較して変更が無ければコンテンツの中身は返さず、<strong>304 Not Modified</strong>を応答します。</p>
<p>コンテンツを返さない分トラフィックは抑えられるわけですが、この二つのフィールドはコンテンツを返すか、返さないかを判断するという意味では同じで、解釈の仕様によって動きが変わってきます。</p>
<p>Apacheにおいては、If-Modified-SinceよりもIf-None-Matchが優先されます。<br />
If-Modified-SinceはIf-None-Matchがない場合にだけ利用され、If-Modified-Sinceの値が同じでも、If-None-Matchの値が変更されていた場合には、コンテンツを返します。</p>
<p>これだけ優先されるIf-None-Matchなので、ETagの値を間違ってセットするとサーバーが毎回コンテンツを返してしまいます。<br />
この辺りでよく問題にされるのは、負荷分散環境下で複数のサーバーが同一コンテンツを返しているような場合です。<br />
クラウドのホスティングサービスを選択するようなケースでは、スケールアウトする仕組みが期待されることが多いので、あらかじめ設定しておくべき項目です。</p>
<p>Apacheがデフォルトで出力するETagが「ファイルの inode番号、ファイルサイズ、更新時刻」を元に生成するので、inode番号がサーバーによって変わってしまう環境では、せっかくIf-None-Matchを送っていても受け取るサーバーごとで比較するETagが違い、毎回無駄にコンテンツを返してしまいます。</p>
<p>以下のサイトに解説や実例があります。</p>
<ul>
<li><a href="http://blog.livedoor.jp/nipotan/archives/51186026.htmlhttp://blog.livedoor.jp/nipotan/archives/51186026.html">堀愚霊瑠の指摘で気付いた、はてなスターの静的ファイルとか想像以上にアレな件 &#8211; にぽたん研究所</a></li>
<li><a href="http://www.inter-office.co.jp/contents/193/">Webサイトの高速化 ルール13　ETagを正しく設定する! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス | インターオフィス</a></li>
<li><a href="http://dsas.blog.klab.org/archives/50602499.html">DSAS開発者の部屋:負荷分散環境でブラウザキャッシュが効かないときは &#8211; ETagの解説 -</a></li>
</ul>
<p>これを回避するために、ETag自体を出力しない方法と、ETagの生成にinode番号を利用しないようにする方法と2通りあります。</p>
<p><strong>ETag自体の出力をしない</strong></p>
<pre class="terminal">FileETag None</pre>
<p><strong>ETagの生成にinode番号を利用しない</strong></p>
<pre class="terminal">FileETag MTime Size</pre>
<p>どちらにせよ、これらの設定では「最終更新日」が重要な要素になってきます。<br />
ETagを出力しない場合はLast-Modified（最終更新日）での判定が有効になり、inode番号を利用しない場合はファイルサイズと最終更新日がベースとなったEtagでの判定になるからです。</p>
<p>最終更新日が全てのサーバーで同じになるように、ファイルをコピーする時、<strong>同じタイムスタンプになるように注意してコピー</strong>しなければなりません。rsyncであれば-tオプションを付けてコピーします。</p>
<p>ETagを出力しない場合は、内容に変更があったファイルでもタイムスタンプが同じであれば同一ファイルと見なされるリスクがあります。<br />
inode番号を利用しないでETagを出力した場合は、その分リクエスト・レスポンスヘッダーともに微増し、トラフィックに若干影響があります。</p>
<p>トラフィックを抑えることが最優先であれば出力しない、ファイルの管理を厳密に行いたいのであれば出力する、ETagの設定をどちらにするかは状況によって変わってくると思います。<br />
今回の趣旨では、ETagは出力しない方がいいということになります。</p>
<h3 id="toc-1">コンテンツは基本、圧縮</h3>
<p><a href="httpd.apache.org/docs/2.0/ja/mod/mod_deflate.html">mod_deflate</a>モジュールを有効にすると、設定に従ってレスポンスをgzipで圧縮して送信してくれます。<br />
Deflateによる圧縮はCPUに働かせ、トラフィックを減らす、クラウド環境にもってこいの設定です。</p>
<pre class="terminal">LoadModule deflate_module modules/mod_deflate.so
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript</pre>
<p>Webで利用される画像フォーマットはそもそも圧縮されている場合が多いので、圧縮効率の高いテキストファイルを対象にします。（WordPressの場合、WP Super Cacheを使うことで、記事自体もgzip圧縮して送信できるようになります。）</p>
<h3 id="toc-2">使える外部リソースを使う</h3>
<p>これは番外編です。<br />
RSS、各種APIなどのWebサービスからOpenIDやOAuthなどのリモート認証、Webは外部のリソースと協調する方向へと進んでいますから、利用できるリソースをどんどん活用するのもトラフィック節約になります。<br />
<a href="http://www.flickr.com/">flickr</a>や<a href="http://www.youtube.com/">YouTube</a>などをホスティング的に利用するのはもちろん、JavaScriptのライブラリはGoogleの<a href="http://code.google.com/intl/ja/apis/ajaxlibs/">AJAX Libraries API</a>、アバターアイコンは<a href="http://ja.gravatar.com/">Gravatar</a>など、目的に合わせて使える外部リソースを使っていきましょう。</p>
<p>もちろん外部リソースに依存することはリスクでもあるので、いい面ばかりでもありません。1ページに複数ドメインへのリソースがあると、名前解決に時間がかかりページのロードが遅くなるなどの問題もあります。</p>
<p>ご利用は計画的に。</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/cloud/apache_setting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/cloud/apache_setting" />
	</item>
		<item>
		<title>Rackspace Cloud ServersがAmazon EC2よりも優れている点</title>
		<link>http://cloudrop.jp/cloud/rackspace_vs_ec2?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rackspace_vs_ec2</link>
		<comments>http://cloudrop.jp/cloud/rackspace_vs_ec2#comments</comments>
		<pubDate>Tue, 08 Sep 2009 16:32:29 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Rackspace]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=135</guid>
		<description><![CDATA[このサイトは（本日現在）、Rackspace US社の「Cloud Servers」サービス上で
稼働しています。
Cloud ServersはAmazon EC2相当のサービスで、Slicehostなどを買収したRac [...]]]></description>
			<content:encoded><![CDATA[<p>このサイトは（本日現在）、<a href="http://www.rackspace.com/" target="_blank">Rackspace US社</a>の「<a href="http://www.rackspacecloud.com/cloud_hosting_products/servers" target="_blank">Cloud Servers</a>」サービス上で<br />
稼働しています。</p>
<p>Cloud ServersはAmazon EC2相当のサービスで、<a href="http://www.slicehost.com/" target="_blank">Slicehost</a>などを買収したRackspaceが運営するXenベースのホスティングサービスです。</p>
<p>EC2ではなくCloud Serversを選んだ理由を、使用感を元にレポートしたいと思います。</p>
<p><strong>目次</strong>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-">安い（=スペックの選択肢が多い）</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-1">自動バックアップサービスが無料</a>
<ol>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-2009912-">2009/9/12 追記</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-2">スケールアップ、スケールダウンが簡単</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-dns">DNSが無料、しかも逆引きにも対応</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-3">その他、補足</a>
<ol>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-4">帯域の料金</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-5">回線の応答速度</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-6">セキュリティー</a></li>
<li><a href="http://cloudrop.jp/cloud/rackspace_vs_ec2#toc-7">参考</a></li>
</ol>
</li>
</ol>
</div>
<h3 id="toc-">安い（=スペックの選択肢が多い）</h3>
<p>もうこれに尽きます。</p>
<p>EC2はスモールインスタンスが$0.1/時間で、これ以下のラインナップがありません。<br />
メモリ1.7GB/ディスク160GBのスペックがオーバースペックだとしても、<br />
選ばなければなりません。</p>
<p>1ヶ月（720時間換算）利用すると$72となり、サーバーの能力を生かしきれない場合どうしても割高な印象になってしまいます。</p>
<p>以下にEC2とCloud Serversのスペックと料金を表にまとめました。<br />
ディスク容量やCPU数なども含め同じスペックとは言えないので<br />
あくまで参考としてご覧ください。青文字の行がEC2の標準的なインスタンスです。</p>
<table class="excel" style="border-collapse: collapse; height: 200px;" border="0" cellspacing="0" cellpadding="0" width="600">
<col style="width: 54pt;" span="2" width="72"></col>
<col style="width: 59pt;" width="79"></col>
<col style="width: 67pt;" width="89"></col>
<col style="width: 54pt;" width="72"></col>
<col style="width: 93pt;" width="124"></col>
<tbody>
<tr style="height: 14.25pt; text-align: center;" height="19">
<td style="height: 14.25pt; width: 54pt;" width="72" height="19"><strong>メモリ</strong></td>
<td style="border-left: medium none; width: 54pt;" width="72"><strong>ディスク</strong></td>
<td style="border-left: medium none; width: 59pt;" width="79"><strong>論理CPU数</strong></td>
<td style="border-left: medium none; width: 67pt;" width="89"><strong>アーキテクチャ</strong></td>
<td style="border-left: medium none; width: 54pt;" width="72"><strong>料金/時間</strong></td>
<td style="border-left: medium none; width: 93pt;" width="124"><strong>備考</strong></td>
</tr>
<tr style="height: 14.25pt;" height="19">
<td style="height: 14.25pt; text-align: center;" height="19">256MB</td>
<td style="border-left: medium none; text-align: center;">10GB</td>
<td style="border-left: medium none; text-align: center;">-</td>
<td style="border-left: medium none; text-align: center;">64bit</td>
<td style="border-left: medium none; text-align: center;">$0.015</td>
<td style="border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">512MB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">20GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.030</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">1GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">40GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.060</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18"><span style="color: #333399;">1.7GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">160GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">1</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">32bit</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">$0.100</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">EC2(Small)</span></td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">2GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">80GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.120</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">4GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">160GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.240</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18"><span style="color: #333399;">7.5GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">850GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">4</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">64bit</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">$0.400</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">EC2(Large)</span></td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">8GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">320GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.480</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18"><span style="color: #333399;">15GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">1690GB</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">8</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">64bit</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">$0.800</span></td>
<td style="border-top: medium none; border-left: medium none; text-align: center;"><span style="color: #333399;">EC2(Extra Large)</span></td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="border-top: medium none; height: 13.5pt; text-align: center;" height="18">15GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">620GB</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">-</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">64bit</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">$0.960</td>
<td style="border-top: medium none; border-left: medium none; text-align: center;">Cloud Servers</td>
</tr>
</tbody>
</table>
<p>Cloud Serversは、メモリ256MB/ディスク10GBのインスタンスから用意されていて、<br />
このミニマムのインスタンスが$0.015/時間で借りることができます。<strong>1ヶ月利用で$10.8</strong>。<br />
256MB以上のインスタンス、例えばメモリ1GB/ディスク40GBのインスタンスでも$0.06/時間。</p>
<p>ディスク容量がネックになる用途以外では魅力的なラインナップではないでしょうか。</p>
<p>特にテスト機や実験機として一時的に利用したいようなケースでは、ロースペック・ローコストはとても助かります。</p>
<h3 id="toc-1">自動バックアップサービスが無料</h3>
<p>バックアップと言ってもデータ自体のバックアップではなく､LVMのスナップショットベースのバックアップになります。<br />
ファイルを個別に取り出すことはできませんが、データを復元する上では全く問題ありません。</p>
<p>このスナップショットがインスタンスごとに3つまでストックできるようになっていて、Web管理ツールから日次/週次でスケジューリングすることが（しないことも）できます。</p>
<p>日次バックアップは「daily」、週次は「weekly」という名前が自動的につけられ、バックアップが実行される度に上書きされていきます。つまり、日次と週次の両方をセットしてもバックアップの枠が1つ余るようになっています。</p>
<p>実は任意のタイミング、任意の名前でもスナップショットがとれ、なおかつスナップショットから新たなインスタンスをつくる（クローンをつくる）こともできるので、EC2で言うところのAMIと同じ用途でバックアップサービスが利用できるわけです。<strong>しかも無料で！</strong></p>
<p>現在はミニマムのメモリ256MBのインスタンスから、512MB、1GB、2GBまでのインスタンスがバックアップに対応していて、今後全てのインスタンスに対応する予定だそうです。<br />
EC2と比較してディスク容量が少ないのはこういうところにあるかもしれません。</p>
<p>さらに、Amazon S3相当のサービスであるRackspace Cloud Filesにバックアップイメージを無料で転送できるようにもなるようです。<br />
これが利用可能になって、Xenのゲストイメージが出し入れできるようになれば、例えば自社サーバーのXen環境をそのままクラウドに移したり、逆に戻したり、インフラに縛られることなく簡単にサービス環境を移すことができるようになりそうです。</p>
<blockquote>
<h4 id="toc-2009912-">2009/9/12 追記</h4>
<p>重要なことを書き忘れたので追記します。<br />
バックアップはインスタンスに結びついているものなので、インスタンスを削除すると消えてしまいます（インスタンスを停止するという操作はありません）。<br />
つまり、EC2のようにインスタンスをイメージ化して保存することが現時点でできないため、インスタンスのクローンを作成しようとすると、<strong>インスタンスを立ち上げ続けておかなければなりません</strong>。<br />
バックアップの保存が待ち望まれます。</p></blockquote>
<h3 id="toc-2">スケールアップ、スケールダウンが簡単</h3>
<p>EC2で、サービス稼働中のスモールインスタンスをラージインスタンスにスケールアップさせようとしたら、別途ラージインスタンスを立ち上げて、そこに環境を乗せ変える必要があります。<br />
稼働中のスモールインスタンスのAMIを生成して、そのAMIからラージインスタンスを立ち上げる方法ができそうですが、これはアーキテクチャ(i386/x86_64)が違うためできません。<br />
できたとしても、どちらも別途インスタンスを用意する必要があります。</p>
<p>Cloud Serversのアーキテクチャは全てx86_64なので、ミニマムからマックスまで自在にリサイズ可能です。<br />
インスタンスのリサイズはWeb管理ツール上でほぼ自動でできます。</p>
<p>それでもダウンタイムが発生するので、それが許容できない場合はスナップショットから別途インスタンスを立ち上げる方法もあります。ただし、EC2のElastic IP相当の機能はないので、IPアドレスが変わることを考慮する必要があります。</p>
<h3 id="toc-dns">DNSが無料、しかも逆引きにも対応</h3>
<p>EC2ではサポートされていないので、外部にDNSサーバーを用意する必要があります。</p>
<p>Cloud ServersではWeb管理ツールでDNSレコードが登録できます。<br />
dns1.stabletransit.comとdns2.stabletransit.comをレジストラーに登録すれば、このDNSサーバーが利用できるようになりますので、別途DNSサーバーを用意する必要は（とりあえず）ありません。<br />
ライトユーザー向けのサービスかもしれませんが、嬉しいサービスです。</p>
<p>それからIPアドレスからドメイン名を引く「逆引き」をした場合に返すドメイン名の変更にも対応しています。</p>
<p>あまり関係ないかもしれませんが、スパム対策でメールサーバーなどが逆引きをしてドメイン名を確認する場合などがありますので、そういうケースにも安心して利用できます。</p>
<h3 id="toc-3">その他、補足</h3>
<h4 id="toc-4">帯域の料金</h4>
<table style="border-collapse: collapse; width: 221pt;" border="0" cellspacing="0" cellpadding="0" width="294" class="excel">
<col style="width: 93pt;" width="124"></col>
<col style="width: 54pt;" width="72"></col>
<col style="width: 74pt;" width="98"></col>
<tbody>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt; width: 93pt;" width="124" height="18"></td>
<td style="width: 54pt;" width="72"><strong>IN</strong></td>
<td style="width: 74pt;" width="98"><strong>OUT</strong></td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18"><strong>EC2</strong></td>
<td align="right">$0.10</td>
<td align="right"><span style="color: #ff0000;">$0.17</span></td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18"><strong>Cloud Servers</strong></td>
<td align="right"><span style="color: #ff0000;">$0.08</span></td>
<td align="right">$0.22</td>
</tr>
</tbody>
</table>
<p>帯域の料金は、サーバーからみてダウンロードはCloud Serverの方が安いんですが、アップロードはEC2の方が安くなっています。<br />
EC2のように利用量によって単価がさがるプランもないので、動画配信やストリーミングなどの用途では高くつく可能性があるので注意が必要です。</p>
<h4 id="toc-5">回線の応答速度</h4>
<p>気になる回線の応答速度は、同時刻にそれぞれのサーバーから日本のサーバーへpingを飛ばした平均で、EC2が193.592ms、Cloud Serverが152.008ms でした。体感としては同じで、日本からだと遅く感じるのは否めません。</p>
<h4 id="toc-6">セキュリティー</h4>
<p>EC2の場合はSecurity Groupを設定することでサーバーより前でポートを閉じることができますが、Cloud Serversには用意されていません。<br />
インスタンスがDMZに展開されますので、iptablesなどでしっかり対策する必要があります。<br />
ちなみにCentOS5.3で起動した直後はiptablesによって22ポート以外は閉じられていました。</p>
<p>セキュリティーがらみで気になったのは、インスタンスのrootパスワードの発行です。<br />
EC2ではあらかじめ用意した鍵をセキュアな通信で送信し、その鍵を使ってログインする仕様ですが、Cloud ServersではSSL通信のWeb管理ツール上にrootパスワードとIPアドレスが表示されるだけではなく、メールでも同じ内容が送られてきます。これには頭を抱えてしまいました。<br />
自動発行されたrootパスワードはログイン後即効変更しましょう。</p>
<h4 id="toc-7">参考</h4>
<p><a href="http://www.rackspacecloud.com/cloud_hosting_products/servers/compare" target="_blank">http://www.rackspacecloud.com/cloud_hosting_products/servers/compare</a><br />
<a href="http://aws.amazon.com/ec2/" target="_blank">http://aws.amazon.com/ec2/</a><br />
<a href="http://www.rackspacecloud.com/cloud_hosting_products/servers/pricing" target="_blank">http://www.rackspacecloud.com/cloud_hosting_products/servers/pricing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/cloud/rackspace_vs_ec2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/cloud/rackspace_vs_ec2" />
	</item>
	</channel>
</rss>
