Skip to content
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

Open
sonatard opened this issue Feb 12, 2019 · 5 comments

Comments

@sonatard
Copy link

sonatard commented Feb 12, 2019

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をオフにするとよい。

go mod vendor
export GO111MODULE=off
gcloud app deploy xxxxx
export GO111MODULE=on
rm vendor -rf

以下のようにすることでgcloudコマンド実行時だけoffにすることもできる

go mod vendor
GO111MODULE=off gcloud app deploy xxxxx
rm vendor -rf

Cloud Functionsは試していないが、おそらく同じはず。

go.modgo.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でも高速になるかもしれない。

@sinmetal
Copy link
Member

@sonatard 以下の順番が逆さま?

export GO111MODULE=off
go mod vendor

sinmetal added a commit that referenced this issue Mar 19, 2019
Private Repoを依存関係に持つ、GAE Go 1.11のアプリをDeployしようとすると、ハマったので解決方法を書いた。

refs #87
@apstndb
Copy link
Contributor

apstndb commented May 29, 2019

Cloud Functions Go runtime の dependency 周りはドキュメントが分かれたっぽい
https://cloud.google.com/functions/docs/writing/specifying-dependencies-go?hl=en

@sonatard
Copy link
Author

Go 1.13からGO_PROXYの効果で高速になりました

Go 1.11 (vendor) 55秒
Go 1.12 (go mod) 157秒
Go 1.13 (go mod) 68秒

@sinmetal
Copy link
Member

早くするという文脈ではないが、 .gcloudignore に go.mod, go.sum を入れるみたいな話もあった

@apstndb
Copy link
Contributor

apstndb commented Apr 23, 2020

ちなみに GO_PROXY で高速化はされたが、プライベート repo にあるモジュールに依存している場合は vendoring が必要になる場合もある。おそらく Go 1.14 以降は vendor と go.mod が両立するので GO111MODULE=off は必要なさそう
https://golang.org/doc/go1.14#tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants