お気に入り | 日本語 | ログイン

Python アプリケーションのアップロードと管理

App Engine Python SDK には、App Engine と対話するための appcfg.py というコマンドが用意されています。このコマンドを使用し、アプリケーションの新しいバージョンのコード、設定ファイル、静的ファイルを App Engine にアップロードできます。また、データストア インデックスの管理やログのダウンロードにもこのコマンドを使用できます。

アプリケーションのアップロード

アプリケーション ファイルをアップロードするには、update アクションとアプリケーションのルート ディレクトリ名で appcfg.py コマンドを実行します。ルート ディレクトリには、アプリケーションの app.yaml ファイルが格納されている必要があります。

appcfg.py update myapp/

appcfg.py は、app.yaml ファイルからアプリケーション ID を取得し、Google アカウントのメール アドレスとパスワードの入力を求めます。アカウントでログインすると、appcfg.py により「cookie」が保存されるため、それ以降パスワードを入力する必要はありません。

--email オプションを使用すると、コマンド ラインでメール アドレスを指定できます。ただし、コマンド ライン オプションでパスワードを指定することはできません。

appcfg.py --email=Albert.Johnson@example.com update myapp/

インデックスの更新

appcfg.py update を使用してアプリケーションをアップロードすると、アップデートにはアプリケーションの index.yaml ファイルが含まれます。index.yaml ファイルでまだ App Engine に存在しないインデックスを定義している場合、App Engine は新しいインデックスを作成します。データストアに含まれるデータの新しいインデックスに含まれるべきデータ量に従い、インデックスの作成には時間がかかる場合があります。アプリケーションから実行されたクエリが構築が完了していないインデックスを使用した場合、クエリでは例外が発生します。

例外が発生しないようにするには、インデックスの構築が完了してから、新しいインデックスを必要とするアプリケーションの新バージョンを実稼働させてください。これを行う方法の 1 つは、index.yaml でインデックスを追加または変更したときには常に app.yamlでアプリケーションに新しいバージョン番号を付与することです。アプリケーションは新しいバージョンとしてアップロードされ、このバージョンは自動的にはデフォルトのバージョンに設定されません。インデックスの構築が完了後、管理コンソールの [バージョン] セクションから、デフォルト バージョンを新しいものに変更できます。

新しいアプリケーションが使用される前に新しいインデックスが作成されるようにする別の方法は、アプリケーションをアップロードする前に index.yaml 設定を個別にアップロードすることです。アプリケーションのインデックス設定のみをアップロードするには、次のコマンドを使用します。

appcfg.py update_indexes myapp/

管理コンソールの [インデックス] セクションからアプリケーションのインデックスのステータスを確認できます。

使用していないインデックスの削除

index.yaml からインデックスを変更または削除する場合、元のインデックスは App Engine から自動的には削除されません。そのため、新しいインデックスの作成中に古いバージョンのアプリケーションを実行させることや、新しいバージョンで問題が発生した場合、すぐに古いバージョンに戻すことができます。

古いインデックスが不要になった場合は、次のコマンドを使用して App Engine から削除できます。

appcfg.py vacuum_indexes myapp/

このコマンドは、最近アップロードされたバージョンの index.yaml で指定されていない、すべてのアプリケーションのインデックスを削除します。

スケジュール タスクの管理

App Engine はスケジュール タスク(cron ジョブとも呼ばれます)をサポートしています。スケジュール タスクは cron.yaml というファイルで指定し、appcfg.py update_cron コマンドを使用してアップロードします。

appcfg.py update_cron myapp/

ファイルが存在している場合、appcfg update もまた cron ジョブの仕様をアップロードします。cron ジョブの詳細については、cron ジョブのドキュメントを参照してください。

ログのダウンロード

App Engine は Python 標準ライブラリから logging モジュールを使用して、アプリケーションが出力したメッセージのログと、標準エラー ストリームに出力されたその他のメッセージを維持しています。App Engine はまた各リクエストもログに記録します。アプリケーションのログは、管理コンソールの [ログ] セクションからも参照できます。

アプリケーションのログをさらに詳細に解析する場合、ログ データのファイルをお使いのコンピュータにダウンロードできます。ログを mylogs.txt というファイルにダウンロードするには、次のコマンドを使用します:

appcfg.py request_logs myapp/ mylogs.txt

デフォルトでは、コマンドは現在のカレンダー日付(太平洋時間の真夜中以降)、INFO 以上のログ レベル(DEBUG レベル メッセージを除く)でログ メッセージをダウンロードします。コマンドは、ローカルにあるログ ファイルを上書きします。日数、最低ログ レベル、ファイルの上書きまたは既存のログ ファイルへの追加をコマンド ラインのオプションで指定できます。オプションの詳細については、下記をご覧ください。

データのアップロード

appcfg.pyupload_data 操作で使用すると、大量のデータをアプリケーションのデータストアにアップロードできます。この操作では、Python アプリケーションで特殊なリクエスト ハンドラを設定することが必要です。この機能を使用するための手順全体については、データのアップロードをご覧ください。

HTTP プロキシの使用

appcfg.py を HTTP プロキシの後ろで実行する場合、appcfg.py にプロキシの名前を通知する必要があります。appcfg.py に HTTP プロキシを設定するには、http_proxy 環境変数を設定します。

