LoginSignup
3
2

More than 5 years have passed since last update.

GAE/Go1.11試行(その1:「クイックスタート」)

Posted at

お題

前回、GAE(Google App Engine)のGolang版(v1.9)のクイックスタートを試してみた。
自分では試していないけど、v1.9版ではVendoring関係でハマるらしい。
ハマりを試してみてもいいのだけど、どうせならじきに Beta 版が外れるであろう v1.11 版でいろいろ試した方が楽しそうなので、急遽、対応バージョンを変更。
まずはクイックスタートを試すけど、せっかくなので 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

前提

  • スタンダード環境での開発とする。
  • GCPプロジェクトは作成済み。
  • gcloudコマンドインストール済み。

実践

手順は↓に従いつつ、つど、関係するファイルの中身を確認していく。
https://cloud.google.com/appengine/docs/standard/go111/quickstart?hl=ja

■サンプルプロジェクト取得

手順通り。

$ 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の挙動を決める設定ファイル。
どういう要素を定義するかは↓に記載してある。
https://cloud.google.com/appengine/docs/standard/go111/config/appref?hl=ja

v1.9版のは↓
https://cloud.google.com/appengine/docs/standard/go/config/appref?hl=ja

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。
001.png

■デプロイ

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

GCPコンソール上でも、ランタイム「go」のインスタンスがデプロイされていることを確認。
screenshot-console.cloud.google.com-2018-11-14-09-43-59-758.png

まとめ

クイックスタートレベルでも、ちょっと違いがあった。
次回は、v1.9版でハマると言われていたVendoringまわりを試してみよう。

3
2
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
3
2