-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
go modulesを利用するとデプロイが遅くなる問題の解決策 #87
Comments
@sonatard 以下の順番が逆さま?
|
Private Repoを依存関係に持つ、GAE Go 1.11のアプリをDeployしようとすると、ハマったので解決方法を書いた。 refs #87
Cloud Functions Go runtime の dependency 周りはドキュメントが分かれたっぽい |
Go 1.13からGO_PROXYの効果で高速になりました Go 1.11 (vendor) 55秒 |
早くするという文脈ではないが、 |
ちなみに GO_PROXY で高速化はされたが、プライベート repo にあるモジュールに依存している場合は vendoring が必要になる場合もある。おそらく Go 1.14 以降は vendor と go.mod が両立するので GO111MODULE=off は必要なさそう |
Go 1.11から
export GO111MODULE=on
と環境変数を設定することでgo modulesを利用することができる。Google App Engine 2nd genと Cloud Functionsはgo modulesに対応している。
しかしデプロイが遅くなるので、従来通りvendorディレクトリを用意してデプロイすることで高速になる。
私の環境のGoogle App Engineでは 4:20が2:20くらいになったので約2分速くなる。
また日常の開発ではgo modulesを使いたいという場合にはデプロイ時だけvendorを用意してgo modulesをオフにするとよい。
以下のようにすることでgcloudコマンド実行時だけoffにすることもできる
Cloud Functionsは試していないが、おそらく同じはず。
go.mod
とgo.sum
を.gcloudignore
に追加することでvendorを利用できるとドキュメントにあるが、実際にはGO111MODULE=off
が必要である。https://cloud.google.com/functions/docs/concepts/go-runtime#vendor_directory
Go 1.13以降go modules onがデフォルトになってしまうとこの回避方法が使えなくなる可能性はある。
またgo modulesを使うと遅くなる原因は恐らくGCP側でgo getが走ってビルドするためなので、将来的にソースコードと同様に依存ファイルもキャッシュされるようになればgo modulesでも高速になるかもしれない。
The text was updated successfully, but these errors were encountered: