LoginSignup
2
1

More than 5 years have passed since last update.

GAE/Go1.11試行(その2:「"google.golang.org/appengine"パッケージのappengineから取れる情報」)

Last updated at Posted at 2018-11-14

お題

前回は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

うん、もろもろ情報が取れてる。
01.png

■デプロイ

※当然、「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。
02.png

先ほどのローカル起動での取得情報と並べてみる。
01.png

GAE環境にデプロイすると「IsAppEngine」がtrueになり、逆にローカル環境で起動すると「IsDevAppServer」がtrueになる。

まとめ

ここで取れた情報を使うと、ローカル起動時のみ(またはGAE環境デプロイ時のみ)行うべき処理の振り分けがソース上でできる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1