Google App Engine Go Flexible EnvironmentからGo Standard Environment Go1.9(beta)への移行奮闘記

GMOアドマーケティングのy.yです。

去年の11月以来、2回目のブログとなります。

今回はGo言語のGoogle App Engine環境移行奮闘記となります。

FlexibleからStandardに移行しようと思った理由はコストを抑えたい!

App Engineの料金はこちら

なぜ、初めからStandardを選択しなかったかというとGo1.9がStandardで対応していなかったからです。

でも2018/03/19からStandardでGo1.9が使えるようになったとリリースノートに書いてありました。(gcpugの方に教えていただきました)

ということで、app.yamlをちょろっと書き換えて2、3時間あれば大丈夫だろうなという

ものすごい気楽な気持ちで環境を切り替えることを心に決めました。

が結果そこから24時間程度かかることになり、頭の中で悪魔と悪魔がささやいていたので

やっぱり切り替えるのやめようかなとも考えましたがなんとか切り替えることができました。

 

やったこと

  1. app.yaml変更
  2. アプリケーションディレクトリ構成変更
  3. contextの生成方法変更
  4. アプリケーションロジックをStandard環境用に変更

 

詳細

1. app.yamlをFlexibleからStandardに変更

変更前

変更後

 

2. gcloud app deployをすると下記のエラーが発生します

エラーについては下記を参照

https://issuetracker.google.com/issues/38449183

goapp deployの場合はvendorがアプリケーションのルートディレクトリにあれば問題なくdeployできるとの情報ありました。

gcloud app deployでdeployの対応方法としてアプリケーションのディレクトリ構成を変更

参考:https://qiita.com/koki_cheese/items/216fe73caf958db34aa2

参考:https://motemen.hatenablog.com/entry/2016/11/gae-go-building

 

ディレクトリ構成変更前

ディレクトリ構成変更後

あとはdeployするときにGOPATHを切り替えてdeploy。deployのたびにGOPATHを切り替えなければいけないのは面倒ですが

 

その他の対応はdev_appserverでdebugしながら原因調査と対処をしました。

今回ディレクトリ構成の変更以外で対応した箇所は以下になります。

3. internal server errorとなり、debugしていたら認証部分でエラーとなっていたのでcontextの変更

変更前

変更後

 

4. DefaultClient 使えないとのことなので

https://cloud.google.com/appengine/docs/standard/go/issue-requests

変更前

変更後

# リクエストが404になってしまうのでhttp handleでルーティング等の指定

 

まとめ

対応した内容は大したことなかったけど、わからないことがたくさんあったので時間もかなりかかってしまい色々と苦労しました。

でも前回のブログの時よりほんの少しだけど成長できたかなと思います。

 

前回のブログ

Go言語でGoogle Cloud StorageへのUploadとBigQueryで集計