スタンダード環境からフレキシブル環境へのサービスの移行

App Engine フレキシブル環境では、App Engine SDK に含まれる API ライブラリが提供されません。アプリケーションを App Engine スタンダード環境からフレキシブル環境に移行することを決定した場合、すべての Google Cloud Platform 環境に共通して利用可能なサービスと API を使用するようコードを更新する必要があります。

特定のサービスと API をスタンダード環境からフレキシブル環境に移行する手順については、以下の説明をご覧ください。

スタンダード環境とフレキシブル環境の違い

ここで説明する主な違いに加えて、フレキシブル環境では、/_ah/ を含むパスがブロックされません。スタンダード環境のアプリケーションで /_ah/ を含むパスを使用して特定のサービスにアクセスしている場合は、以下の該当するサービスのセクションをご覧ください。

App Identity

フレキシブル環境で実行する場合、環境変数Google Compute Engine メタデータ サービスを組み合わせて使用することで、アプリケーションに関する情報を取得できます。

アプリケーション情報 アクセスする方法
アプリケーション / プロジェクト ID GOOGLE_CLOUD_PROJECT 環境変数またはメタデータ サーバーの /project/project-id リソース
デフォルトのホスト名 App Engine Admin API の apps.get メソッド
サービス アカウント名 メタデータ サーバーの /instance/service-accounts リソース
OAuth 2.0 アクセス トークン メタデータ サーバーの /instances/service-accounts リソース。Compute Engine サービス アカウント認証情報での認証をご覧ください。

次の機能は直接利用できません。

  • プロジェクトのデフォルトの Cloud Storage バケットはありません。アプリケーションでバケットを使用する場合、Cloud Storage バケットを作成し、バケット名としてプロジェクト ID を使用します。これにより、アプリケーションの GOOGLE_CLOUD_PROJECT 環境変数をバケット名として使用できるようになります。
  • デフォルトのサービス アカウントでは blob に署名できません。これに対処するには、Google Identity and Access Management(IAM)の API を使用するか、デプロイ時にアプリケーションにサービス アカウント秘密鍵を提供します。
  • 同様に、署名の検証用に公開証明書を取得する組み込み API はありません。ただし、各サービス アカウントの公開証明書を https://www.googleapis.com/robot/v1/metadata/x509/{service account email} で入手できます。

バックグラウンド スレッド

フレキシブル環境にはサンドボックス制限がないため、リクエスト環境の外で実行されるスレッドやプロセスを自由に作成できます。通常、言語の組み込みスレッドまたはマルチプロセッシング ツール以外に何も使用する必要はありません。

Blobstore

Blobstore サービスの使用は、スタンダードとフレキシブルの両方の環境でほとんど Cloud Storage に置き換えられました。Cloud Storage でデータの保存や取得を行うには、Google Cloud クライアント ライブラリを使用してください。

詳細については、次のガイドをご覧ください。

Capabilities

スタンダード環境の外には、Capabilities サービスに似た機能はありません。

WebSocket

App Engine フレキシブル環境では WebSocket をサポートしています。詳細については、次のガイドをご覧ください。

データストア

Datastore API を使用すると、どこからでも Datastore にアクセスできます。Google Cloud クライアント ライブラリを使用して、Datastore のデータを保存および取得します。

App Engine ライブラリまたは Google Cloud クライアント ライブラリを使用しても、あるいは API を直接呼び出していても、同じ Datastore データを利用できます。

ndb ライブラリは、スタンダード環境外ではサポートされません。 開発中の python-ndb ライブラリは、Python 3 とその他のプラットフォーム(フレキシブル環境を含む)をサポートする予定です。

詳細については、次のガイドをご覧ください。

画像

Images サービスは、スタンダード環境外では利用できません。 ただし、アプリケーションから直接、または Cloud Storage から直接、簡単に画像を提供できます。

画像処理を行う必要がある場合、Pillow などの任意の画像処理ライブラリをインストールし、使用することができます。

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

詳細については、次のガイドをご覧ください。

ロギング

スタンダード環境と同様に、フレキシブル環境でもロギングが自動的に機能します。ただし、収集されるログの形式は異なります。ログはリクエストによってバンドルされず、stdoutstderr からのログが別々に収集されます。

アプリケーション ロギング、ログをグループ化する機能、追加のメタデータをログに記録する機能をよりきめ細かく制御するには、Cloud Logging API を Google Cloud クライアント ライブラリで直接使用します。

詳細については、次のガイドをご覧ください。

メール

App Engine メールサービスは、スタンダード環境外では利用できません。 メールを送信する場合は、SendGridMailgunMailjet などのサードパーティのメール プロバイダを使用する必要があります。これらのサービスはすべて、どんな場所で実行されるアプリケーションからもメールを送信できる API を備えています。

次のガイドは、フレキシブル環境でこれらのサービスを使用する方法を示しています。

Memcache

Memcache サービスは、App Engine フレキシブル環境では使用できません。アプリケーション データをキャッシュに保存するには、Memorystore for Redis を使用します。

モジュール

Modules API はスタンダード環境外では利用できません。ただし、環境変数App Engine Admin API を組み合わせて使用することで、アプリケーションで実行されているサービスに関する情報を取得したり、そうしたサービスを変更したりすることは可能です。

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

アプリケーションでのサービスやバージョンのデプロイ管理にも App Engine Admin API を使用できます。

名前空間

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

OAuth

OAuth サービスは、フレキシブル環境では利用できません。OAuth 2.0 トークンを確認する必要がある場合は、OAuth 2.0 APIoauth2.tokeninfo メソッドを使用します。

リモート

Remote(リモート)API サービスは、フレキシブル環境には該当しません。フレキシブル環境からアクセス可能な Datastore などの大部分のバッキング サービスは、どこからでもアクセス可能です。

Search(検索)サービスは現在、スタンダード環境外では利用できません。Google Compute Engine の ElasticSearch など、任意の全文検索データベースをホストすることができ、スタンダードとフレキシブルの両環境からアクセスできます。

ソケット

フレキシブル環境にはサンドボックス制限がないため、アウトバウンド ソケットを通常の方法で開いて使用できます。

タスクキュー

第 1 世代のスタンダード環境外で push タスクキュー サービスを使用するには、Cloud Tasks を使用します。

別のワーカーに pull され、処理されるタスクやメッセージをキューに追加するなど、pull キューを使用する多くの場合に、Cloud Pub/Sub は、類似の機能や配信の保証を提供するため、最適な代案になります。

URL 取得

URL 取得サービスは、フレキシブル環境では使用できません。ただし、サンドボックスの制限はないため、ご使用のアプリで任意の HTTP ライブラリを使用して URL 取得機能を利用できます。 Requests を使用することをおすすめします。

ユーザー

Users サービスは、スタンダード環境外では利用できません。 フレキシブル環境では、たとえば次のような任意の HTTP ベースの認証メカニズムを使用できます。

  • Google Identity Platform。Google ユーザー アカウントを認証、承認するための多くのオプションを備えています。
  • Firebase Authentication。ユーザー名 / パスワードを使用した認証を提供し、Google、Facebook、Twitter などと連携した ID を提供します。
  • Auth0。さまざまな ID プロバイダおよびシングル サインオン機能を使った認証を提供します。
  • OAuth 2.0OpenID Connect。任意のプロバイダからのフェデレーション ID を提供します。Google は OpenID Connect の ID プロバイダです。利用可能なプロバイダは他にも複数あります。

Users サービスが利用できないため、app.yaml を使用して管理者のみが URL にアクセスできるようにすることはできない点に注意してください。アプリケーション内でこのロジックを扱う必要があります。

次のステップ

フレキシブル環境とスタンダード環境の主な違いと、両方の環境を使用するアプリケーションのガイドラインについては、App Engine スタンダード環境ユーザーのための App Engine フレキシブル環境をご覧ください。