こんにちは、クラウドエース編集部です。 Google App Engine(以下、GAE)とは、Google が提供する Web アプリケーションの開発から公開までが行えるクラウドサービスです。インターネット上のサーバーに OS やミドルウェアが導入された状態のサーバー環境:PaaS(Platform as a Service)として提供されます。 GAE を使用すれば、自社でサーバー環境を持たなくても、アプリケーション開発から利用のための公開までができるようになります。 ここでは、GAE を使ってアプリ公開を行う際に知っておきたい「トラフィック分割」とその方法についてご説明します。 目次 Toggle GAE でトラフィック分割機能を使用する必要性とは?GAE でトラフィック分割の前に行う準備複数バージョンのトラフィック分割の方法トラフィック分割を無効化する方法デプロイ時のトラフィック移行まとめ GAE でトラフィック分割機能を使用する必要性とは? GAE のトラフィック分割機能を使用することで、アプリケーションの停止時間を最小化しながら、安全に新しいバージョンに切り替えることができます。 トラフィック分割とは、アプリケーションに届いたリクエストを分割して、アプリケーションの複数のバージョンに割り振ることです。 GAE でトラフィック分割を行わないデフォルトの状態では、一番新しいバージョンにすべてのリクエストが割り振られます。 GAE のトラフィック分割機能を使用すれば、アプリケーションを古いバージョンから新しいバージョンへ切り替える際に 届いたリクエストを一気に新しいバージョンへすべて割り振る 届いたリクエストを最初は少しだけ、確認したら徐々に新しいバージョンへ割り振る のどちら方法でも採用することができます。 また、GAE のトラフィック分割機能を利用して ・届いたリクエストを 2 つのバージョンに均等に割り振る A/B テスト を行うこともできます。 GAE でトラフィック分割の前に行う準備 GAE では簡単な操作で、バージョンごとのトラフィックを設定することができます。 しかしその前に、キャッシュ問題の対策を行っておくことをお勧めします。 キャッシュは、ブラウザやプロキシサーバーに一時的にデータを保管することで、Web ページをすばやく表示させるのに役立ちます。 一方で、アプリケーションを修正しても、キャッシュが持つ古い情報を参照してしまい、修正が反映されていないように見えることがあります。 このキャッシュ問題は、トラフィック分割とは関係なく起こりうるものですが、アプリケーションの新旧バージョンでトラフィック分割を行うと、頻繁にキャッシュ問題に悩まされるかもしれません。 そこで、リソースが変更されたら適切に伝えられるように、事前に行っておきたいキャッシュ問題対策の方法をご紹介します。 動的リソースの場合 リソースが動的であるとプロキシに伝えるために、Cache-Control と Expires ヘッダーの両方を設定します。 静的リソースの場合 リソースの URL をバージョン毎に違うものにします。 Vary ヘッダが設定されている場合 アプリケーションで Vary: Cookie ヘッダを設定すると、キャッシュ問題の回避に有効な場合もあります。ただしこの設定は、キャッシュサーバーへの負荷を増加させキャッシュヒット率を低下させる恐れもあるため、注意が必要です。 複数バージョンのトラフィック分割の方法 ここでは、実際にトラフィック分割を設定する方法についてご紹介します。 Google Cloud コンソールからのトラフィック分割設定 Google Cloud コンソールで「バージョン」ページに移動します。 トラフィックの分割先となる 1 つ以上のバージョンを選択します。 [トラフィックを分割] をクリックし、以下を指定します。 トラフィックの分割に使用する方式 各バージョンが受け取るトラフィックの割合 「トラフィックの分割に使用する方式」には IP アドレス分割 クッキー分割 の 2 種類から選択できます。 IP アドレス分割 トラフィックを IP アドレスによって振り分ける「IP アドレス分割」の方が設定は簡単です。ただし、次のような注意点があります。 IP アドレス分割はクッキー分割と比較すると、想定した割合にトラフィックを割り振りにくい面があります。トラフィック量が増えれば、IP アドレスによるトラフィック分割の精度は上がります。 IP アドレスは時間や場所の経過で変更することがあるため、IP アドレス分割を設定していると、アプリケーション動作上まれに不整合が発生することがあります。 クッキー分割 リクエストに含まれるクッキーによって振り分ける「クッキー分割」は、より精度の高いトラフィック分割が可能です。ただし、リクエストにクッキーが含まれない場合は、ランダムに割り振られます。 トラフィック分割を無効化する方法 すべてのトラフィックを単一のバージョンに移行することで、トラフィック分割を無効にできます。 デプロイ時のトラフィック移行 デプロイした新バージョンに一気に全トラフィックを流し込まず、徐々に割り当てて確認するのが一般的な方法と考えられます。 そこで最後に、アプリケーションの新バージョンをデプロイする際に、トラフィック移行させない方法について確認しておきましょう。 デプロイ時にトラフィック移行させない方法 デフォルトでは、新バージョンをデプロイすると、全トラフィックが新バージョンに自動的に移行してしまいます。 そこで、デプロイ時にトラフィック移行させないためには、新バージョンをデプロイする際に「no-promote オプション」を設定します。 まとめ GAE によるトラフィック分割を使いこなすことで、アプリケーションを極力停止せずに、安定したデプロイが行えることがご理解いただけたかと思います。 クラウドエースでは、お客様における GAE を含めた Google Cloud(GCP)の活用をご支援します。 GAE および Google Cloud の活用をご検討の際には、ぜひ一度ご相談ください。 参照元 Google Cloud “App Engine” クラウドエース “Google App Engine (GAE) とは” YouTube クラウドエース株式会社チャンネル “5分でわかる Google Cloud ! GAE(Google App Engine)編