GAE/Go1.11 시도(그 2: ""google.golang.org/appengine"패키지의 appengine에서 취할 수 있는 정보")

12384 단어 5GAEgcp

제목



지난번은 GAE/Go(v1.11)의 빠른 시작을 시도했다.
이번부터는 공식 사이트의 문서를 보면서 몇 가지 컨셉을 확인해 본다.
그래서 이번에는 표제대로 appengine 에서 취할 수 있는 정보를 확인.

GAE 시도Index


  • GAE/Go1.11 시행(그 1: 「퀵 스타트」)
  • GAE/Go1.9 시도(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
    

    전제



  • 표준 환경 에서의 개발로 한다.
  • GCP 프로젝트가 생성되었습니다.
  • gcloud 명령 설치됨.

  • 실천



    이번 소스 전량은↓
    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 환경 배포시에만) 수행해야 할 처리의 배분을 소스에서 할 수 있습니다.

    좋은 웹페이지 즐겨찾기