Google App EngineでHello World with Golang
はじめに
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 用の設定ファイル。
handlers の url にマッチする 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 と管理の すべてのプロジェクト からできる。