GAE/Go Managed VMsハンズオン

15:00 26 Jul 2015

Daigo Ikeda

Knightso, LLC

Managed VMs(MVMs)とは

2

Managed VMs(MVMs)とは

ざっくり言うと・・・
GAEアプリケーションをGCEインスタンス上で動作させることが出来る!

3

何がうれしいの?

4

現状の課題

5

MVMsハンズオン

6

MVMsハンズオン

GAE/Go MVMsアプリを作って実行&デプロイしてみよう!

注:MVMsは現時点(Jul/2015)でまだbetaの為、本スライドに書かれている手順はすぐ古くなる可能性が高い。

7

事前準備

8

GCPプロジェクト作成

MVMsを試す為にはGCPプロジェクトと課金設定(クレジットカード登録)が必要。

初めての登録ならば$300分のお試しクレジットが適用される。
プロジェクト作成したくない場合は、本日限定で貸し出します^^

9

Dockerインストール

上記URLにも書いてあるが現時点でMVMsはDocker1.7.1未対応とのことなので、1.7.0をインストールすること。

boot2dockerインストール後に下記作業:

$ boot2docker download --iso-url=https://github.com/boot2docker/boot2docker/releases/download/v1.7.0/boot2docker.iso
$ boot2docker stop
$ boot2docker delete
$ boot2docker init
$ boot2docker up
10

Google Cloud SDKインストール

ダウンロード

設定

11

Google App Engine SDKインストール

最新のCloud SDKからGAE/Goコンポーネントが削除された為、GAE/Goの単体SDKをインストールする。

12

Cloud SDKをハック

現在Cloud SDKのデグレードで、GAE/Go MVMsのローカル実行が出来なくなっている。

あまり推奨はされないが、SDKのコードを直接修正して対処する。

36行目の

_SDKROOT = os.path.dirname(os.path.dirname(google.__file__))

_SDKROOT = '<your GAE/Go SDK install directory>'

に変更

13

実装

14

hellomvms.go

package main

import (
    "html/template"
    "net/http"
    "runtime"
    "time"

    "google.golang.org/appengine"
    "google.golang.org/appengine/log"
)

var initTime = time.Now()

func init() {
    http.HandleFunc("/", handle)
    appengine.Main()
}

func main() {
}
15

hellomvms.go(2)

func handle(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        http.NotFound(w, r)
        return
    }

    ctx := appengine.NewContext(r)
    log.Infof(ctx, "Serving the front page.")

    param := struct {
        RunningTime time.Duration
        NumCPU      int
    }{
        time.Since(initTime),
        runtime.NumCPU(),
    }

    tmpl.Execute(w, param)
}
16

hellomvms.go(3)

var tmpl = template.Must(template.New("front").Parse(`
<html><body>

<p>
Hello, MVMs!
</p>

<p>
This instance has been running for <em>{{.RunningTime}}</em>.
</p>

<p>
Num of CPU is <em>{{.NumCPU}}</em>.
</p>

</body></html>
`))
17

app.yaml

runtime: go
api_version: go1
vm: true

resources:
  cpu: 4
  memory_gb: 1.3
  disk_size_gb: 10

manual_scaling:
  instances: 1

handlers:
- url: /.*
  script: _go_app
18

ローカル実行

プロジェクトIDを設定

$ gcloud config set project <project ID>

実行

$ gcloud preview app run app.yaml

http://localhost:8080/ で動作確認。

19

デプロイ!

本来はgcloudでデプロイ出来るはずだが、現在不具合で実行出来ない為appcfg.pyで行う。

$ appcfg.py update -A metal-bus-589 -V mvms2015072601 --oauth2 .

Developers ConsoleのApp Engine - Versionsにデプロイされているかを確認。

http://<version>.<project>.appspot.com/ で動作確認。

デプロイしたバージョンは課金され続けるので注意!!不要なら都度削除すること。

20

Thank you

15:00 26 Jul 2015

Daigo Ikeda

Knightso, LLC

Use the left and right arrow keys or click the left and right edges of the page to navigate between slides.
(Press 'H' or navigate to hide this message.)