Google App Engine であそんでみよう. (3)

Sandbox

App Engine 上のWeb Application ではやってはいけないこと ( というかできないこと )がいくつかある. 複数のサーバに自動的に分散デプロイされるわけだし, 個々のサーバにはそれぞれ複数のアプリケーションが動くことを考える当然なことばかりだが, 以下ドキュメントのページよりThe Sandbox

  • ファイルシステムに書いてはいけない. App Engine datastore を使うこと. ただし, アプリケーションの一部としてアップロードしたファイルを読み出すことはできる.
  • 他のホストに対して直接ソケット接続してはいけない.URL fetch API を使ってHTTP, HTTPS で接続することはできる. その場合もポートはそれぞれ80番と433番に固定.
  • 子プロセスやスレッドを作ってはいけない. アプリケーションに対するリクエストは数秒以内に, そのプロセス内で処理されなければならない. 処理に長時間かかるようなプロセスは, Webサーバへの過負荷をさけるために, 終了させられる.
  • その他システムコールを実行してはならない. 例えばsignalなど.

このドキュメントでは「プロセス」という書き方をしているが, 個々のリクエストに対してUNIXプロセスを割り当てているのだろうか? そんなはずないと思うのだけど. Sandbox がどういう実装になっているのか, Web Application Server がどういう作りなのか, 知りたいものだ.

HTTP アクセス

HTTPアクセスはurlfetchというモジュールで提供される.

from google.appengine.api.urlfetch

response = urlfetch.fetch(url="http://xxx.yyy/zzz")

response.content に取得したデータが入る. アクセスできるポートが80番と433番だけという制約は結構きついと思うのだけど, そうでもないんだろうか.