はじめに
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と管理のすべてのプロジェクトからできる。