LoginSignup
4
2

More than 5 years have passed since last update.

GAE/GOの次世代ランタイムgo1.11に移行したときのメモ

Last updated at Posted at 2019-01-29

最近GAEのバージョンをgo1.11にアップデートしたのでそのときのメモ

なぜgo1.11に移行したか

GAE/GO(1.9) Standard から Cloud PubSubに秒間15000件パブリッシュしようとして色々ハマった話でも書いたように、go1.9を使っていたためにGAEのfetchURLの制限にひっかかってました。それを解決するために、リクエストをメモリ上にキャッシングするような実装をしていました。実は、このpubsubを使った実装への移行によりGAEの料金が3割程度あがってしまったという問題があり、その原因としてこのキューに詰め込む処理が怪しいという仮説を立てていました。

今回、go1.11へ移行し、シンプルな実装に戻して料金がどうなるかを検証するために移行を行いました。

あ、うちもgo1.9 -> go1.11に移行したほうがいいの?

まだgo1.11はベータ版ですし、go1.9で問題なく動いているなら必要ないとは思います。
新規で作る場合はgo1.11がよさそうです。

App Engine Standard Go 1.9 migration to Go 1.11

やったこと

箇条書きするとこんな感じでした。

  • goのバージョンを1.11にする
  • app.yamlを書き換える
    • runtime: go -> runtime: go111
    • script: _go_app -> script: auto
  • main.goの変更
    • package名をmainに
    • init() -> main() に
    • appengine.Main() を追加
      • これないとdev_appserver起動時にconnection error発生した
  • デプロイできるようにディレクトリを調整(※1)

基本、公式マニュアル通りにやればだいじょぶです。
Migrating your App Engine app from Go 1.9 to Go 1.11

こちらも、日本語でわかりやすかったです。
GAE/Go アプリケーションを Go 1.11 に移行するためにやったこと

Gcloud SDK と GAE SDK for GO

GAEを取り扱うコマンドラインツールはGcloud SDKGAE SDK for GOの2つあります。
現在はGcloud SDKが推奨のようです。弊システムでもGcloud SDKを使っています。

depとglide

Goのパッケージマネージャにはdepglideがあります。glideのリポジトリをみるとdepへの移行を推奨しているようなので、depを使ったほうがよさそうです。
弊システムではglideを使っていたので引き続きglideを使います。

デプロイできるようにディレクトリを調整

gcloud deploy しようとしたらパッケージのimportパスが見つからないエラーが出ました。
すべての実装ファイルを GOPATH/src 以下に配置したら動くようになりました。

↓こんな感じ

GOPATH/
  - bin
  - pkg
  - src
    - main
      - main.go
      - app.yaml
    - hoge
      - hige.go
    - fuga
      - foo.go
    - glide.lock
    - glide.yaml
    - vendor
      - github.com/...
      - google.golang.org/...

sonatardさんのサンプルを参考にさせてもらいました sonatard/appengine-go-migrate-2nd-gen-sample。glideもGOPATH/src/以下で glide updateすれば普通にパス通るので便利です。

go1.11のディレクトリに関する公式ドキュメント
structuring_your_files
gopath

で、課金額はどうなった?

go1.11にあげて、実装をシンプルなものに戻したところ、課金額が3割ほど下がりました。作成インスタンス数は前バージョンからあまり変わっていないのですが、有効インスタンス数が下がったのが大きかったと思います。前バージョンでは作成インスタンス数が有効インスタンス数と同数になってしまっていました。これは、普通ではありえないと思います。おそらく、ログのロストを避けるために長い時間リクエストコネクションはるような実装をしていたので、そのあたりが悪さをしていたと考えています。

※ go1.9 -> go1.11になれば料金が安くなるという意味ではありません。

GAE(AppEngine)ダッシュボードのインスタンス(作成、有効、課金インスタンス推定)について

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2