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

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

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

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

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

App Identity

フレキシブル環境で実行する場合、環境変数と 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 に署名できません。これに対処するには、Identity and Access Management(IAM)の API を使用するか、デプロイ時にアプリケーションにサービス アカウント秘密鍵を提供します。
  • 同様に、署名の検証用に公開証明書を取得する組み込み API はありません。ただし、各サービス アカウントの公開証明書を https://www.googleapis.com/robot/v1/metadata/x509/{service account email} で入手できます。
  • Java ランタイムを使用する場合、App Engine フレキシブル環境では App Engine の SystemProperty API を使用できません。ただし、環境変数の定義で説明しているように、app.yaml に環境変数を設定し、System.env を使用してそれらの環境変数の値を取得できます。

環境変数の詳細については、ランタイムの概要ページまたは app.yaml リファレンス ページをご覧ください。

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

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

Blobstore

Blobstore サービスの使用は、スタンダード環境とフレキシブル環境の両方で Cloud Storage に大部分が置き換えられました。Cloud Storage でデータの保存と取得を行うには、Google Cloud クライアント ライブラリを使用します。

詳細については、Cloud Storage の使用をご覧ください。

機能

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

WebSocket

App Engine フレキシブル環境では WebSocket をサポートしています。詳細については、WebSocket を使用した永続的な接続の作成をご覧ください。

Datastore モードの Firestore(Datastore)

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

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

Python ndb ライブラリを使用していて、NDB スタイルの Datastore アクセスが必要な場合は、Cloud NDB に移行することをおすすめします。詳細については、Cloud NDB リポジトリをご覧ください。

Cloud NDB と Datastore のクライアント ライブラリはどちらも Python 2 と 3 でサポートされています。これらのライブラリは App Engine スタンダード環境やフレキシブル環境、App Engine 以外のアプリでも使用できますが、主な目的は、Python 2 デベロッパーが App Engine ndb などのバンドルされたレガシー サービスから移行するのを支援することです。Cloud NDB には、NDB ユーザー エクスペリエンスを維持するという目的もあります。

詳細については、Datastore の使用をご覧ください。

画像

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 を使用できます。

環境変数の詳細については、ランタイムの概要ページまたは app.yaml リファレンス ページをご覧ください。

Namespaces

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

OAuth

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

リモート

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

Search サービスは現在、フレキシブル環境外では利用できません。Compute Engine の Apache SolrElastic Cloud の Elasticsearch Service などの全文検索データベースをホストでき、スタンダード環境とフレキシブル環境の両方からアクセスできます。

ソケット

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

タスクキュー

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

pull されて別個のワーカーで処理されるタスクやメッセージをキューに追加する場合など、pull キューを使用する多くのケースでは、類似の機能と配信の確実性を備えている Pub/Sub が適切な代替策となり得ます。

URL 取得

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

Python を使用する場合は、Requests を使用することをおすすめします。Java を使用する場合は、Java 用の Google HTTP クライアント ライブラリまたは OkHttp を使用することをおすすめします。

ユーザー

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

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

ユーザー サービスが利用できないため、Java では appengine-web.xml、他のランタイムでは app.yaml を使用して管理者のみが URL にアクセスできるようにすることはできません。アプリケーション内でこのロジックを扱う必要があります。

次のステップ

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