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 ランタイムで動作するアプリが使うライブラリをインストールするには、次のようにします。
サードパーティ ライブラリの保存先ディレクトリ(
lib/
など)を作成します。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
pip install
を使用して、作成したフォルダにライブラリをインストールします。 例:pip install -t lib -r requirements.txt
アプリの
app.yaml
ファイルで、libraries
セクションに Google RPC ライブラリと SSL ライブラリを指定します。libraries: - name: grpcio version: 1.0.0 - name: ssl version: latest
クライアント ライブラリの中には、SSL ライブラリを必要としないものもあります。クライアント ライブラリに必要な SSL ライブラリが含まれていない場合は、アプリがリクエストを受信したとき、ログビューアに SSL エラーが表示されます。
まだ作成されていない場合は、
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')
アプリをデプロイします。
App Engine は、appengine_config.py
ファイルで指定されたディレクトリ内のすべてのライブラリを Python 2 ランタイムにアップロードします。
Python 3 アプリ用ライブラリのインストール
Python 3 ランタイムで動作するアプリが使うライブラリをインストールするには、次のようにします。
アプリの
requirements.txt
ファイルにライブラリ名を追加します。例:google-cloud-ndb
アプリをデプロイします。
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 では、ログビューアのログの表示、ログのダウンロード、重大度によるメッセージのフィルタリング、特定のリクエストとのアプリ メッセージの関連付けなどの機能がサポートされています。別の方法では、構造化された特定のデータを JSON オブジェクト内に持つログメッセージを書き込むことで、こうした機能を有効にできます。
詳細については、Cloud Logging への移行をご覧ください。メール
メールを送信するには、SendGrid、Mailgun、Mailjet などのサードパーティのメール プロバイダを使用します。これらのサービスはいずれも、アプリケーションからメールを送信するための 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 メソッド |
Namespace
Namespaces API では、テナントごとに一意の名前空間文字列を指定するだけで、マルチテナント アプリでテナント間でデータを分割できました。
Datastore は直接マルチテナンシーをサポートしていますが、他の Google Cloud サービスはサポートしていません。マルチテナントのアプリで他の Google Cloud サービスを使用する場合は、手動でマルチテナンシーを処理する必要があります。完全に分離されたサービス インスタンスを得るには、Cloud Resource Manager API を使ってプログラムで新規プロジェクトを作成し、プロジェクトでリソースにアクセスできます。
OAuth
App Engine OAuth サービスを使用して OAuth 2.0 トークンを確認する代わりに、OAuth 2.0 API の oauth2.tokeninfo
メソッドを使用します。
検索
Compute Engine 上で ElasticSearch のような全文検索データベースをホストし、サービスからアクセスします。
タスクキュー
pull キューを Pub/Sub に移行し、プッシュキューを Cloud Tasks に移行します。 アプリが pull キューと push キューの両方を使用している場合は、最初に pull キューを移行して、Cloud Tasks での予期しない動作を防ぎます。これらの移行の詳細については、次のページをご覧ください。
URL 取得
デフォルトでは、Python 2.7 ランタイムは、URL 取得サービスを使用して送信 HTTP(S) リクエストを処理します。標準の Python ライブラリを使用してリクエストを発行する場合も同様です。Python 3 ランタイムでは、送信リクエストの処理に中間サービスを必要としないため、URL 取得サービスは使用できません。
アプリで標準の Python ライブラリを使用してリクエストを発行する場合、Python 3 ランタイムで URL 取得が行われなくても、アプリのリクエスト機能に影響はありません。ただし、念のため、URL 取得を使用していない環境でアプリをテストすることをおすすめします。
非同期リクエストを行うなど、アプリで URL 取得 API を直接使用している場合は、requests
などの標準 Python ライブラリを使用するように移行する必要があります。
詳細については、送信リクエストの移行をご覧ください。
ユーザー認証
Users API の代わりに、次のような HTTP ベースの任意の認証メカニズムを使用します。
- OAuth 2.0 と OpenID Connect。任意のプロバイダからのフェデレーション ID を提供します。Google は OpenID Connect の ID プロバイダです。その他のプロバイダも利用できます。
- Firebase Authentication。ユーザー名 / パスワードを使用した認証を提供し、Google、Facebook、Twitter などと連携した ID を提供します。
- Google Identity Platform。Google ユーザー アカウントを認証、承認するための多くのオプションを備えています。
- Auth0。さまざまな ID プロバイダおよびシングル サインオン機能を使った認証を提供します。