App EngineからCloud Identity Platformへの移行についてのガイド

Cloud 移行:App Engine ユーザーから Cloud Identity Platform へ(モジュール 21)

2023年1月18日、Google Cloud の Developer Advocate、Wesley Chun(@wescpy)が発表したこの情報は、開発者が Google Cloud のサーバーレスプラットフォームで動作するアプリを現代化するための「サーバーレス移行ステーション」シリーズの一環です。このモジュールでは、App Engine のユーザーサービスから Cloud Identity Platform への移行について説明されています。

App Engine ユーザーから Cloud Identity Platform への移行

App Engine にバンドルされているサービス(この場合はユーザーサービス)から離れることにより、アプリはよりポータブルになり、次のような柔軟性を持つようになります:

  • 第2世代の App Engine ランタイム上での動作
  • Cloud Functions や Cloud Run などの他のサーバーレスプラットフォームへの移行(Docker を使用するかしないかにかかわらず)
  • GKE や Compute Engine などの仮想マシンベースのサービスや、他のコンピュートプラットフォームへの移動

全体的な移行の理解

モジュール 21 は、モジュール 20 のサンプルアプリからの大幅な変更が特徴です。具体的には、App Engine にバンドルされたサービス(NDB と Users)から、独立したクラウドサービス(Cloud Datastore と Identity Platform)への移行を実装しています。

Cloud Identity Platform では App Engine の管理者に関する情報がないため、その機能は構築する必要があります。このためには、Cloud Resource Manager API を使用します。Python 2 に依存するアプリにも追加の更新が必要です。

移行の「パーツ」

サンプルアプリに必要な変更は次のとおりです:

  • App Engine ユーザー(サーバーサイド)から Cloud Identity Platform(クライアントサイド)へ移行
  • モジュール 20 で使用された App Engine NDB から Cloud NDB へ移行(Cloud Datastore API の使用が必要)
  • Cloud Resource Manager API を使用して、Cloud プロジェクトの IAM アローポリシーを取得し、アプリの App Engine 管理者ユーザーのセットを集める
  • Firebase Admin SDK を使用して、ユーザーが App Engine 管理者かどうかを検証
  • Python 2 から 3 への移行(また、必要に応じて Python 2 へのロールバックの可能性)

この時点でのリソースマネージャーのドキュメントは、API へのアクセスのためのセットアップ手順が低レベルの Google API クライアントライブラリにのみ記載されており、リソースマネージャークライアントライブラリではありません。後者の設定については、リソースマネージャーのクライアントライブラリのドキュメントを直接ご覧ください。低レベルのクライアントライブラリは、Cloud クライアントライブラリが存在しないか、アプリに必要な機能を持っていない場合にのみ使用するべきです。Python 2 がこの状況の一例です。

App Engine バンドルサービスから独立した Cloud サービスへの移行

NDB から Cloud NDB への移行は、モジュール 2 の移行内容と同じであるため、モジュール 21 では詳細に説明されていません。主に、ユーザーのログインを引き続きサポートするために Identity Platform への切り替えと、ユーザーサービスとして提供される App Engine 管理者ユーザーを認識するためのプロキシを構築するための Resource Manager と Firebase Admin SDK の使用に焦点を当てています。

以下は、主なアプリケーションにおける重要な変更を実装した擬似コードで、新しいまたは更新されたコード行が太字で示されています:

  • サーバーサイドの Users サービスコードがメインアプリケーションから消去され、(クライアントサイドの)ウェブテンプレートに移動しました。
  • モジュール 21 アプリのほぼすべての新しいコードは、App Engine 管理者ユーザーを認識するためのものである。
  • Cloud NDB は Datastore コードをラップするために Python コンテキストマネージャーの使用を要求します(Python の with ブロックを使用)。

アプリの更新前後の完全なバージョンは、それぞれモジュール 20(Python 2)とモジュール 21(Python 3)のリポジトリフォルダにあります。

移行に伴う考慮事項

また、アプリの運用やデータモデルには変更がなく、Cloud NDB が要求する以外のすべてがそのままとなっています。また、Users サービスの使用は App Engine の料金モデルによってカバーされているのに対し、Identity Platform は独立した Cloud サービスであり、MAU(毎月のアクティブユーザー)によって請求されるため、移行時にコストについても考慮する必要があります。

Identity Platform の料金に関する詳細は、該当のドキュメントで確認できます。

Python 2 に関する考慮事項

Python 2 のサポートが終了していることや、他の言語のランタイム(Java 8、PHP 5、Go 1.11)がそれぞれのコミュニティによって終了している中で、Google Cloud はこれらのレガシー App Engine ランタイムの長期的なサポートを約束しましたので、ユーザーが移行する必要は現在ありません。しかし、開発者自身はアプリケーションを新しい言語リリースに更新したいと考える傾向があります。

モジュール 21 の主要な移行は、Python 2 から 3 への移行を含んでおり、ほとんどの開発者がこの方向に進んでいるためです。Python 2 に留まる必要がある依存関係がある場合、追加の作業が必要になります:

  • リソースマネージャークライアントライブラリの最終的な Python 2 リリースは、App Engine 管理者ユーザーを構築するために必要な機能を持っていないため、低レベルの Google API クライアントライブラリを使用する必要があります。
  • 低レベルのクライアントライブラリのセットアップと API アクセスは、Cloud クライアントライブラリの使用とは若干異なることに注意してください。
  • サードパーティパッケージの使用には、App Engine Python 2.7 の組み込みライブラリ(grpcio と setuptools)が必要であるため、設定ファイル app.yaml と appengine_config.py に追加の変更が必要です。
  • Python 3 ランタイムには組み込みライブラリのサポートがないため、必要なパッケージを requirements.txt にリストし、これらのライブラリがデプロイ時に自動的にインストールされるようにします。
  • サードパーティライブラリの自己バンドル(「ベンダリング」またはコピーすることとも呼ばれる)は、すべての Python 2 アプリで必要ですが、Python 3 では完全にオプションです。

Codelab ではこのバックポートについて詳しく説明しているため、該当のセクションを確認してください。考えたくない場合は、モジュール 21 アプリの動作する Python 2 バージョンのリポジトリにアクセスすることをお勧めします。

まとめ

モジュール 21 では、App Engine のバンドルサービスから適切な独立した Cloud サービスへの移行が紹介されています。開発者が Google Cloud の最新の提供物に移行することを推奨しますが、これらの移行は必ずしも必要ではありません。2021 年秋には、App Engine チームが多くのバンドルサービスの第2世代ランタイムへのサポートを拡張しており、次世代ランタイムからバンドルサービスにアクセスするようにコードを修正すれば、Python 3 で App Engine NDB と Users を引き続き使用することが可能です。そして、移行したい場合は、自分のタイミングで行うことができます。

他の App Engine レガシーサービスを使用している場合は、このシリーズの他の移行モジュールもチェックしてください。すべてのサーバーレス移行ステーションのコンテンツ(codelabs、動画、ソースコード [利用可能な場合])は、オープンソースのリポジトリでアクセスできます。私たちのコンテンツは初めは Python ユーザーに焦点を合わせていますが、Cloud チームは他の言語ランタイムのカバーにも取り組んでいるので、今後の情報を楽しみにしてください。

さらに動画コンテンツを探している場合は、より広範なサーバーレス探検シリーズもチェックしてみてください。