GAE/Go1.11 시도(그 2: ""google.golang.org/appengine"패키지의 appengine에서 취할 수 있는 정보")
제목
지난번은 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
전제
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
$ go version
go version go1.11.2 linux/amd64
$ gcloud version
Google Cloud SDK 224.0.0
표준 환경 에서의 개발로 한다.
실천
이번 소스 전량은↓
htps : // 기주 b. 이 m/sky0621/고우우바피후우 r-에-s dy/t레에/아 b17658753
프로젝트 구성
$ 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
배포 OK.

방금 전의 로컬 기동으로의 취득 정보와 나란히 보자.

GAE 환경에 배포하면 "IsAppEngine
"가 true
가되고 반대로 로컬 환경에서 시작하면 "IsDevAppServer
"가 true
가됩니다.
요약
여기에서 얻은 정보를 사용하면 로컬 시작시에만 (또는 GAE 환경 배포시에만) 수행해야 할 처리의 배분을 소스에서 할 수 있습니다.
Reference
이 문제에 관하여(GAE/Go1.11 시도(그 2: ""google.golang.org/appengine"패키지의 appengine에서 취할 수 있는 정보")), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sky0621/items/0e0a119f9fefc40e2953
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ tree
.
├── Gopkg.lock
├── Gopkg.toml
├── README.md
└── backend
├── app.yaml
├── index.yaml
└── server.go
runtime: go111
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 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 환경 배포시에만) 수행해야 할 처리의 배분을 소스에서 할 수 있습니다.
Reference
이 문제에 관하여(GAE/Go1.11 시도(그 2: ""google.golang.org/appengine"패키지의 appengine에서 취할 수 있는 정보")), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sky0621/items/0e0a119f9fefc40e2953텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)