1. はじめに
現在Associate Cloud Engineer試験の資格取得に向けて勉強をしています。
模擬試験でGAEのデプロイ時のトラフィックについての問題があり、気になったので調査しました。
1-1. 気になったこと
GAEでは、以下のコマンドでデプロイした場合、新バージョンへ自動的にトラフィックが移行します。
では、逆に移行させない方法はあるのでしょうか…?
$ gcloud app deploy
1-2. 結論
デプロイ時に以下のオプションを指定する事で、トラフィックを移行させない事が可能です。
$ gcloud app deploy --no-promote
--promote
オプションについては、リファレンスに記載がありました。
https://cloud.google.com/sdk/gcloud/reference/app/deploy
--promote
Promote the deployed version to receive all traffic. Overrides the
default app/promote_by_default property value for this command
invocation. Use --no-promote to disable.
デフォルトは--promote
になっており自動で新バージョンにトラフィックが移行します。
トラフィックを移行させたくない場合は、--no-promote
を指定することで制御可能なようです。
その後、トラフィックを手動で移行させる場合は、以下のコマンドを実行します。
gcloud app services set-traffic [MY_SERVICE] --splits [MY_VERSION]=1
2. トラフィックの分割機能を利用している場合はどうなるか?
GAEのコンポーネントは以下のように構成されており、一つのサービスに複数のバージョンを構成できます。
GAEにはトラフィックをバージョン毎に分割する機能がありA/Bテストなどで利用されます。
トラフィックの分割機能が有効な状態で、デプロイした場合はどのようにトラフィックが移行されるのでしょうか?
2-1. 結論
こちらも単純に--no-promote
であれば、既存の分割設定が有効なまま、トラフィックは新バージョンに移行されませんでした。
--promote
もしくは指定なしの場合は、新バージョンにトラフィックが100%で移行されます。
2-2. 確認内容
実際に、アプリデプロイ〜トラフィック分割〜トラフィック移行までを実施してみました。
アプリのデプロイ(v1,v2)
アプリのバージョン1と2をデプロイします。
$ gcloud app deploy -v 1
$ gcloud app deploy -v 2
トラフィックの分割設定
トラフィックの分割設定をv1=50%,v2=50%で設定します。
gcloud app services set-traffic default --splits 1=50,2=50
アプリのデプロイ(v3)
アプリのバージョン3をデプロイします。--no-promote
を指定するのでトラフィックは移行しません。
$ gcloud app deploy -v 3 --no-promote
GCP Consoleでは以下のようになりました。トラフィックはv1=50%,v2=50%のままです。
アプリのデプロイ(v4)
アプリのバージョン4をデプロイします。--promote
を指定するのでトラフィックが移行します。
$ gcloud app deploy -v 4 --promote
GCP Consoleでは以下のようになりました。トラフィックが新バージョンに移行しました。
3.おわりに
--no-promote
を実際に使うケースがあるか分からないですが、オプション一つで制御できるのは便利だと思いました。
また、トラフィックの分割機能もコマンド/GUIで簡単に制御できるのは素敵ですね。
(コマンドベースでトラフィックの分割設定情報を取得する方法はあるのでしょうか…?)