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

App Engine Standard Go 1.11へのマイグレーションの方針が大幅に変更されたので追従した #101

Merged
merged 2 commits into from
Jul 2, 2019

Conversation

sinmetal
Copy link
Member

@sinmetal sinmetal commented Jul 1, 2019

Go 1.11はベータ登場当初は2nd genとして、appengine apiを廃止する方向で動いていたが、方針転換によりGo Runtime最後の1st genとなることになったので、マイグレーションの方法が大幅に変わっている。
Go 1.11の方針転換の内容は https://qiita.com/apstndb/items/314e461aed518a4ad26f が詳しい

refs #100

Go 1.11はベータ登場当初は2nd genとして、appengine apiを廃止する方向で動いていたが、方針転換によりGo Runtime最後の1st genとなることになったので、マイグレーションの方法が大幅に変わっている。
Go 1.11の方針転換の内容は https://qiita.com/apstndb/items/314e461aed518a4ad26f が詳しい
@sinmetal sinmetal requested a review from apstndb July 1, 2019 06:32
@emahiro
Copy link

emahiro commented Jul 1, 2019

https://speakerdeck.com/emahiro/go-conference-2019-spring-go1-dot-9-to-go1-dot-11

5月のGo Conference 2019 Spring でGo1.9->Go1.11移行についての上記の発表したので、よろしければリンクしていただけるとmm

@sinmetal
Copy link
Member Author

sinmetal commented Jul 1, 2019

@emahiro 色んな人の移行してみた記事へのLinkをこいつに入れるかは悩ましいところですねー
そういうのを募集するissueを新たに作成するかもしれません。

ちなみに19ページ目の やらないと決めたことの以下の2つが疑問なのですが、なぜなのでしょう?

urlfetchの廃止

Quota制限も存在するurlfetchを使い続けることにした理由はなんだろう?

cloud.google.com/loggingを移行先として検討した

cloud.google.com/logging を使うとApp EngineのInstanceが死ぬ前にFlashする必要があって、App Engineで使うには、管理がつらい印象だけど、移行先として検討したのはなぜなのでしょう?

@emahiro
Copy link

emahiro commented Jul 1, 2019

@sinmetal

Quota制限も存在するurlfetchを使い続けることにした理由はなんだろう?

x-appengine-inbound-appid を使ってマイクロサービス間の内部通信判定をしており、変更した場合の影響範囲が大きいためにスライドを作成する少し前の移行検討〜開始時期ではurlfetchの継続使用を選択しました。

cloud.google.com/loggingを移行先として検討した

構造化ログが欲しい!という一点で調査してました。ログについては一旦移行はpendしてます。

@sinmetal
Copy link
Member Author

sinmetal commented Jul 1, 2019

@emahiro なるほど。urlfetchを使って、別のApp Engine Serviceにリクエストを送ってる人は少数派なんじゃないかなーという気持ちがあるので、そこの部分のユースケースががっつり書いてあると嬉しいですね!
ロギングはいい感じに出力する方法が悩ましいけど、 cloud.google.com/logging は通信とかも発生するし、よほどのことがない限りは使わないかなぁぐらいの気持ちです。

@sinmetal
Copy link
Member Author

sinmetal commented Jul 1, 2019

#102 が爆誕しました

@emahiro
Copy link

emahiro commented Jul 1, 2019

#102 に上記のスライドのリンクは貼らせていただきますね!ありがとうございます!


Google App Engine Standard 2nd Generationがどういうものなのかは以下を確認するとよいです
gVisorがどういったものなのかは以下を確認するとよいです
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我々は知っていることを書きたくなりがちですが、 gVisor の話は脇道なのであまり書かなくても良いのでは。
「Go 1.11 以降は従来のサンドボックスから gVisor ベースのサンドボックスになることでいくつかの制限がなくなった。」として、その後は「Go 1.11 になって緩和されこと」として言及するくらいで良いかと。
嬉しいことについても、嬉しいことがあるから移行するんじゃなくて迫られているから移行するのであって今回は必ずしも必要ないですしね。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

元々書いてあったから、とりあえず残したけど、ごっそり消しますかねー

@apstndb
Copy link
Contributor

apstndb commented Jul 1, 2019

そのドキュメントの目的から逸れる話は削るという思想が我々にも Google にも足りないことが多いので、何らかのトピックがあれば分割してリンクすることを検討してもよさそう。

appcfg.py, goapp からの移行と GOPATH, vendor, Go Modules あたりは包括的に書いている人が少ないし、結構重い話ですね。

ものすごく致命的というわけではないですが、一部のライブラリが使えなかったりするので、多少不便でした。

外と通信するにもApp Engine SDKの機能を利用する必要がありました。
httpを行いたければ、App Engine URLFetch APIを利用する。
Socket通信を行いたければ、App Engine Socket APIを利用する必要がありました。
2nd Generationでは、http clientなどがそのまま使えるようになっています。
gVisor版では、http clientなどがそのまま使えるようになっています。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Socket API なしで net.Dial や gRPC 接続する GCP クライアントライブラリが使えるようになったことで Cloud Spanner 以外も使えるようになったので、一般的にここに含めても良さそうな。

@sinmetal
Copy link
Member Author

sinmetal commented Jul 1, 2019

appcfg.py, goapp からの移行と GOPATH, vendor, Go Modules あたりは包括的に書いている人が少ないし、結構重い話ですね。

は僕もすべてのパターンを知ってるわけではないから、よく分からんな・・・って気持ちですねぇ

@@ -177,25 +84,18 @@ Go 1.9までは `app.yaml` の位置がWorking Dirでしたが、Go 1.11の場
[サンプル](https://github.com/sinmetal/codelab/commit/f3eb2cacb0af05bcd733742e225fe68544fda2b3) のようにトップをmain packageにしてしまえば、OKです。
2つ目はシンボリックリンクなどを利用して、両方のPathでアクセスできるようにしてしまう方法です。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

app.yaml で main を指定できる機能は移行用にできたものだと思うので、これを使うことで解決できるのでは。
https://cloud.google.com/appengine/docs/standard/go111/config/appref?hl=en#main

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

* [SAKURA Internet Image Flux](https://www.sakura.ad.jp/services/imageflux/)

## 2nd Generationへのマイグレーション
## Go1.11へのマイグレーション

基本的には [公式ドキュメント通り](https://cloud.google.com/appengine/docs/standard/go111/go-differences#migrating-appengine-sdk) に行えばよい。
Copy link
Contributor

@apstndb apstndb Jul 1, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

公式ドキュメントでは optional だが strongly recommended として App Engine API からの移行について言及しているが期限が迫る Go 1.9 から Go 1.11 への移行に必須ではないため、このドキュメントでは扱わないというコンテキストを書いておいた方が、公式ドキュメントを読んで混乱する人が減りそうですね。

@sinmetal sinmetal merged commit 1453e9a into master Jul 2, 2019
@sinmetal sinmetal deleted the id/100 branch July 2, 2019 05:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants