Google Cloudによるサーバーレスアプリケーションの移行: App EngineからCloud Pub/Subへ
近年、企業はアプリケーションをクラウド環境にシフトさせることで、運用の効率化やコスト削減を実現しています。Google Cloudは、この移行プロセスをスムーズに進めるためのツールやガイドラインを提供しています。特に、App Engineのようなサーバーレスプラットフォームは、多くの開発者にとっての選択肢となっています。本記事では、App EngineのタスクキューをCloud Pub/Subに移行するプロセスについて詳しく説明します。
移行の背景
Google Cloudの「Serverless Migration Station」シリーズは、開発者がそのアプリケーションを最新のサーバーレスプラットフォームに移行する手助けを目的としています。今回のモジュール19では、App EngineのタスクキューからCloud Pub/Subに移行する方法を解説します。App Engineのプロプライエタリなサービスから移行することで、アプリケーションのポータビリティが向上し、以下の利点があります:
- 2世代のApp Engineランタイムでの運用が可能になる
- Cloud FunctionsやCloud Runなど、他のサーバーレスプラットフォームへの移行が容易になる
- GKEやCompute EngineなどのVMベースのサービスへの移行が可能になる
移行の理解
モジュール19では、以下の3つの重要な移行が行われます:
- App Engine NDBからCloud NDBへの移行
- App EngineタスクキューのプルタスクからCloud Pub/Subへの移行
- Python 2からPython 3への移行
App Engine NDBからCloud NDBへの移行については、モジュール2で詳しく説明されているため、今回は深く掘り下げません。また、オリジナルのアプリはPython 2と3の両方に対応していたため、ここでも特に作業は必要ありません。
移行における主な変更点
今回の移行で強調されるのは、以下の3つの点です:
- セットアップ: 必要なAPIを有効化し、Pub/Subトピックとサブスクリプションを作成する
- 作業の生成: プルタスクの追加ではなく、Pub/Subメッセージを発行する
- 作業の処理: タスクをリースするのではなく、メッセージをプルする
用語の違いを理解する
PullタスクとPub/Subには、用語の違いがあります。例えば、以下のように異なる概念を理解する必要があります:
- プルキューでは、作業はプルキュー内で作成されますが、Pub/Subトピックにメッセージが送信されます。
- タスクキューのプルタスクは、Pub/Subではメッセージと呼ばれます。
- タスクキューでは、ワーカーがプルタスクにアクセスしますが、Pub/Subではサブスクライバーがメッセージを受信します。
- プルタスクのリースは、Pub/Subトピックからサブスクリプションを介してメッセージをプルすることと同じです。
- プルキューからタスクが完了した際に削除するのは、Pub/Subメッセージを成功裏に確認することに相当します。
コード変更の実装
コード変更において、多くの部分が元のアプリケーションとほとんど変わらずに保たれています。主な変更点は、App EngineのNDBとタスクキューからCloud NDBとPub/Subに切り替えることです。
移行後のアプリの完全なバージョンは、モジュール18とモジュール19のリポジトリフォルダで見つけることができます。また、モジュール19のコーディングラボを通じて、移行の手順を段階的に学ぶことも進められます。
まとめ
モジュール19では、App EngineのプルタスクをCloud Pub/Subへ移行しましたが、開発者はPub/Sub自体がプルタスクに基づいていないことに注意する必要があります。Pub/Subは、完全に機能を持つ非同期・スケーラブルなメッセージングサービスで、タスクキューが提供するプル機能以上のものを備えています。たとえば、Pub/SubにはBigQueryへのストリーミングやプッシュ機能などが含まれています。しかしながら、プッシュタスクはCloud Tasksに移行することを推奨しています。
Cloud Tasksがプル機能をサポートしないため、プルタスクユーザーにはPub/Subが最適な選択肢となります。Google Cloudの最新の提供物への移行を推奨していますが、これらの移行は必須ではなく、自分のタイミングで実施することが可能です。
App Engineチームは、2021年秋に多くのバンドルサービスの2世代ランタイムへのサポートを拡張したため、Python 3への移行の前にスタンドアロンのクラウドサービスに移行する必要がありません。タスクキューを使用している場合は、次世代ランタイムからバンドルサービスへのアクセスをコードを修正することで続行することができます。
この移行シリーズは、Pythonユーザーを最初に対象としていますが、他の言語ランタイムに関しても今後の対応が進められています。興味のある方は、ぜひ最新情報をチェックしてみてください。