お題
前回はGAE/Go(v1.11)のクイックスタートを試してみた。
今回からは公式サイトのドキュメント眺めつつ、いくつかのコンセプトを確認してみる。
で、今回は、表題の通りappengine
から取れる情報を確認。
GAE試行Index
開発環境
# OS
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
# Golang
$ go version
go version go1.11.2 linux/amd64
バージョンの切り替えはgoenvで行っている。
# gcloud
$ gcloud version
Google Cloud SDK 224.0.0
前提
- スタンダード環境での開発とする。
- GCPプロジェクトは作成済み。
- gcloudコマンドインストール済み。
実践
今回のソース全量は↓
https://github.com/sky0621/go-webapi-for-gae-study/tree/aab17658753a64de375129b7efa4a09133883467
プロジェクト構成
$ tree
.
├── Gopkg.lock
├── Gopkg.toml
├── README.md
└── backend
├── app.yaml
├── index.yaml
└── server.go
app.yaml
runtime: go111
server.go
クイックスタートのソースでは、なぜか、"google.golang.org/appengine" を使わないサンプルソースになっていたが、
v1.11だからといって使えないわけではなかったので、同パッケージの appengine を用いて、取れる情報を表示してみる。
package main
import (
"fmt"
"net/http"
"google.golang.org/appengine"
)
func main() {
http.HandleFunc("/", handleRoot)
appengine.Main()
}
func handleRoot(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, GAE/go")
c := appengine.NewContext(r)
fmt.Fprintf(w, "[AppID]: %v\n", appengine.AppID(c))
fmt.Fprintf(w, "[Datacenter]: %v\n", appengine.Datacenter(c))
fmt.Fprintf(w, "[DefaultVersionHostname]: %v\n", appengine.DefaultVersionHostname(c))
fmt.Fprintf(w, "[InstanceID]: %v\n", appengine.InstanceID())
fmt.Fprintf(w, "[IsAppEngine]: %v\n", appengine.IsAppEngine())
fmt.Fprintf(w, "[IsDevAppServer]: %v\n", appengine.IsDevAppServer())
fmt.Fprintf(w, "[IsFlex]: %v\n", appengine.IsFlex())
fmt.Fprintf(w, "[IsStandard]: %v\n", appengine.IsStandard())
fmt.Fprintf(w, "[ModuleName]: %v\n", appengine.ModuleName(c))
fmt.Fprintf(w, "[RequestID]: %v\n", appengine.RequestID(c))
fmt.Fprintf(w, "[ServerSoftware]: %v\n", appengine.ServerSoftware())
serviceAccount, _ := appengine.ServiceAccount(c)
fmt.Fprintf(w, "[ServiceAccount]: %v\n", serviceAccount)
fmt.Fprintf(w, "[VersionID]: %v\n", appengine.VersionID(c))
}
■ローカル起動
$ dev_appserver.py app.yaml
INFO 2018-11-14 16:50:04,810 devappserver2.py:224] Using Cloud Datastore Emulator.
We are gradually rolling out the emulator as the default datastore implementation of dev_appserver.
〜〜〜
INFO 2018-11-14 16:50:06,918 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
INFO 2018-11-14 16:50:06,919 admin_server.py:152] Starting admin server at: http://localhost:8000
INFO 2018-11-14 16:50:09,764 instance.py:294] Instance PID: 7620
■デプロイ
※当然、「gcloud init
」や「gcloud auth login
」は済んでいる前提。
$ gcloud app deploy
Services to deploy:
descriptor: [/work/src/golang/src/github.com/sky0621/go-webapi-for-gae-study/backend/app.yaml]
source: [/work/src/golang/src/github.com/sky0621/go-webapi-for-gae-study/backend]
target project: [【プロジェクトID】]
target service: [default]
target version: [20181115t012712]
target url: [https://【プロジェクトID】.appspot.com]
Do you want to continue (Y/n)? y
Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 4 files to Google Cloud Storage ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://【プロジェクトID】.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
GAE環境にデプロイすると「IsAppEngine
」がtrue
になり、逆にローカル環境で起動すると「IsDevAppServer
」がtrue
になる。
まとめ
ここで取れた情報を使うと、ローカル起動時のみ(またはGAE環境デプロイ時のみ)行うべき処理の振り分けがソース上でできる。