レガシー バンドル サービスからの移行

従来のバンドル サービスで提供される機能の大部分が Cloud クライアント ライブラリで提供されるようになりました。詳細については、下記のおすすめの代替方法をご覧ください。

バンドルされていないソリューションへの移行がプロジェクトでできない場合、代替として Python 3アプリで従来のバンドル サービスの使用を継続できる可能性があります。このアプローチでは、移行サイクルの後半でバンドルされていないサービスに移行できます。

Google Cloud では、Python 2 ランタイムのバンドル サービスの一部と同様の機能を提供するスタンドアロン プロダクトを使用できます。Google Cloud で個別のプロダクトとして提供されないバンドル サービス(画像処理、検索、メッセージングなど)については、サードパーティ プロバイダまたはその他の回避策をおすすめします。

このページでは、バンドルされている各サービスの移行パスについて説明します。

Google Cloud の権限について

移行されるアプリとそれが使用する Google Cloud サービスは同じサンドボックス環境で動作しないため、各サービスにアクセスするにはアプリを承認する必要があります。たとえば、Datastore モードの Firestore(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 ファイルを作成し、クライアント ライブラリの名前を追加します。

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

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

    pip install -t lib -r requirements.txt
  4. アプリの app.yaml ファイルで、libraries セクションに必須の Google RPC ライブラリと setuptools ライブラリ、オプションの SSL ライブラリを指定します。

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    クライアント ライブラリの中には、SSL ライブラリを必要としないものもあります。クライアント ライブラリに必要な SSL ライブラリが含まれていない場合は、アプリがリクエストを受信したとき、ログ エクスプローラに SSL エラーが表示されます。

  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 を使用します。ご利用にあたっては、Cloud Storage の使用 および Blobstore から Cloud Storage への移行ガイドをご覧ください。この移行をシミュレートするには、Blobstore 使用状況をサンプルアプリに追加し、Cloud Storage に移行します。

Datastore

Python 2 アプリで NDB を使用して Datastore を操作する場合は、Cloud NDB ライブラリに移行します。Cloud NDB は主に Python 2 アプリの移行ツールとして使用することを目的としています。Python 3 アプリでは、Datastore モードのクライアント ライブラリを使用することをおすすめします。

詳しくは、Cloud NDB への移行をご覧ください。サンプルアプリでこの移行をシミュレートするには、App Engine ndb から Cloud NDB への移行をご覧ください。

画像

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

画像のサイズ変更、変換、操作を行うには、Pillow や ImageMagick の Python インターフェースなどの画像処理ライブラリを使用します。

こうしたサードパーティ ライブラリを使用するには、ライブラリを依存関係として追加し、ライブラリの API を呼び出すようにコードを更新します。

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

ロギング

Cloud Logging を使用するように、アプリを更新することをおすすめします。Cloud Logging では、ログ エクスプローラのログの表示、ログのダウンロード、重大度によるメッセージのフィルタリング、特定のリクエストとのアプリ メッセージの関連付けなどの機能がサポートされています。または、データの精度よりも簡素化を求める場合、構造化ログを stdout または stderr に書き込むこともできます。詳細については、ログの書き込みと表示Cloud Logging への移行をご覧ください。

メール

メールを送信するには、SendGridMailgunMailjet などのサードパーティのメール プロバイダを使用します。これらのサービスはいずれも、アプリケーションからメールを送信するための API を提供しています。現時点では、受信メッセージングにおすすめのサードパーティのプロバイダはございません。

Memcache

アプリケーション データをキャッシュに保存するには、Memorystore for Redis を使用します。

詳細については、Memcache から Memorystore への移行をご覧ください。この移行をシミュレートするには、サンプルアプリに Memcache 使用状況を追加し、Memorystore for Redis に移行します。

NDB(または Cloud NDB)リクエストのレイテンシを短縮するためにのみ Memcache を使用するアプリの場合、Memcache や Memorystore for Redis の代わりに、Cloud NDB の Redis の組み込みサポートを使用します。

モジュール

アプリケーションが実行しているサービスの情報を取得および変更するには、環境変数と 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 3ランタイム環境をご覧ください。

Namespace

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 のような全文検索データベースをホストし、サービスからアクセスします。

タスクキュー

App Engine タスクキュー サービスは、2 つの異なるモードで使用できます。 いずれかの移行元から 2 つの異なるスタンドアロン クラウド プロダクトに移行します。

push タスク

非同期コードの実行に App Engine タスクキューの push タスクサービスを使用するのではなく、ターゲットとして Python 3 スタンダード環境エンドポイントを使用する Cloud Tasks クライアント ライブラリを使用します。詳細については、push キューの Cloud Tasks への移行をご覧ください。

サンプルアプリでこの移行をシミュレートするには、Flask アプリで App Engine push キューを使用する方法Cloud Tasks への移行をご覧ください。

pull タスク

タスクキューの pull タスクサービスを使用する場合(たとえば、別のワーカーで処理するタスクやメッセージをキューに登録する場合など)は、Cloud Pub/Sub が適切な代替策となります。Cloud Pub/Sub は同様の機能に加えて配信保証を提供します。他の Cloud サービスと同様に、Pub/Sub には、このサービスにアクセスするための便利なクライアント ライブラリが用意されています。詳細については、Pub/Sub メッセージの作成とレスポンスタスクキューの pull タスクから Pub/Sub への移行ガイドをご覧ください。

サンプルアプリでこの移行をシミュレートするには、サンプルアプリでの App Engine の pull タスクの使用方法Pub/Sub への移行をご覧ください。

URL 取得

デフォルトでは、Python 2.7 ランタイムは、URL 取得サービスを使用して送信 HTTP(S) リクエストを処理します。標準の Python ライブラリを使用してリクエストを発行する場合も同様です。

非同期リクエストを行うなど、アプリが URL Fetch API を直接使用する場合は、標準の Python ライブラリ(リクエスト ライブラリなど)に移行することをおすすめします。

詳細については、送信リクエストの移行をご覧ください。

ユーザー認証

Users API の代わりに、ユーザー認証で説明されている HTTP ベースの認証メカニズムのいずれかを使用します。