Google App EngineのGo runtimeを1.11から1.12にアップグレードした

(image)Google App EngineのGo runtimeを1.11から1.12にアップグレードした

Google App Engineで設定しているGoアプリケーションのruntimeを過渡期世代(?)のGo 1.11からGo 1.12にアップグレードしたのでその備忘録。

前回までのあらすじ

きっかけ

2019年10月1日までにGo1.11かそれ以上に上げろ」というメールがGoogleさんから届いたのでした。

What do I need to do?

To avoid service disruption in your applications, please re-deploy your App Engine Standard applications using Go 1.11 or above before October 1, 2019.

If your application uses the App Engine Go SDK APIs, please upgrade to Go 1.11.

If you are not using these APIs, please upgrade to Go 1.12.

以前、Go 1.11までは上げていたので正直そのままでもよかったのだけど、せっかくなので1.12まで上げてみることにした。

過渡期世代とは?

ちなみにGo 1.11は第一世代から第二世代への過渡期世代と言える。Go 1.12にすることで完全なる第二世代へと移行されることとなる。

第二世代にはApp Engine API対応の過渡期の世代とApp Engine API非対応の完璧な第二世代があります。

ここで言うとJava 8、Go 1.11が過渡期の世代にあたるようです。Go 1.12やPHP 7.2のバージョンの世代は完璧な第二世代にあたるので、App Engine APIは利用不可となります。

ref. Google App Engineを第一世代から第二世代に乗り換えた

アップグレード手順

基本的に下記の公式ドキュメントを参考に進めていけばよい。

Migrating your App Engine app to Go 1.12  |  App Engine standard environment for Go 1.12 docs  |  Google Cloud

app.yml

app.ymlにてruntimeをGo 1.11から1.12へ変更。一番重要な点。

runtime: go112

cron.yml

cron.ymlはそのままの書式で変更なしで大丈夫。このcronジョブの機能はGAEのConsole上にメニューとして残り続けるようだ。

参考: Scheduling Jobs with cron.yaml

タスクキュー

Cloud Tasks でのキュー管理方式に置き換わった。必要なら乗り換えよう。

Cloud Tasks の使い方に関してはGoogle App Engineとはまた別の公式ドキュメントを読もう。

Cloud Tasks Service for Asynchronous Execution  |  Cloud Tasks  |  Google Cloud

ローカル開発環境

dev_appserver.py は使えない

今までどおりの dev_appserver.py を使うと下記のようにエラーが発生して起動できない。

$ dev_appserver.py app.yaml
...(snip)...
RuntimeError: Unknown runtime 'go112'; supported runtimes are 'custom', 'go', 'go111', 'java', 'java7', 'java8', 'php55', 'php72', 'python', 'python-compat', 'python27', 'python37'.

Go 1.11 に乗り換えているならば app.go は素直な実装になっているはずなので、下記のようにgo runでローカルにサーバーを起動することができる。

$ go run app.go

カナリアリリースっぽいやつ

下記のようにno-promoteオプションを付けることで、本番環境へのトラフィックを振らない形でデプロイができる。これを使った場合、本番URLとは別に確認陽のURLが発行されているので、それを使って動作確認を行った後に本番へと昇格させるかたちとなる。

$ gcloud app deploy --no-promote

参考: Testing and Deploying your Application

参考資料