カレーのライスをtech忘れ

odmishienのtechメモ

GAE/ Go1.9 から Go1.12 へ移行するためにやったこと

業務でGAEのGoアプリケーション(1.9)を1.12化をすることがあったので、作業ログをまとめておきます。

ドキュメント

やること

  • app.yaml の書き換え

    • runtime: go112
    • script: auto
    • skip_files.gcloudignore へ移行
    • login が非推奨になるので新しい認証を入れる
      • login | 非推奨 | Go 1.12 ラインタイムでは login がサポートされません。ユーザー認証に別の方法を使用する必要があります。

  • init.go & init_test.go の書き換え

    • ファイル名を main.go & main_test.go に変更
    • func init()func main() に変更
  • appengine パッケージからの脱出

    • appengine パッケージと google.golang.org/appengine パッケージはサポート対象外になりました。同等の Google Cloud Platform サービスにアクセスするには、Google Cloud クライアント ライブラリに移行する必要があります。

    • appengine.Main() とか appengine.NewContext がサポート対象外になるのでGoの標準packageを使って書き換えないといけないぽい
    • この サポート対象外 というのがよく分からなくて、結局 #AccessToken とか #AppID 関数とかは動いている

ハマったところ

go run main.go ができない

  • localで go run main.go してみるとすでにappengineパッケージ周りでエラーが出ていたのでサポート対象外ってAPIが廃止になったてことかな......
    • ちなみにdev_appserver.pyみたいなアレが1.12ランタイムから使えなくなったのでそれはそう、という感じ
    • 完全に appengine package から脱出しないとローカルで実行することができないのでちょっと面倒

go mod 使うとワーキングディレクトリが go.mod がある場所になる

internal.flushLog: Flush RPC: service bridge HTTP failed: Post http://appengine.googleapis.internal:10001/rpc_http: dial tcp 169.254.169.253:10001: i/o timeout というエラー

  • これは私の手元での問題なのだが、 go mod init するとGopkg.lockから依存を解決してくれていたのでしっかり以前のバージョンが更新されないまま入っていた

    • latestにアップデートしてみて、これで直るか!!と思ったけどダメ
    • 検索してみると 同じような症状の人を見つけた
    • 原因不明なのでgo1.11ランタイムを使っていますとのことぽい、そんな...
  • appengineパッケージを完全に脱出すると治った

10月には1.9ランタイムがdeprecatedになっているにも関わらずあまりインターネッツに情報がなかったので少し大変だった。とりあえず動いてはいるけど、これでいいのかな?という感じで自信がない...

参考にしたページ