Archive for 3月 2009

Amazon EC2/S3 の使用感

Amazon EC2/S3 を使ってみた雑感をまとめておく。今回は何らかのシステムを作るための開発環境として利用することを想定した。AMI には Amazon が提供している fedora8 を導入してから、必要なパッケージなどを追加した。Python と Django はソースコードからインストールしている。

AMI の導入はそれほど難しいわけではないが、慣れるまで手順が煩雑に感じた。導入の手順については多くの先駆者達が貴重な情報をブログなどで提供してくれている。これらにはずいぶんとお世話になった。感謝。一方、Amazon の公式ドキュメント“Getting Started Guide”, “Developer Guide”)もしっかりとしているので、導入作業を実施するときは、公式ドキュメントをメインのテキストにしながら、Web からの情報をサブテキストとして使うようにするのが早道だと思う。

AMI は Amazon が公式に提供しているものに加えて、コミュニティベースで配布されるものが多数ある。しかし、自分の目的に合ったものを探すのは困難である。仮に適当なものを見つけたとしても、出所が分からないとセキュリティなどの面からも不安が拭えない。結局、RedHat のような有償のものを利用するか、自分の手で AMI そのものも作ってしまうのが良いと感じた。AMI の作り方は前述の公式ドキュメントにも記載されている。今回は AMI の自作までは試みていないが、次の機会にはぜひとも挑戦したい。

サーバへの接続作業は ssh 端末を介して行ったが、キー入力に対するレスポンスがややもったりとした印象だった。もっともリモート環境へのアクセスとしてはこんなものだろう。今回はサービス提供用の公開サーバではなく、開発環境として使うことを想定して試用した。そのため毎日インスタンスの開始と終了を繰り返すことになる。当然、終了時には必ずイメージを S3 にバックアップすることになる。しかもバックアップ後には必ず AMI の再登録作業が必要になる。こういった一連の操作が意外と手間で時間も掛かった。これらの作業はスクリプトを書けばもう少し自動化できると思うが、それでも開発環境として常用するかどうかは判断に迷うところだ。また、終日運用を前提とする公開用のサーバ環境として使えるかどうかは、この試用の結果だけからは判断できない。ただ、サーバマシンとしては通常のものと同じように使えていたので、公開サービスに対する負荷にどこまで耐えられるのか、といったあたりが導入判断のポイントになるのだろう。

参考:
Python のアップグレードに伴う問題
Amazon EC2 の ec2-upload-bundle と ec2-register
Django の開発用 Web サーバを Amazon EC2 で動かす
Amazon EC2 で ec2-regist を忘れる

Python のアップグレードに伴う問題

fedora8 on Amazon EC2 に Python 2.6.1 をソースコードから入れたら少々問題が発生した。

・sqlite3 モジュールが無いと怒られる
・yum が動かなくなった

sqlite3 の件は OS(edora8 AMI on Amazon EC2)が Basic 構成になっていたため、開発環境グループのパッケージが入っていなかったことが原因。改めて Python 2.6.1 インストール時のログを見ると、確かにこんなエラーが出ていた。

Failed to find the necessary bits to build these modules:
_bsddb             _hashlib           _sqlite3
_ssl               _tkinter           bsddb185
bz2                dbm                gdbm
readline           sunaudiodev        zlib

もう少し注意しているべきだった。とりあえず Python の構築に必要な devel 関係のパッケージだけをインストールしてから、もういちど Python をインストールすることで解決。

一方、yum が動かなくなったのは Python のバージョンが変わったことが原因らしい。この件で yum は Python のスクリプトとして書かれていることを知る。

There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   No module named yum

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

この問題に遭遇した人が少なからずいるようで、様々な解決策を検索することができた。その情報を元にして対策してみたがどうもうまくいかない。明示的に Python 2.5.1 を使って yum を起動すれば正常に動作するので、とりあえずはエイリアスを設定してしのぐことにする。

alias yum='/usr/bin/python2.5.1 /usr/bin/yum'

Python をソースではなくてパッケージとして導入すれば、この問題は発生しないと思う。

これらの経験から Python のバージョンアップには注意が必要であることを実感する。問題解決の過程で Python のソースコードディレクトリに入っている README を読んでいたら、複数バージョンを混在させる方法が “Installing multiple versions” という章に記載されていた。以前、このブログに Python の複数バージョンを切り替える方法を書いたが、Python 3.x は README の手順でインストールしてみようと思う。

Amazon EC2 の ec2-upload-bundle と ec2-register

Amazon EC2 で名前などは変えずに前回と同じ手順で ec2-upload-bundle を実行したとき、必ずもう一度 ec2-register を実行しないといけないようだ。よく考えてみれば、ec2-bundle-vol の結果作られるスナップショットが前回と同じとは限らないし、そうなると manifest.xml の中身も変わってくるだろうから、再登録が当然必要になってくる。なお、このとき前の AMI 登録情報はそのまま残っているので、ec2-deregister を使って抹消する必要がある。

Django の開発用 Web サーバを Amazon EC2 で動かす

Amazon EC2 環境に Django を入れてみた。Django 組込の開発用 Web サーバを起動するとき、外部からアクセスできるよう localhost に代えて AMI に割り振られている IP アドレスを引数に指定したが、”Error: That IP address can’t be assigned-to.” というエラーになってしまう。しょうがないので固定 IP ではなく 0.0.0.0 を指定する。

python manage.py runserver 0.0.0.0:8000

続いてポート 8000 に対するアクセス制限を掛けて、開発用 Web サーバには特定のクライアントからのみアクセス可能に設定する。

ec2-authorize default -p 8000 -s xx.xx.xx.xx/xx

Amazon EC2 で ec2-regist を忘れる

なんとか勝手の分かってきた Amazon EC2 の環境に、作業用のユーザを登録したり Emacs や Python、Django などをインストールした。いずれもソースコードからだったので、少々時間が掛かってしまう。低価格とはいってもEC2 インスタンスを四六時中稼働させておくほどの太っ腹ではないので、最後にイメージを作って S3 に保存し、稼働中のインスタンスを停止してからその日の作業を終了。

問題はその翌日に発生した。S3 に保存しておいたイメージを使って、インスタンスを起動しようとしたら「そんなイメージは保存されていない」と怒られてしまう。S3 のバケットを覗くと、保存したイメージはちゃんと格納されている。もういちど ec2-describe-images で確認してみると、確かにイメージは登録されているのだが、識別コードなどが微妙に違っていることに気付く。イメージを S3 に保存したものの、ec2-register による登録をしていなかったのだ。まったく初歩的なミス。

このとき ec2-describe-images で表示されていた情報は、以前に作成した古いイメージのものだった。このイメージの実体はすでに S3 から削除してしまったのだが、そのときに ec2-deregister による登録抹消をしていなかった。そのためイメージの登録情報だけが残ってしまい、新しいイメージの登録をしていなかったにもかかわらず、あたかも登録済みのように見える状態になってしまっていた。ここで旧イメージの登録情報を抹消し、新イメージを新たに登録することで、無事にインスタンスを起動できるようになった。

オープンソースでメシが食えるか!?

「オープンソースでメシが食えるか!?」(恒川裕康 著、秀和システム)を読了。オープンソース・ソフトウェア(以下 OSS)について、そもそも OSS とはどんなものか、というところから始まり、導入にまつわる問題点や運用におけるノウハウまで、とにかく OSS に関わることを網羅的に盛り込んでいる。導入や運用に関するところはかなり具体的に書き込まれているので、これまで OSS とは無縁だった技術系の管理者や、プロジェクトマネージャあたりを読者として想定しているのかもしれない。そういう視点で見れば悪くない内容と思うが、このタイトルはちょっと煽りすぎの気がしないでもない。これでは OSS を活用した実践的なビジネスモデル提案のようなものを思い浮かべてしまうだろうが、そのような内容にはなっていない。いま改めて表紙を見たら副題として「成功するシステム構築のための OSS 活用術」とある。何のひねりも面白みもない表現ではあるが、むしろこちらのほうが中身を適切に言い表していると思う。

以下、本書の目次を転載。

第1章 オープンソースソフトウェアの現状
第2章 オープンソースソフトウェアに対する誤解
第3章 なぜオープンソースソフトウェアの導入でつまずくのか
第4章 オープンソースソフトウェア導入のツボ
第5章 オープンソースソフトウェア運用のツボ
第6章 オープンソースソフトウェアの価値を引き出す
第7章 終わりに

クラウド・コンピューティング ウェブ2.0の先にくるもの

「クラウド・コンピューティング ウェブ2.0の先にくるもの」(西田宗千佳 著、朝日新書)を読了。クラウドを取り巻く現在の状況を手際よく取りまとめたうえで、クラウドが抱える問題点や将来の展望についても述べている。世間では「クラウド」という言葉だけがバズワードとして一人歩きしているところも見られるが、本書は流行に便乗するようなことはなく、きちんと分析的にクラウドを解説している。とりあえず本書があればクラウドの今を一通り見渡すことができると思う。

目次

はじめに ? 「世界に5台しかコンピューターがない」世界
第一章 サービス化 ソフトがネットへ溶けていく
第二章 ボーダーレス化 「iPhone」の革命
第三章 オンライン化 すべてがネット(雲)の向こうに
第四章 クラウド・コンピューティングという「現象」
第五章 クラウドの課題と未来
付録 クラウドを体験する