Remote API で App Engine にアクセスする

Remote API ライブラリを使用すると、App Engine アプリケーションで使用可能なサービスに Python クライアントからアクセスできます。

例えば、App Engine アプリケーションで Cloud Datastore または Google Cloud Storage を使用する場合、Remote API を使用して Python クライアントからこうしたストレージ リソースにアクセスできます。

また、Remote API を使用すると、ローカルマシンで実行されているアプリやローカルの Remote API インタラクティブ シェルからアプリケーションのデータストアにアクセスできます。Remote API は実際のサービスを利用するので、このアクセスでは、割り当て制限や課金対象のリソースが使用されます。

Python 用の App Engine SDK には Remote API ライブラリが含まれています。

アプリで Remote API アクセスを有効にする

アプリケーションで Remote API を有効にする最も簡単な方法は、アプリの app.yaml ファイルで builtins ディレクティブを使用する方法です。この方法では、デフォルトの URL /_ah/remote_api/ を使用します。同じファイルで url ディレクティブを使用すると、別の URL を指定できます。

builtin

app.yaml ファイルで builtins ディレクティブを指定すると、デフォルトの URL /_ah/remote_api で Remote API を使用できます。

runtime: python27
api_version: 1
threadsafe: true

builtins:
- remote_api: on

URL

app.yamlurl ディレクティブを使用すると、Remote API に別の URL を指定できます。

- url: /some-URL/*
  script: google.appengine.ext.remote_api.handler.application

この変更を行う前に、アプリケーションを App Engine にデプロイしてください。

Remote API シェルを使用する

Python SDK には Remote API シェルが含まれています。このシェルを使用すると、アプリケーションで使用されている App Engine サービスで Python コマンドを実行できます。App Engine にアプリをアップロードしたときに使用された認証情報が自動的に使用されるので、認証情報を入力する必要はありません。

Remote API シェルを開始するには:

  1. ローカルマシンのターミナル ウィンドウで次のコマンドを実行します。

     [GAE-SDK-INSTALL-DIRECTORY]/remote_api_shell.py -s [YOUR-PROJECT-ID].appspot.com
    

    [GAE-SDK-INSTALL-DIRECTORY] は Python 用 App Engine SDK のパスで置き換え、[YOUR-PROJECT-ID] はプロジェクト ID で置き換えます。

  2. 表示されたインタラクティブ シェルで、必要な Python コマンドを実行します。たとえば、アプリケーションが Cloud Datastore を使用している場合、10 件のレコードを取得するには、次の ndb クエリを実行します。

     >>> from google.appengine.ext import ndb
     >>>
     >>> # Fetch 10 keys from the datastore
     >>> ndb.Query().fetch(10, keys_only=True)
    

ローカル クライアントで Remote API を使用する

ローカル アプリケーションで Remote API を使用すると、App Engine で実行されるアプリが使用しているサービスにもアクセスできます。

ローカル アプリケーションで Remote API を使用するには:

  1. Remote API を有効にします

  2. 次のように、Python ディレクトリ PYTHONPATH 環境変数をエクスポートします。

     export PYTHONPATH=/usr/somedir/v3/bin/python2.7
    

    このパスを Python の実際の場所で置き換えます。

  3. Python 用 App Engine SDK の場所を PYTHONPATH に追加します。

     export GAE_SDK_ROOT="/usr/local/home/mydir/google_appengine"
     export PYTHONPATH=${GAE_SDK_ROOT}:${PYTHONPATH}
    

    上の SDK パスを App Engine SDK の実際のパスで置き換えます。

  4. App Engine SDK のすべてのモジュールが正常にインポートされるように、クライアント コードで dev_appserver をインポートし、dev_appserver.fix_sys_path() を呼び出します。

    try:
        import dev_appserver
        dev_appserver.fix_sys_path()

  5. 次の remote_api_stub コードをアプリケーションに追加します。これにより、コードでプロジェクト ID が渡されます。

    remote_api_stub.ConfigureRemoteApiForOAuth(
        '{}.appspot.com'.format(project_id),
        '/_ah/remote_api')

    Remote API にデフォルトの URL /_ah/remote_api を使用しない場合、使用する URL を反映するように上記のコードを変更する必要があります。remote_api_stub.ConfigureRemoteApiForOAuth の定義とドキュメントについては、SDK ファイル [GAE-SDK-INSTALL-DIRECTORY]/google/appengine/ext/remote_api/remote_api_stub.py をご覧ください。

  6. App Engine サービスにアクセスできるように、必要な App Engine インポートと Python コードを追加します。次のサンプルコードでは、プロジェクトのデータストアにアクセスします。

    import argparse
    
    try:
        import dev_appserver
        dev_appserver.fix_sys_path()
    except ImportError:
        print('Please make sure the App Engine SDK is in your PYTHONPATH.')
        raise
    
    from google.appengine.ext import ndb
    from google.appengine.ext.remote_api import remote_api_stub
    
    def main(project_id):
        remote_api_stub.ConfigureRemoteApiForOAuth(
            '{}.appspot.com'.format(project_id),
            '/_ah/remote_api')
    
        # List the first 10 keys in the datastore.
        keys = ndb.Query().fetch(10, keys_only=True)
    
        for key in keys:
            print(key)
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser(
            description=__doc__,
            formatter_class=argparse.RawDescriptionHelpFormatter)
        parser.add_argument('project_id', help='Your Project ID.')
    
        args = parser.parse_args()
    
        main(args.project_id)

  7. アプリケーションを App Engine にデプロイして、Remote API クライアントを開始します。

     python your-client.py YOUR-PROJECT-ID
    

    your-client.py はクライアント モジュールで、YOUR-PROJECT-ID はプロジェクト ID に置き換えます。ここでは、client.py コードサンプルのように、クライアントがコマンドラインからプロジェクト ID を受け取ることを前提としています。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境