GAE/Go1.11 시행(그 1:「퀵 스타트」)
제목
지난번 , GAE(Google App Engine)의 Golang판(v1.9)의 퀵 스타트를 시도했다.
스스로는 시도하고 있지 않지만, v1.9판에서는 Vendoring 관계로 빠지는 것 같다.
하마리를 시도해도 좋지만, 어차피 베타 버전이 벗어날 것입니다.
우선은 퀵 스타트를 시도하지만, 모처럼이므로 v1.9판의 소스를 비교해 본다.
개발 환경
#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
전제
#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
전제
표준 환경 에서의 개발로 한다.
실천
순서는 ↓에 따라하면서, 관계하는 파일의 내용을 확인해 간다.
htps : // c ぉ d. 오, ぇ. 코 m / 아펜 기네 / 드 cs / s 단지 rd / 111 / 쿠이 cks rt? hl = 그럼
■ 샘플 프로젝트 취득
절차대로.
$ go get -u -d github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld/...
$
$ ll golang-samples/appengine/helloworld/
合計 16K
-rw-r--r-- 1 koge koge 69 11月 12 02:51 app.yaml
-rw-r--r-- 1 koge koge 391 11月 12 02:51 hello.go
hello.go
이유는 "google.golang.org/appengine"을 사용하지 않는 샘플 소스가되었습니다.
사용하지 않아도 좋다(중복이 되었지만) 굳이 사용하고 있지 않을 뿐인지, 현시점에서 v1.11에 비대응일 뿐인지는 불명.
v1.11 버전
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", indexHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
log.Printf("Listening on port %s", port)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
fmt.Fprint(w, "Hello, World!")
}
v1.9 버전
package main
import (
"fmt"
"net/http"
"google.golang.org/appengine"
)
func main() {
http.HandleFunc("/", handle)
appengine.Main()
}
func handle(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world!")
}
app.yaml
App Engine의 동작을 결정하는 구성 파일.
어떤 요소를 정의하는지는 ↓에 기재되어 있다.
htps : // c ぉ d. 오, ぇ. 코 m/아페기네/도 cs/s 단지 rd/고 111/콘후ぃg/아 p? hl = 그럼
v1.9판의 ↓
htps : // c ぉ d. 오, ぇ. 코 m/아페기네/도 cs/s 단지 rd/고/콘후ぃg/아 뿌레 f? hl = 그럼
v1.11 버전
runtime: go111
URL의 핸들링은 Go의 소스내에서 실시하는 방침이 되었다고 하는 것일까?
v1.9 버전
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
■ 로컬 부팅
로컬로 기동할 때는, 기동 스크립트가 Python인 것은 같다.
$ dev_appserver.py app.yaml
INFO 2018-11-14 00:25:23,158 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 00:25:25,628 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
INFO 2018-11-14 00:25:25,630 admin_server.py:152] Starting admin server at: http://localhost:8000
2018/11/14 00:25:27 Listening on port 18085
INFO 2018-11-14 00:25:28,359 instance.py:294] Instance PID: 8137
INFO 2018-11-14 00:25:58,565 module.py:434] [default] Detected file changes:
/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld/helloworld.go
2018/11/14 00:25:59 Listening on port 23807
INFO 2018-11-14 00:26:00,645 instance.py:294] Instance PID: 8540
그래, 시작 OK.
■ 배포
※당연히, 「gcloud init
」나 「gcloud auth login
」는 끝나고 있는 전제.
d$ gcloud app deploy
Services to deploy:
descriptor: [/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld/app.yaml]
source: [/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld]
target project: [【プロジェクトID】]
target service: [default]
target version: [20181114t093930]
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.
GCP 콘솔에서도 런타임 'go'의 인스턴스가 배포되었는지 확인합니다.
요약
퀵 스타트 레벨에서도 조금 차이가 있었다.
다음 번에는 v1.9판에서 빠진다고 말해진 Vendoring 주위를 시험해 보자.
Reference
이 문제에 관하여(GAE/Go1.11 시행(그 1:「퀵 스타트」)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sky0621/items/8a42ee24cb417940228c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ go get -u -d github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld/...
$
$ ll golang-samples/appengine/helloworld/
合計 16K
-rw-r--r-- 1 koge koge 69 11月 12 02:51 app.yaml
-rw-r--r-- 1 koge koge 391 11月 12 02:51 hello.go
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", indexHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
log.Printf("Listening on port %s", port)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
fmt.Fprint(w, "Hello, World!")
}
package main
import (
"fmt"
"net/http"
"google.golang.org/appengine"
)
func main() {
http.HandleFunc("/", handle)
appengine.Main()
}
func handle(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world!")
}
runtime: go111
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
$ dev_appserver.py app.yaml
INFO 2018-11-14 00:25:23,158 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 00:25:25,628 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
INFO 2018-11-14 00:25:25,630 admin_server.py:152] Starting admin server at: http://localhost:8000
2018/11/14 00:25:27 Listening on port 18085
INFO 2018-11-14 00:25:28,359 instance.py:294] Instance PID: 8137
INFO 2018-11-14 00:25:58,565 module.py:434] [default] Detected file changes:
/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld/helloworld.go
2018/11/14 00:25:59 Listening on port 23807
INFO 2018-11-14 00:26:00,645 instance.py:294] Instance PID: 8540
d$ gcloud app deploy
Services to deploy:
descriptor: [/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld/app.yaml]
source: [/work/src/golang/src/github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/helloworld]
target project: [【プロジェクトID】]
target service: [default]
target version: [20181114t093930]
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
퀵 스타트 레벨에서도 조금 차이가 있었다.
다음 번에는 v1.9판에서 빠진다고 말해진 Vendoring 주위를 시험해 보자.
Reference
이 문제에 관하여(GAE/Go1.11 시행(그 1:「퀵 스타트」)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sky0621/items/8a42ee24cb417940228c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)