はじめに
サエンバイノー(こんにちは)、Python界のメンソレータムです。さて猫も杓子もクラウドの時代ですが、みなさんいかがお過ごしでしょうか。先日ふと「DotCloud」というサービスを見かけてベータ登録したので、ご紹介致します。
DotCloudってなに?
DotCloudはいままでWebアプリケーションホスティングサービスの中で期待されていた領域に切り込もうとしてますよ。まず使える言語はPHP, Ruby, Python, Javaがいまのbetaの時点で使えて、さらにこれからリクエストがある言語にも対応しようとしてます。(ErlangとかSchemeとか)で、DBとかMQとかすでに有名所はいくつか使えて、なんでもリクエストがあれば対応するぜ!っていう勢い。またスケールに関してもスケールアップ、スケールアウト共に「がんばります!」っていうテンション。そして無料アカウントもあります!
PythonだったらこれまでGoogle App Engineがあったわけだけど、割と制限もあったじゃないですか。ライブラリとか。そういう意味ではDotCloudは外部依存ライブラリはpipの形式で必要なものを書いておけばそれも使えるみたいだし、なんかすごく自由度が高い。スケールさせるならGAEで、ちょっとしたアプリならDotCloudでって感じでPythonでWebアプリ書く人にとって、また一つサーバ管理から解放されるんじゃないかなー。
PHPでもRubyでもチュートリアルがあるんで、なにが出来るかはそれを読んでいただけると分かると思います。ちなみにドキュメントはSphinx製です。
使い方
開発環境を作成
GAEでは専用のアプリケーションをダウンロードして設定したりしますね。DotCloudは割とミニマルな環境で設定出来るようにPyPIに上がってる専用パッケージを使います。
$ easy_install dotcloud
そして、CLIコマンドが使えるようになるのでAPIキーを登録します。
% dotcloud Warning: /Users/ymotongpoo/.dotcloud.conf does not exist. Enter your api key (You can find it at http://www.dotcloud.com/account/settings): xxxxxxxxxxxxxxxxxxxx:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz error: usage: dotcloud [-h] {status,info,run,logs,deploy,setup,list,alias,ssh,destroy,push,rollback,restart} ...
必ずerrorとでるのが紛らわしいですが、これで ~/.dotcloud.conf ができて、準備完了です。中身はこんな感じ。
{ "url": "http://api.dotcloud.com/", "apikey": "xxxxxxxxxxxxxxxxxxxx:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" }
アプリを作成
Pythonのアプリ作成に関しては次のリンクで説明してる。ほかにもPHPやRubyの解説も載ってます。Pythonでは基本WSGIアプリケーションならサポートしますよ、ってことみたい。Nginx+uWSGIで実行+監視ってことらしい。
デプロイするとプロジェクトルートにあるwsgi.pyがまず読まれてハンドラとか諸々設定してくれます。Djangoはデフォルトで使えるんでちょっと試しに作ってみます。
% django-admin.py startproject bucho
次にbuchoとおなじレベルにwsgi.pyを作成します。
# -*- coding: utf-8 -*- import os import sys os.environ['DJANGO_SETTINGS_MODULE'] = 'bucho.settings' import django.core.handlers.wsgi djangoapplication = django.core.handlers.wsgi.WSGIHandler() def application(environ, start_response): if 'SCRIPT_NAME' in environ: del environ['SCRIPT_NAME'] return djangoapplication(environ, start_response)
またDjangoを使ってアプリケーション作ったんでrequirements.txtにpipの形式でDjangoを指定しておきます。
$ echo Django > requirements.txt
階層構造はこんな感じ。なんも書いてないですよ。ただのテスト用アプリ。
bucho-cloud ├── bucho │ ├── __init__.py │ ├── manage.py │ ├── settings.py │ └── urls.py ├── requirements.txt └── wsgi.py
これをデプロイします。
% dotcloud deploy -t python bucho.www Created "bucho.www" % dotcloud push bucho.www . # upload . ssh://dotcloud@uploader.dotcloud.com:1060/bucho.www # rsync building file list ... done ./ requirements.txt wsgi.py bucho/ bucho/__init__.py bucho/manage.py bucho/settings.py bucho/urls.py sent 2.67K bytes received 132 bytes 373.07 bytes/sec total size is 4.80K speedup is 1.72 Scheduling build Build started. To read the build logs: $ dotcloud logs --build bucho.www
気になることをFAQで確認した
どこでホストされてるか?
Amazon EC2のus-east-1リージョンでホストされてるみたいです。
スケールすんの?
スケールアップは簡単にできるよって書いたる。で、スケールアウトに関してはその方法を模索するためにこのサービスをやってる的なことが書いてある。
使えるコンポーネントとか
ここを確認してください。
Python的なもので説明が書いてあるものをそのまま抜き出すとalpha以上(ちょっとでもサポートがあるもの)は
- Celery: supported by Python worker service
- Django: supported by Python WSGI service
- Python (WSGI): beta
- Python (worker): beta
- RabbitMQ: beta
- Tornado: supported by Python worker (but to be really useful, it needs the arbitrary port forwarding feature, that is not released yet)
またDBは同様にalpha以降だと