GAEで便利なのがバージョン管理機能。
Git等のVCSではなく、デプロイしたバージョンを管理してアプリケーションフローの制御が出来る、AppEngineの管理機能だ。
Web管理画面やgcloudコマンドで特定バージョンのインスタンスへフローを制御できたり、バージョンを指定したURLにアクセスすることで呼び出し側が任意のバージョンを指定できる。
これって更新をアップロードしたときとかに、問題があれば迅速に旧バージョンに戻せるし、API的に使っている場合は呼び出し側でバージョン指定で呼び出すことでリリース候補を指定して作業したり出来る。 あるいは、ABテストのような感じに同じデータソースの異なるアプリケーションビューを同時参照できる。 本番リリース時には、リリースを管理する部署で問題があったら勝手に戻して貰えるので、開発部署がせっつかれずに済むと言うありがたい機能でもある。
バージョンを指定してリリースするときは、
1 |
gcloud app deploy -v バージョン --no-promote |
みたいな感じでデプロイすれば良い。 no-promoteするとデフォルトのフローが切り替わらず既存バージョンで動作し続け、-vで指定したバージョン名としてデプロイされる。 バージョン名は大文字アルファベットなどを許容しないので、v101みたいな小文字と数字の組み合わせで書く。
つまり、この場合はリリース環境での最終確認用に本来アクセスと別のインスタンスをアクセスできる状態にしているので、クライアントで https://バージョン-dot-プロジェクトID.appspot.com/ にアクセスすることでこのデプロイしたバージョンにアクセスできる。 確認が完了したら、デフォルトのフローをこちらに流すように設定変更してもいいし、同じバージョンを本流に上げ直しても良い。
no-promoteしたバージョンにフローを切り替える場合は
1 |
gcloud app versions migrate バージョン |
で、デフォルトの プロジェクトID.appspot.com のアクセスが指定したバージョンに向く。 リリース後に問題が見つかった場合は、バージョン指定で古いバージョンに切り替えてやれば良い。
利用ケース1
本リリース
gcloud app deploy -v v110
リリース後の問題発生!
gcloud app versions migrate v109
古いバージョンに戻る
利用ケース2
リリース候補としてアップ
gcloud app deploy -v v110rc
v110rc-dot-project.appspot.comで動作確認
OK!
gcloud app deploy -v v110
正式版としてアップするか
gcloud app versions migrate v110rc
リリース候補に直接切り替える
バージョンにRCとか付けてると切替は気持ち悪いんでアップしちゃった方が良いだろう。
(271)