Python用Google App Engine へようこそ! App Engineを使えば、プログラム言語 Python を使ってウェブアプリケーションを構築でき、プロの開発者がワールドクラスのアプリケーションを構築するのに使っている多くのPython用ライブラリ・ツール・フレームワークを使用できます。 あなたの Python アプリケーションはGoogleの拡張可能なインフラ上で動作し、大規模で安定したストレージとサービスを使用します。
App Engine は、セキュア"サンドボックス"環境に事前に読み込んだPython インタプリタを使ってPythonアプリケーションのコードを実行します。 あなたのアプリはこの環境とやり取りをすることでウェブのリクエストを受信し、処理を実行し、応答を返します。
Python ウェブアプリはWSGI プロトコルを使って App Engine ウェブサーバとやり取りをするので、アプリはWSGI互換のウェブアプリケーションフレームワークを使用することができます。 App Engine には、webapp2と呼ばれる簡単に使えるシンプルなウェブフレームワークが含まれています。 大規模アプリケーションの場合は、Djangoのようなメジャーなサードパーティ製フレームワークを使った方が良いでしょう。
この Python インタプリタでは、Python 標準ライブラリ以外にもあなたがアプリにインクルードしたPython モジュールを含む、任意のPythonコードを実行できます。 このインタプリタはCコードで書かれたPythonモジュールを読み込むことはできません; "純正の" Python 環境になります。
セキュア "サンドボックス" 環境は、安全性とセキュリティのためにあなたのアプリケーションを分離します。 これにより、アプリは他のアプリのパフォーマンスと拡張性に干渉しないアクションのみを実行できます。 例えば、アプリはデータをローカルファイルシステムに書き込んだり、勝手にネットワークコネクションを作成したりできません。 その代わり、App Engineが提供している、データを保存したりインターネット上で通信ができる拡張可能なサービスを使用します。 アプリがサンドボックスの制限によって使用できない標準ライブラリからモジュールをインポートしようとした時、Pythonインタプリタは例外を発生させます。
App Engine プラットフォームは、あなたがコード上から呼び出すことができる サービス をたくさん提供しています。 また、アプリケーションでは指定した間隔で実行されるスケジュールタスクを実行することもできます。
まだ見ていない場合は、Python と Google App Engineを使ったウェブアプリケーションの開発を対話的に学ぶことができる Python 2.7 入門ガイドを参照してください。
Python SDKのappcfg.py
という名前のツールにapp.yaml
という名前の設定ファイルと合わせて使用することで、
App Engineにアプリケーションが使用するPythonランタイム環境を指示することができます。
app.yaml
ファイルでruntime
エレメントを指定します。Python 2.7を使用するには、app.yaml
ファイルに以下を記載してください:
runtime: python27
api_version: 1
threadsafe: true
...
最初のエレメント runtime
で、Python のランタイム環境を選択します。
二番目のエレメント api_version
で、使用するPythonランタイム環境のバージョンを選択します。
これを書いている時点では、App Engineが持っているPython ランタイム環境のバージョンは 1
だけです。
App Engineの開発チームが既存のコードと互換性のない環境への変更をリリースする必要がある場合に、このバージョン情報を新しくしたうえで変更を行います。
アプリのapi_version
設定を変更してアップロードするまでは、アプリは選択したバージョンのラインタイムを使い続けます。
app.yaml
とappcfg.py
の詳細情報については、Python アプリケーション設定とPython 2.7への移行と アプリのアップロードを参照してください。
複数のウェブサーバーにまたがったアプリケーションへのリクエストを分散し、アプリケーションが別のアプリケーションへ干渉しないようにするために、 App Engineでは制限された"サンドボックス"環境内でアプリケーションを実行させます。 この"サンドボックス"環境では、アプリケーションはコードを実行し、App Engineデータストア内でデータを保存したり呼び出したり、App EngineメールやURLフェッチやusers サービスを使用したり、ユーザーのウェブリクエストを精査して応答の準備をしたりできます。
App Engine アプリケーションでは以下のことができません:
ファイルシステムへの書き込み。データを永続的に保存する場合、アプリケーションはApp Engine データストアを使用しなければなりません。ファイルシステムからの読み込みは可能で、アプリケーションと一緒にアップロードされた全てのファイルも読み込み可能です。
ゆっくり応答する。アプリケーションへのウェブからのリクエストは、数秒以内に処理されなければなりません。 応答にかなり時間がかかるプロセスは、ウェブサーバーへの負荷を避けるために終了されます。
他の種類のシステムコールを作成する。
Python 2.7 ランタイムではPython バイトコードへのアクセスは制限されていません。バイトコードの生成や操作を行うライブラリ(例えば jinja2 テンプレートライブラリ)はこのランタイム上で動作することができます。 Python 2.5 ランタイムではPython バイトコードの操作は許可されていません。
Python 2.7ランタイムを使用している場合は、.pyc
ファイルをアップロードして使用することができますが、同じバージョンの.py
ファイルと .pyc
ファイルをアップロードすることはできません。
.py
ファイルや.pyc
ファイル(もしくはそれらの組み合わせ)を含んだzipファイルをアップロードすることができます。
.pyc
ファイルをアップロードする場合、重要な注意点がいくつかあります:
.pyc
拡張子のファイルをアップロードしていたとしても、スクリプトハンドラは.py
拡張子のファイルを使用します。
.pyc
ファイルの配置はappcfg
によってスキップされます。
.pyc
ファイルの配置がスキップされ無いようにするためには、app.yaml
ファイルのskip_files
項目を上書きする必要があります。
.pyc
ファイルをビルドするにはPython 2.7 を使用しなければなりません。
開発しているマシーン上で別のバージョンの Python (Python 2.6のような)を使用している場合は、
互換性のある.pyc
ファイルをビルドするためにバージョン2.7を取得する必要があります。
thread
モジュールや threading
モジュールを使用しているPython 2.7では、スレッドを作成することができます。
リクエストが終了するとスレッドはランタイムによって結合されるため、リクエスト終了後はスレッドは実行できなくなるので注意してください。
バックエンドサーバーでは、バックグラウンドスレッドを起動することができます; バックグラウンドスレッドは、自身を起動したリクエストよりも "長生き" します。
Python ランタイム環境で動作する全てのコードは 純正Pythonでなければならず、C 拡張子やその他コンパイルが必要なコードを含んではいけません。
ランタイム環境には Python 標準ライブラリが含まれています。
ネットワーク機能やファイルシステムへの書き込み機能などはApp Engineでサポートされていないため、それらのコア機能を持ついくつかのモジュールは使用できません。
加えて、 os
モジュールは使用できますが、サポートされておらず使えない機能があります。
サポートされていないモジュールをインポートしようとしたり、サポートされていない機能を使おうとすると、例外が発生します。
標準ライブラリのいくつかはApp Engineで動作するように置き換えられたりカスタマイズされたりしています。二つのPythonランタイムの間で、これらのモジュールは以下で説明するような違いがあります。
Python 2.7 ランタイムでは、以下のモジュールが置き換えられたりカスタマイズされたりしています。:
Python 標準ライブラリと App Engine ライブラリに加えて、 Python 2.7 ランタイムには いくつかの サードパーティ製ライブラリが含まれています。
あなたのアプリケーションディレクトリにコードをきじゅるすることで、アプリケーションにサードパーティ製 Python ライブラリをインクルードできます。 アプリケーションディレクトリにモジュールのディレクトリへのシンボリックリンクを作成すると、appcfg.py ファイルはそのリンクに従ってあなたのアプリにモジュールをインクルードします。
Python モジュールは、アプリケーションのルートディレクトリ(app.yaml
ファイルがあるディレクトリ)を含むパスをインクルードします。
あなたがアプリケーションのルートディテクトリに作成したモジュールは、ルートからのパスを使うことで使用可能です。
Python はサブディレクトリをパッケージとして認識するので、サブディレクトリに__init__.py
ファイルを作成するのを忘れないでください。
App Engine Python SDK には、アプリケーションをテストし、アプリケーションのファイルをアップロードし、データストアのインデックスを管理し、ログデータをダウンロードし、データストアへ大量のデータをアップロードするためのツールが含まれています。
デベロップメントサーバを使うと、あなたのアプリケーションをローカル環境でテストすることができます。 このサーバではApp Engineデータストア、サービス、サンドボックス制限をシミュレートします。 デベロップメントサーバ では、テスト中のアプリクエリー処理に基づくデータストアインデックスの設定を生成することもできます。
appcfg.pyと呼ばれる多目的ツールでは、App Engine上で動作するアプリケーションとのコマンドラインでの全てのやり取りを制御します。
appcfg.py
はあなたのアプリケーションを App Engineにアップロードしたり、単にデータストアインデックスの設定を変更してコードを更新する前に新たなインデックスを構築したりもできます。
またアプリのログデータもダウンロードできるので、あなたの独自ツールを使ってアプリのパフォーマンスを解析することもできます。