絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

いまさらGAE/Goに入門してみる

最近周囲がGAEづいていて、やったこともなかったので入門してみた。 今の状況的にはやっぱりGoかなと思うので、GAE/Goで。

GCPに登録

まずは登録

https://console.cloud.google.com

初めての人は、60日間有効な$300クレジットがあるのでそれで遊ぶどいいよ (2016/05/21) 登録時にクレカの登録を求められるけど、無料期間が終わっていきなり請求されるわけではないらしい。

プロジェクトを作る

何故か最初からAPI ProjectができていたがApp Engineがほしいので、新しいプロジェクトを作る。特に選択肢なくせずにGAEのプロジェクトができた。 プロジェクト名はご自由に。

AppEngineのページに行くと、言語ごとのチュートリアルも読むことができる。 すごく良く出来てて基本的な使い方を理解できるので、正直やっとくといいよ。

自分はGoのチュートリアルをやった。 チュートリアルを実行すると、リポジトリにサンプルアプリが配置されるので、実行テストにはそれを使いまわすと楽。

App Engine SDK のセットアップ

ちょっと前のドキュメントだとGoogle Platform SDK の gcloudコマンドが統合管理するよ!って感じだったけど、どうやらGAEのSDKはそこからstandaloneになった様子。

https://cloud.google.com/appengine/downloads

ここからpackageを取ってくる。

% curl -O https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_darwin_amd64-1.9.37.zip
% unzip go_appengine_sdk_darwin_amd64-1.9.37.zip

.*shrc 的なものにPATHを通す。

export PATH="/path/to/go_appengine:$PATH"

.*shrcを読みなおしてgoappコマンドにパスが通っている事が確認できればOK。

ローカルでサンプルを動作させてみる

この辺は作りたいものを作ってく感じだけど、とりあえずまずGAEの操作を覚えるのでサンプルのまま。

gae-sample
├── app.yaml
└── hello
    └── hello.go
package hello

import (
    "fmt"
    "net/http"
)

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

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

上記を作成し、対象ディレクトリをgoapp serve する。

% goapp serve gae-sample
INFO     2016-05-21 04:45:56,681 devappserver2.py:769] Skipping SDK update check.
WARNING  2016-05-21 04:45:56,885 simple_search_stub.py:1146] Could not read search indexes from /var/folders/r8/gnn5k3_j4qq1rjmd3k3x1b4r0000gn/T/appengine.None.yudoufu/search_indexes
INFO     2016-05-21 04:45:56,891 api_server.py:205] Starting API server at: http://localhost:58354
INFO     2016-05-21 04:45:56,897 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2016-05-21 04:45:56,901 admin_server.py:116] Starting admin server at: http://localhost:8000

これでローカルにアプリが起動するので、http://localhost:8080/ で動作をチェックできたら完了。 http://localhost:8000/でアプリケーションの状況もチェックできる。

余談だが、最初yamlを書く際にGCP上のサンプルを真似してversion: 1無しで作ったら、GAEにdeployする際に A version or backend parameter is required. と怒られてしまった。 その辺、参考にしたサンプル次第で色々エラーに見舞われると思うのでご注意をば。

GAE上に配置する

今のサンプルをGAE上に配置してみる。

% goapp deploy -application [project id] gae-sample 

project idは、作成したGAEプロジェクトのダッシュボード左上あたりに書かれてるので、それを引っ張ってくる。 実行すると、ブラウザ上で認証を求められるので許可すると、デプロイされる。

完了したらhttp://[project id].appspot.comにアクセスすると、動作が確認できる。

これでひとまず、GAEアプリケーションを開発してく準備が整った感じ。