Windows(コマンドプロンプト)を使用する場合:

set HTTP_PROXY=http://cache.mycompany.com:3128
appcfg.py update myapp

Mac OS X(ターミナル)または Linux でコマンドラインを使用する場合:

export http_proxy="http://cache.mycompany.com:3128"
appcfg.py update myapp

コマンドライン引数

appcfg.py コマンドは、オプションをセット(アクションとそのアクションの引数)で使用します。

使用できるアクションは次のとおりです。

appcfg.py [options] update <app-directory>

アプリケーションのルートディレクトリを指定して、ファイルをアップロードします。アプリケーション ID とバージョンは、アプリケーション ディレクトリにある app.yaml ファイルから取得されます。

appcfg.py [options] rollback <app-directory>

指定されたアプリケーションの部分的に完了した更新を元に戻します。このアクションは、更新が中断され、ロックされているためにアプリケーションを更新できないことがコマンドによって報告されている場合に使用できます。

appcfg.py [options] update_indexes <app-directory>

新規に追加したインデックスを含むように、App Engine のデータストア インデックスを更新します。新しいバージョンのアプリケーションで index.yaml に追加された、追加のインデックス定義が必要な場合、新しいバージョンのアプリケーションをアップロードする前に、App Engine でインデックス定義を更新できます。アプリケーションの新バージョンをアップロードする数時間前にこのアクションを実行しておけば、その間にインデックスを構築し、アプリケーションの展開前に準備を完了しておくことができます。

appcfg.py [options] vacuum_indexes <app-directory>

App Engine で使用されていないデータストア インデックスを削除します。インデックスの定義が index.yaml から削除された場合、そのインデックスは、アプリケーションのアップロード時に自動的に削除されません。この理由は、アプリケーションの別のバージョンがインデックスを使用する可能性があるためです。このアクションは、古いインデックスがすべて不要になった場合に実行してください。

appcfg.py [options] request_logs <app-directory> <output-file>

App Engine で実行しているアプリケーションのログ データを取得します。output-file は作成、置き換え、または(--append フラグが設定された場合に)付加するファイル名です。output-file がハイフン(-)であれば、ログ データはコンソールに出力されます。次のオプションが request_logs に適用されます。

--num_days=...

取得するログ データの日数。本日の午前 0 時 UTC まで取得。0 値は取得可能なログをすべて取得します。--append が設定されている場合のデフォルトは 0 で、それ以外の場合のデフォルトは 1 になります。

--severity=...

取得するログ メッセージの最低ログ レベル。値はログ レベルに対応する数字で、4 は「CRITICAL(致命的)」、3 は「ERROR(エラー)」、2 は「WARNING(警告)」、1 は「INFO(情報)」、0 は「DEBUG(デバッグ)」となります。指定されたログ レベル以上のすべてのメッセージを取得します。デフォルトは 1(INFO)です。

--append

フェッチしたデータをファイルにまだ存在しない最初のログ行から開始して、出力ファイルに付加します。1 日 1 回、このコマンドを --append を付加して実行すると、すべてのログ データを含むファイルが作成されます。

デフォルトは出力ファイルの上書きです。output-file-(コンソールへの出力)の場合は適用されません。

appcfg.py [options] upload_data <app-directory>

CSV ファイルからデータストアにデータをアップロードします。この機能の使用についての詳細情報は、データのアップロードをご覧ください。

appcfg.py help <action>

指定されたアクションに関するヘルプ メッセージを出力し、終了します。

appcfg.py コマンドでは、すべてのアクションについて次のオプションを受理します。

--quiet

成功したときにメッセージを出力しません。

--verbose

コマンドの実行内容に関するメッセージを出力します。

--noisy

コマンドの実行内容に関する詳細なメッセージを出力します。このオプションは、App Engine チームと共同でアップロードの問題のトラブルシューティングを行うときに役立ちます。

--email=...

アプリケーション管理者の Google アカウントのメール アドレスです(ログインを要求されるアクションの場合)。これが省略されており、以前のコマンド使用で Cookie が保存されていない場合、コマンド プロンプトでこの値が求められます。

--passin

stdin で Google アカウント パスワードが指定された場合は、ツールはこのパスワードを受理し、インタラクティブに要求することはありません。これによって、パスワードをコマンド ラインで入力しなくてもツールをスクリプトから呼び出せます。

--server=...

App Engine サーバーのホスト名です。デフォルトでは appengine.google.com になっています。

--host=...

ローカル マシンのホスト名です。リモート プロシージャの呼び出しに使用されます。

--no_cookies

管理者のログイン用認証情報を Cookie として保存しません。ログイン時に毎回、パスワードの入力を求めます。

--force

使用されていないインデックスを強制的に削除します。デフォルトでは、アプリケーションをアップロードするときに、使用されていないインデックスをサーバーから削除しません。index.yaml ファイルに含まれていないインデックスでも同様です。

--max_size=...

アップロードするファイルの最大サイズ(バイト数)です。この値より大きいサイズのファイルはアップロードされません。デフォルトでは 1048576 になっています。現在、サーバーにアップロードできる最大ファイル サイズは 1,048,576 バイトです。したがって、この値を大きくしても効果はありません。