nownab.log

nownabe's daily posts

Google App EngineでHello World with Golang

Posted on Oct 4, 2016

はじめに

GAEのQuick Startをやりました。 そのときのメモです。 📝 😅

SDKインストール

ここからダウンロードして、パスを通す。

$ wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_darwin_amd64-1.9.40.zip
$ unzip -d ~/opt go_appengine_sdk_darwin_amd64-1.9.40.zip
$ rm go_appengine_sdk_darwin_amd64-1.9.40.zip
$ echo 'export PATH="/Users/nownabe/opt/go_appengine:$PATH"' >> .zshrc
$ exec $SHELL -l
$ goapp version
go version go1.6.2 (appengine-1.9.40) darwin/amd64

pythonは2.7系がインストールしてある必要がある。

ローカルでHello world

適当なディレクトリを作って移動しておく。

$ mkdir gae-hello
$ cd gae-hello

Hello worldするアプリを作る。

package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

init関数はアプリケーションが開始する前に呼ばれるらしい。 main関数がないので、これ単体だと起動することはできない。

ローカルでもさっきインストールしたSDKを使って起動する。 が、その前にapp.yamlというのも作ってあげないといけない。

runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

これはApp Engine用の設定ファイル。

handlersurlにマッチするURLがGoのアプリで処理されるようになる。例えば静的ファイルをここで分岐して処理したりできる。

_go_appというのはローカルの開発サーバ用のもので、productionのApp Engineでは無視される。

ここまでやって、ローカルでアプリケーションを起動できるようになる。 起動にはSDKに含まれているgoappコマンドを使う。

$ goapp serve hello.go
INFO     2016-10-04 13:52:01,869 devappserver2.py:769] Skipping SDK update check.
WARNING  2016-10-04 13:52:02,014 simple_search_stub.py:1146] Could not read search indexes from /var/folders/cx/93p9j67n1lb9m18x2t3jbnx80000gn/T/appengine.None.nownabe/search_indexes
INFO     2016-10-04 13:52:02,018 api_server.py:205] Starting API server at: http://localhost:53458
INFO     2016-10-04 13:52:02,021 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2016-10-04 13:52:02,023 admin_server.py:116] Starting admin server at: http://localhost:8000

pythonが頑張ってる。 この状態でアクセスすると、Hello, world!が返ってくる。

$ curl localhost:8080
Hello, world!

デプロイ

次はデプロイ。

まずはGCPのコンソールで新しいプロジェクトを作る。

作るとプロジェクトIDが発行されるので、それをコピーしとく。 URLとかみるとわかる。

次のコマンドでデプロイできる。 Googleアカウントの認証のために勝手にブラウザが開いたりするので、びっくりしないようにする。

$ appcfg.py -A ${PROJECT_ID} -V v1 update .

完了したら、https://${PROJECT_ID}.appspot.com/でアクセスできる。 HTTPもHTTPSも使えるっぽい。

消す

何かの拍子に課金されないように、作ったプロジェクトは削除しておく。 削除はIAMと管理のすべてのプロジェクトからできる。