Python 2 は、コミュニティでサポートを終了しました。Python 2 アプリを Python 3 に移行することをおすすめします。

バンドルされた App Engine サービスの移行の概要

App Engine スタンダード ランタイムの Python 3 ランタイムには、Memcache や Task Queues などのバンドル サービスは含まれていません。代わりに Google Cloud が提供するスタンドアロン プロダクトが、Python 2 ランタイムのほとんどのバンドル サービスに相当します。Google Cloud で個別のプロダクトとして提供されないバンドル サービス(画像処理、検索、メッセージングなど)については、サードパーティ プロバイダまたはその他の回避策をおすすめします。

このページでは、バンドルされている各サービスの移行パスについて説明します。また、いくつかのサービスに対する詳細な移行ガイドは、今後数か月の間に提供される予定です。

Google Cloud の権限について

移行されるアプリとそれが使用する Google Cloud サービスは同じサンドボックス環境で動作しないため、各サービスにアクセスするにはアプリを承認する必要があります。たとえば、Datastore や Cloud Tasks とやり取りするには、アプリはこれらのサービスへのアクセス権を持つアカウントの認証情報を提供する必要があります。

デフォルトでは、App Engine スタンダード ランタイムのアプリにより、App Engine デフォルト サービス アカウントの認証情報が提供され、これには、アプリと同じプロジェクト内のデータベースにアクセスする権限があります。

次のいずれかの条件に当てはまる場合は、認証情報を明示的に提示する別の認証方法を使用する必要があります。

  • アプリと Memorystore データベースが異なる Google Cloud プロジェクトに属する。

  • デフォルトの App Engine サービス アカウントに割り当てられているロールが変更されている。

代替認証の方法については、サーバー間の本番環境アプリケーションの認証の設定をご覧ください。

ローカル開発用の認証

アプリをローカルで開発またはテストするには、サービス アカウントを使用することをおすすめします。プロジェクトのあらゆることに対して大きな権限を有しているため、App Engine のデフォルトのサービス アカウントは使用しないでください。代わりに、特定の開発作業とテスト作業に必要な最低限の権限を持つサービス アカウントを作成して使用します。

サービス アカウントを設定してアプリに接続する手順については、サービス アカウントの資格情報を手動で取得して提供するをご覧ください。

クライアント ライブラリのインストール

Python アプリから Google Cloud サービスを使用する最も簡単な方法は、サービスの Python クライアント ライブラリをインストールすることです。(Google Cloud サービスにより、JSON REST とその他のインターフェースも提供されます)App Engine ランタイムにクライアント ライブラリをインストールする手順は、Python 2 アプリと Python 3 アプリで異なります。

Python 2 アプリ用ライブラリのインストール

Python 2 ランタイムで動作するアプリが使うライブラリをインストールするには、次のようにします。

  1. サードパーティ ライブラリの保存先ディレクトリ(lib/ など)を作成します。

  2. app.yaml ファイルと同じフォルダに requirements.txt ファイルを作成し、googleapis_common_protos ライブラリとともにクライアント ライブラリの名前を追加します。

    Python 2 アプリには、Google Cloud サービスにアクセスするために googleapis_common_protos が必要です。

    たとえば、googleapis_common_protos、Pub/Sub、Cloud Tasks のライブラリをインストールする場合は、次のファイルが使用されます。

    googleapis_common_protos
    google-cloud-pubsub
    google-cloud-tasks
    
  3. pip install を使用して、作成したフォルダにライブラリをインストールします。 例:

    pip install -t lib -r requirements.txt
    
  4. app.yaml ファイルの libraries セクションで RPC ライブラリを指定します。

    libraries:
    - name: grpcio
      version: 1.0.0
    
  5. まだ作成されていない場合は、app.yaml ファイルと同じフォルダに appengine_config.py ファイルを作成します。次のコードを appengine_config.py ファイルに追加します。

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)
    

    必ず pkg_resources モジュールを使用して、アプリがクライアント ライブラリの適切なディストリビューションを使用するようにしてください。

    上記の例の appengine_config.py ファイルは、lib フォルダが現在の作業ディレクトリにあることを前提としています。lib が常に現在の作業ディレクトリにあることを保証できない場合は、lib フォルダへのフルパスを指定します。例:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  6. アプリをデプロイします。

App Engine は、appengine_config.py ファイルで指定されたディレクトリ内のすべてのライブラリを Python 2 ランタイムにアップロードします。

Python 3 アプリ用ライブラリのインストール

Python 3 ランタイムで動作するアプリが使うライブラリをインストールするには、次のようにします。

  1. アプリの requirements.txt ファイルにライブラリ名を追加します。例:

    google-cloud-ndb
    
  2. アプリをデプロイします。

App Engine は、requirements.txt ファイルに記述されているすべてのライブラリを Python 3 ランタイムに自動的にアップロードします。

App Engine バンドル サービスの移行方法の概要

Blobstore

データを格納および取得するには、Cloud クライアント ライブラリを介して Cloud Storage を使用します。移行を開始するには、Strage 用 Cloud クライアント ライブラリへの移行をご覧ください。

データストア

Python 2 アプリが Datastore とのやりとりに NDB を使用している場合は、Cloud NDB Python 3 ライブラリに移行します。Python 3 の新しいアプリでは、Datastore モードのクライアント ライブラリを使用する必要があります。

詳細は下記のページをご覧ください。

画像

画像の配信には、Cloud Storage から行う方法、直接配信する方法、サードパーティのコンテンツ配信ネットワーク(CDN)を使用する方法があります。

画像のサイズを変更、変換、操作するには、Pillow や ImageMagick の Python インターフェース などの画像処理ライブラリを使用します。こうしたサードパーティ ライブラリを使用するには、ライブラリを依存関係として追加し、ライブラリの API を呼び出すようにコードを更新します。

また、App Engine Images サービスでは、サービス提供 URL を使用して画像のサイズ変更を処理することで、アプリケーションへの動的リクエストを回避する機能も提供されます。同様の機能は、サイズが変更された画像を事前に生成し、Cloud Storage にアップロードして配信することでも実現できます。あるいは、画像のサイズ変更を提供するサードパーティ コンテンツ配信ネットワーク(CDN)サービスを利用することもできます。

ログ

リクエストログは引き続き Cloud Logging に表示されますが、自動的な関連付けは行われなくなりました。必要なロギング動作を実装するために、Cloud Logging クライアント ライブラリを使用できます。

メール

メールを送信するには、SendGridMailgunMailjet などのサードパーティのメール プロバイダを使用します。これらのサービスはいずれも、アプリケーションからメールを送信するための API を提供しています。

Memcache

Python 2 アプリで Memcache を明示的に使用する場合は、Python 3 環境でアプリを実行する前に別のキャッシュ ソリューションに移行する必要があります。Memorystore for Redis をキャッシュ サービスとして使用することをおすすめします。詳細については、Memcache から Memorystore への移行をご覧ください。

モジュール

アプリケーションが実行しているサービスの情報を取得および変更するには、環境変数と App Engine Admin API を組み合わせて使用します。

サービス情報 アクセス方法
現在のアプリケーション ID GAE_APPLICATION 環境変数
現在のプロジェクト ID GOOGLE_CLOUD_PROJECT 環境変数
現在のサービス名 GAE_SERVICE 環境変数
現在のサービス バージョン GAE_VERSION 環境変数
現在のインスタンス ID GAE_INSTANCE 環境変数
デフォルトのホスト名 Admin API の apps.get メソッド
サービスのリスト Admin API の apps.services.list メソッド
特定のサービスのバージョンのリスト Admin API の apps.services.versions.list メソッド
特定のサービスのデフォルト バージョン(トラフィック分割を含む) Admin API の apps.services.get メソッド
特定のバージョンで実行中インスタンスのリスト Admin API の apps.services.versions.instances.list メソッド

アプリケーションが実行しているサービスに関する利用可能なデータの詳細については、Python 2 ランタイム環境をご覧ください。

名前空間

Namespaces API では、テナントごとに一意の名前空間文字列を指定するだけで、マルチテナント アプリでテナント間でデータを分割できました。

Datastore は直接マルチテナンシーをサポートしていますが、他の Google Cloud サービスはサポートしていません。マルチテナントのアプリで他の Google Cloud サービスを使用する場合は、手動でマルチテナンシーを処理する必要があります。完全に分離されたサービス インスタンスを得るには、Cloud Resource Manager API を使ってプログラムで新規プロジェクトを作成し、プロジェクトでリソースにアクセスできます。

OAuth

App Engine OAuth サービスを使用して OAuth 2.0 トークンを確認する代わりに、OAuth 2.0 APIoauth2.tokeninfo メソッドを使用します。

Compute Engine 上で ElasticSearch のような全文検索データベースをホストし、サービスからアクセスします。

タスクキュー

pull キューを Pub/Sub に移行し、プッシュキューを Cloud Tasks に移行します。 アプリが pull キューと push キューの両方を使用している場合は、最初に pull キューを移行して、Cloud Tasks での予期しない動作を防ぎます。

これらの移行の詳細については、次のページをご覧ください。

ユーザー認証

Users API の代わりに、次のような HTTP ベースの任意の認証メカニズムを使用します。