Windows環境下でGoogle Cloud SDKを任意のバージョンに戻す方法


#概要

Google Cloud SDKを任意のバージョンに戻したいということが発生する。

Cloud SDKのコマンドが急に実行できなくなったとか、
Cloud SDKのコマンドが急に実行できなくなったとか、
Cloud SDKのコマンドが急に実行できなくなったとか、

今回はそんな状況下で解決できない時にいったん元に戻すための手段を解説しておく。

<<2020/01/17>>

問題なくなったので最新バージョンへのアップデートを繰り返していたら、コマンド実行後にこんな文章があることに気が付いた:sweat_smile:

>Performing post processing steps...done.

>Update done!

>To revert your SDK to the previously installed version, you may run:
  $ gcloud components update --version 275.0.0

Google翻訳先生お願いします。

>後処理ステップの実行...完了。

>更新完了！

>SDKを以前にインストールしたバージョンに戻すには、次を実行します。
   $ gcloud components update --version 275.0.0

gcloudコマンドが動くようなら、こちらのほうが手っ取り早く確実でしょう。

#リカバリ
##What happened?
突然君からの手紙♪…じゃなくてエラー:cold_sweat:

それは深夜に起こった。
ソースをFunctionsにデプロイしようとしたらこんなことつぶやきやがった。

```
To use the Google Cloud SDK, you must have Python installed and on your PATH.
As an alternative, you may also set the CLOUDSDK_PYTHON environment variable
to the location of your Python executable.
```

Google翻訳先生お願いします。

>Google Cloud SDKを使用するには、PATHにPythonがインストールされている必要があります。
別の方法として、CLOUDSDK_PYTHON環境変数をPython実行可能ファイルの場所に設定することもできます。

お前何言ってんの〇〇〇すぞ？（深夜に吐いた汚い言葉は自主規制:joy:）
これを見てすぐに前日にアップデートを実行したことが影響したと気が付く。

いう通りにCLOUDSDK_PYTHONを環境変数に設定するもどうも認識してくれない模様。
VSCodeは何度も再起動したがダメで、PCの再起動は都合によりできなかったため元に戻す決断を下す:sob:

##古いバージョンを取得する

まずは一つ前に戻す方法を公式から簡単に探したが見つからず。
https://cloud.google.com/sdk/docs/?hl=ja

そうなると、前のバージョンのインストーラーで再インストールする方向に転換。
https://cloud.google.com/sdk/docs/downloads-versioned-archives?hl=ja#archive
https://storage.cloud.google.com/cloud-sdk-release?hl=ja

今回Windows64bit向け、SDKのバージョン273でpythonが同梱されたものがほしいので、フィルターに```google-cloud-sdk-27```と入力して下記のファイルをDLする。
（フィルターかけないとファイル数が多いので大変）
 google-cloud-sdk-273.0.0-windows-x86_64-bundled-python.zip

##古いバージョンを適用する

DLしたZIPを開いてみるとgoogle-cloud-sdkというフォルダがありどうすればいいのか不明。
実はCLOUDSDK_PYTHONを解決しようと、python.exeのインストール先を調べた際、以下のフォルダパスを認識していた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/e9b44b7d-3716-6486-33fd-e8aed7a8b81a.png)

パスの途中にgoogle-cloud-sdkがいるのがわかる。
ということは、まさかフォルダをすり替えるだけでOK？
ということで現行フォルダはgoogle-cloud-sdk_191220というフォルダ名にリネームしてコピーしてみた。
今となっては遅めのSSDでは10分弱要したのでちょっと注意。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/6791ba1b-ea5d-956c-c704-5bf6775bf0cd.png)

##行けた

前のバージョンに戻っただろう環境にして再度デプロイを実行したら行けた:joy:
このやり方が正しいのか？というのはわからないが、```gcloud functions deploy```ができれば個人的に問題ない。
```gcloud functions deploy```のためだけにCloud SDKを投入しないといけないのはやるせないが…


#Conclusion

今回は屈辱ではあるが、後退の決断を下すことで、Google Cloud SDKを任意のバージョンに戻す方法を獲得しレベルアップした。
時には勇気ある撤退もいいと思う。
今回は撤退したが、次のバージョンアップでも同様なら、この問題にしっかり向き合わなくてはいけない。
Cloud SDKはGitHubにもいなそうなので、issuesが見れないのがちょっと辛い。
似たような現象に遭遇している方もいるようなので、その辺を参考に対応することになるんだろう。
https://issuetracker.google.com/issues?q=CLOUDSDK_PYTHON

ちなみにバージョンを戻し、```gcloud info```コマンドを実行すると、ちゃんとPythonのパスは取れている。

```terminal

Python Version: [2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]]
Python Location: [C:\Users\<user-name>\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\python.exe]

```

どうして今回のことが発生したのかリリースノートを確認してみた。
https://cloud.google.com/sdk/docs/release-notes

>Cloud SDK now has GA support for Python 3. Please run gcloud topic startup for:

Google翻訳先生曰く
>Cloud SDKでPython 3のGAがサポートされるようになりました。gcloudtopic startupを実行してください：

Python 3のGAが影響しているんだろうか？…と思ったらその辺の影響のようです。
https://issuetracker.google.com/issues/146458519

いくつか重複でissueがあがっているようなので、次のversionで修正するかもしれません。

<<2020/01/12 追加>>
Version275で確認したところ、問題は修正されており、なんの対応もすることなくdeployコマンドが実行できました。（274で修正されたようですが、まだ駄目というコメントもあったのでしばらく静観していた。）
あの日は本当に最悪だと思ったけど、結果的にversionを戻す選択がベストでした。
今まで問題なかったのにversionを上げたら問題に遭遇した場合、issuetrackerをみてversionを戻すのも一手です。