tl;dr
これの通りです
うごくやつです
作業環境
% gcloud -v
Google Cloud SDK 235.0.0
app-engine-go
app-engine-python 1.9.83
bq 2.0.41
cloud-datastore-emulator 2.1.0
core 2019.02.15
gsutil 4.36
% go version go version go1.11 darwin/amd64
Overview
- プロジェクトの作成とRegionの設定
- ローカルで開発
- デプロイ
- 確認
プロジェクトの作成とRegionの設定
プロジェクトIDで、ローカルのSDKを設定しておく
% gcloud config set project otiai10-sandbox
ローカルで開発
% mkdir -p $GOPATH/src/github.com/otiai10/gae-go-sandbox % cd $GOPATH/src/github.com/otiai10/gae-go-sandbox
% vi main.go
main.go
package main import ( "fmt" "net/http" "os" "github.com/otiai10/marmoset" ) func main() { router := marmoset.NewRouter() router.GET("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hi")) }) router.GET("/hello", func(w http.ResponseWriter, r *http.Request) { message := fmt.Sprintf("Hello, %s!", r.FormValue("name")) w.Write([]byte(message)) }) port := os.Getenv("PORT") if port == "" { port = "8080" } fmt.Println("Listening port", port) http.ListenAndServe(fmt.Sprintf(":%s", port), router) }
ローカルでの挙動確認
% go run main.go
Listening port 8080
いいかんじ。
デプロイ
app.yaml
つくる
% vi app.yaml
runtime: go111
おしまい。
% gcloud app deploy # もしかすると # gcloud auth login # が必要かも
とすると、
Updating service [default]...failed. ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 01b7bef8-3e62-4956-9bc6-8e3a4b4cb1fe status: FAILURE. Build error details: go: finding github.com/otiai10/marmoset v0.4.0 go: finding golang.org/x/net v0.0.0-20190225153610-fe579d43d832 go: downloading github.com/otiai10/marmoset v0.4.0 . Check the build log for errors: https://console.cloud.google.com/gcr/builds/01b7bef8-3e62-4956-9bc6-8e3a4b4cb1fe?project=199462931903
言われたとおりエラーログ見に行くと、
GCR(コンテナレジストリ)へのイメージのアップロードで403を食らっているような雰囲気がある。ためしに、コンテナレジストリのコンソールに行くと。
ふむ。Quick Startのドキュメントをよく見ると
Before you begin
Use the GCP Console to create a Google Cloud Platform project, choose a region where you want your application's resources to be located, and enable billing:
https://cloud.google.com/appengine/docs/standard/go111/quickstart#costs
とある。たぶん、AppEngineが使うストレージとは別に、GCRが使う領域を追加するのに課金の有効化(金がかかるとは言っていない)が必要だと思われる。ので、ここ https://console.cloud.google.com/billingから、このプロジェクトの課金を有効化して、再度GCRを見に行くと、
見えるようになった。気を取り直して、
% gcloud app deploy # 中略 Deployed service [default] to [https://otiai10-sandbox.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
いいかんじにコマンドは成功した。
確認
いいじゃん
雑感
- Go1.11になって、vendoringがラクになった
- GAE/Goの話ではないが、go modで認識されるバージョンはSemantic Versioningである必要があるっぽい
- Semantic Versioning 2.0.0 | Semantic Versioning
- Modules · golang/go Wiki · GitHub
- つまり、
0.4.0
ではなく、v0.4.0
というタグをつけるべき
- GAE/Goの話ではないが、go modで認識されるバージョンはSemantic Versioningである必要があるっぽい
- Google Cloud Platform のドキュメントは、日に日に進化していて、どんどんわかりやすくなっている
DRYな備忘録として