ねむねむ

GAE Go 1.11への移行作業

2019-10-01からApp EngineにGo 1.9以下のバージョンのアプリがデプロイできなくなるとの通達を受けて、Go 1.11への移行作業を行ったのでざっくりとまとめておきます。
最終的にはApp Engine特有のAPIへの依存のない状態を目指す予定ですが、今回は初期段階としてappengine.Main()を使用したものとなります。

作業内容

main.goの変更

公式のサンプルをベースに改変したコード

package main

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func main() {
	http.HandleFunc("/", indexHandler)

	appengine.Main()
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
	if r.URL.Path != "/" {
		http.NotFound(w, r)
		return
	}
	fmt.Fprint(w, "Hello, World!")
}

app.yamlの変更

上記以外にもDeprecatedになった設定がいくつかあるので注意

includesの除去

自分の場合、Gitで管理しないように環境変数(env_variables)を定義するファイルを個別に作ってincludesで読み込んでいました。 この用途ならgithub.com/joho/godotenvで代替できますし、それ以外の用途でも単純にファイル結合(e.g. cat app_base.yaml hoge.yaml > app.yaml)させるなどで一応対応できるかと思います。

handlersのloginの除去

Go 1.11ではloginはまだサポートされているのでそのままでも問題ありませんが、将来的に使えなくなるので一応触れておきます。
TaskQueueのハンドラでlogin: adminを使用してリクエストの検証をしていた場合には、HTTPヘッダーX-Appengine-Tasknameなどが空ではないことを確認すればいいかと思わます。 公式のサンプル
それ以外で使用している場合には何かしらの認証手段を導入する必要があるとのこと。

go.modの利用

vendorを利用している場合などはそのままでも問題ないかと思いますがgo.modが使えるようになったので移行します。(自分はdepで管理していました)

gcloudコマンドでデプロイ

vendorディレクトリの関係でappcfg.pyを用いてデプロイしていましたが、Go 1.11はサポートされていないのでgcloudコマンドでデプロイするようにします。

$ gcloud app deploy app.yaml index.yaml queue.yaml

サービスアカウントでデプロイする場合などに必要な権限はこちらを参照

参考


Share this:
このエントリーをはてなブックマークに追加